You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@superset.apache.org by GitBox <gi...@apache.org> on 2020/04/09 20:34:38 UTC
[GitHub] [incubator-superset] sweileh opened a new issue #9498: Scheduled
email worker is reporting an error
sweileh opened a new issue #9498: Scheduled email worker is reporting an error
URL: https://github.com/apache/incubator-superset/issues/9498
I have an issue with scheduled email of superset.
After installing superset in containers using docker-compose, everything is working perfectly except for the scheduled email feature.
After following exactly what is in the superset installation and configuration page (regarding the report emails), the worker that does the email task is reporting the below error.
### Expected results
What is expected is for the worker to successfully send the email.
### Actual results
```
Traceback (most recent call last):
File "/usr/local/lib/python3.6/site-packages/celery/app/trace.py", line 385, in trace_task
R = retval = fun(*args, **kwargs)
File "/app/superset/app.py", line 114, in __call__
return task_base.__call__(self, *args, **kwargs)
File "/usr/local/lib/python3.6/site-packages/celery/app/trace.py", line 650, in __protected_call__
return self.run(*args, **kwargs)
File "/app/superset/tasks/schedules.py", line 372, in schedule_email_report
deliver_dashboard(schedule)
File "/app/superset/tasks/schedules.py", line 210, in deliver_dashboard
driver = create_webdriver()
File "/app/superset/tasks/schedules.py", line 155, in create_webdriver
options.add_argument("--headless")
UnboundLocalError: local variable 'options' referenced before assignment
```
#### Screenshots
![Screenshot from 2020-04-09 23-32-57](https://user-images.githubusercontent.com/34817857/78933583-988b6780-7aba-11ea-90a2-6604a6026d72.png)
![Screenshot from 2020-04-09 23-26-24](https://user-images.githubusercontent.com/34817857/78933575-96290d80-7aba-11ea-9701-7c2f66e6df93.png)
![image](https://user-images.githubusercontent.com/34817857/78931744-7217fd00-7ab7-11ea-9a73-21e9e33f8b95.png)
#### How to reproduce the bug
Used the following Dockerfile (same as original but added the webdrivers to it and exposed 8088 port and 5555 port for flower).
```
######################################################################
# PY stage that simply does a pip install on our requirements
######################################################################
ARG PY_VER=3.6.9
FROM python:${PY_VER} AS superset-py
RUN mkdir /app \
&& apt-get update -y \
&& apt-get install -y --no-install-recommends \
build-essential \
default-libmysqlclient-dev \
libpq-dev \
libgtk-3-0 xvfb firefox-esr \
&& rm -rf /var/lib/apt/lists/*
RUN wget https://github.com/mozilla/geckodriver/releases/download/v0.24.0/geckodriver-v0.24.0-linux64.tar.gz
RUN tar -x geckodriver -zf geckodriver-v0.24.0-linux64.tar.gz -O > /usr/bin/geckodriver
RUN chmod +x /usr/bin/geckodriver
RUN rm geckodriver-v0.24.0-linux64.tar.gz
RUN wget -q "https://chromedriver.storage.googleapis.com/79.0.3945.36/chromedriver_linux64.zip" -O /tmp/chromedriver.zip \
&& unzip /tmp/chromedriver.zip -d /usr/bin/ \
&& rm /tmp/chromedriver.zip
# First, we just wanna install requirements, which will allow us to utilize the cache
# in order to only build if and only if requirements change
COPY ./requirements.txt /app/
RUN cd /app \
&& pip install --no-cache -r requirements.txt
######################################################################
# Node stage to deal with static asset construction
######################################################################
FROM node:10-jessie AS superset-node
ARG NPM_BUILD_CMD="build"
ENV BUILD_CMD=${NPM_BUILD_CMD}
# NPM ci first, as to NOT invalidate previous steps except for when package.json changes
RUN mkdir -p /app/superset-frontend
RUN mkdir -p /app/superset/assets
COPY ./docker/frontend-mem-nag.sh /
COPY ./superset-frontend/package* /app/superset-frontend/
RUN /frontend-mem-nag.sh \
&& cd /app/superset-frontend \
&& npm ci
# Next, copy in the rest and let webpack do its thing
COPY ./superset-frontend /app/superset-frontend
# This is BY FAR the most expensive step (thanks Terser!)
RUN cd /app/superset-frontend \
&& npm run ${BUILD_CMD} \
&& rm -rf node_modules
######################################################################
# Final lean image...
######################################################################
ARG PY_VER=3.6.9
FROM python:${PY_VER} AS lean
ENV LANG=C.UTF-8 \
LC_ALL=C.UTF-8 \
FLASK_ENV=production \
FLASK_APP="superset.app:create_app()" \
PYTHONPATH="/app/pythonpath" \
SUPERSET_HOME="/app/superset_home" \
SUPERSET_PORT=8088
RUN useradd --user-group --no-create-home --no-log-init --shell /bin/bash superset \
&& mkdir -p ${SUPERSET_HOME} ${PYTHONPATH} \
&& apt-get update -y \
&& apt-get install -y --no-install-recommends \
build-essential \
default-libmysqlclient-dev \
libpq-dev \
libgtk-3-0 xvfb firefox-esr \
&& rm -rf /var/lib/apt/lists/*
RUN wget https://github.com/mozilla/geckodriver/releases/download/v0.24.0/geckodriver-v0.24.0-linux64.tar.gz
RUN tar -x geckodriver -zf geckodriver-v0.24.0-linux64.tar.gz -O > /usr/bin/geckodriver
RUN chmod +x /usr/bin/geckodriver
RUN rm geckodriver-v0.24.0-linux64.tar.gz
RUN wget -q "https://chromedriver.storage.googleapis.com/79.0.3945.36/chromedriver_linux64.zip" -O /tmp/chromedriver.zip \
&& unzip /tmp/chromedriver.zip -d /usr/bin/ \
COPY --from=superset-py /usr/local/lib/python3.6/site-packages/ /usr/local/lib/python3.6/site-packages/
# Copying site-packages doesn't move the CLIs, so let's copy them one by one
COPY --from=superset-py /usr/local/bin/gunicorn /usr/local/bin/celery /usr/local/bin/flask /usr/bin/
COPY --from=superset-node /app/superset/static/assets /app/superset/static/assets
COPY --from=superset-node /app/superset-frontend /app/superset-frontend
## Lastly, let's install superset itself
COPY superset /app/superset
COPY setup.py MANIFEST.in README.md /app/
RUN cd /app \
&& chown -R superset:superset * \
&& pip install -e .
RUN Xvfb :10 -ac &
RUN export DISPLAY=:10
COPY ./docker/docker-entrypoint.sh /usr/bin/
WORKDIR /app
USER superset
```
Used the following configuration file (same as original, but added the schedule email configurations):
```
import logging
import os
from werkzeug.contrib.cache import FileSystemCache
from celery.schedules import crontab
logger = logging.getLogger()
def get_env_variable(var_name, default=None):
"""Get the environment variable or raise exception."""
try:
return os.environ[var_name]
except KeyError:
if default is not None:
return default
else:
error_msg = "The environment variable {} was missing, abort...".format(
var_name
)
raise EnvironmentError(error_msg)
DATABASE_DIALECT = get_env_variable("DATABASE_DIALECT")
DATABASE_USER = get_env_variable("DATABASE_USER")
DATABASE_PASSWORD = get_env_variable("DATABASE_PASSWORD")
DATABASE_HOST = get_env_variable("DATABASE_HOST")
DATABASE_PORT = get_env_variable("DATABASE_PORT")
DATABASE_DB = get_env_variable("DATABASE_DB")
# The SQLAlchemy connection string.
SQLALCHEMY_DATABASE_URI = "%s://%s:%s@%s:%s/%s" % (
DATABASE_DIALECT,
DATABASE_USER,
DATABASE_PASSWORD,
DATABASE_HOST,
DATABASE_PORT,
DATABASE_DB,
)
REDIS_HOST = get_env_variable("REDIS_HOST")
REDIS_PORT = get_env_variable("REDIS_PORT")
RESULTS_BACKEND = FileSystemCache('/app/superset_home/sqllab')
class CeleryConfig(object):
BROKER_URL = "redis://%s:%s/0" % (REDIS_HOST, REDIS_PORT)
CELERY_IMPORTS = ("superset.sql_lab",)
CELERY_RESULT_BACKEND = "redis://%s:%s/1" % (REDIS_HOST, REDIS_PORT)
CELERY_TASK_PROTOCOL = 1
CELERY_ANNOTATIONS = {
'sql_lab.get_sql_results': {
'rate_limit': '100/s',
},
'email_reports.send': {
'rate_limit': '1/s',
'time_limit': 120,
'soft_time_limit': 150,
'ignore_result': True,
},
}
CELERYBEAT_SCHEDULE = {
'email_reports.schedule_hourly': {
'task': 'email_reports.schedule_hourly',
'schedule': crontab(minute=1, hour='*'),
},
}
CELERY_CONFIG = CeleryConfig
# email configurations
ENABLE_SCHEDULED_EMAIL_REPORTS = get_env_variable("ENABLE_SCHEDULED_EMAIL_REPORTS")
EMAIL_NOTIFICATIONS = get_env_variable("EMAIL_NOTIFICATIONS")
# smtp server configuration
SMTP_HOST = get_env_variable("SMTP_HOST")
SMTP_STARTTLS = get_env_variable("SMTP_STARTTLS")
SMTP_SSL = get_env_variable("SMTP_SSL")
SMTP_USER = get_env_variable("SMTP_USER")
SMTP_PORT = get_env_variable("SMTP_PORT")
SMTP_PASSWORD = get_env_variable("SMTP_PASSWORD")
SMTP_MAIL_FROM = get_env_variable("SMTP_MAIL_FROM")
# Email reports - minimum time resolution (in minutes) for the crontab
EMAIL_REPORTS_CRON_RESOLUTION = get_env_variable("EMAIL_REPORTS_CRON_RESOLUTION")
# Email report configuration
# From address in emails
EMAIL_REPORT_FROM_ADDRESS = get_env_variable("EMAIL_REPORT_FROM_ADDRESS")
# Send bcc of all reports to this address. Set to None to disable.
# This is useful for maintaining an audit trail of all email deliveries.
EMAIL_REPORT_BCC_ADDRESS = get_env_variable("EMAIL_REPORT_BCC_ADDRESS")
# User credentials to use for generating reports
# This user should have permissions to browse all the dashboards and
# slices.
# TODO: In the future, login as the owner of the item to generate reports
EMAIL_REPORTS_USER = get_env_variable("EMAIL_REPORTS_USER")
EMAIL_REPORTS_SUBJECT_PREFIX = get_env_variable("EMAIL_REPORTS_SUBJECT_PREFIX")
EMAIL_REPORTS_WEBDRIVER = get_env_variable("EMAIL_REPORTS_WEBDRIVER")
# The base URL to query for accessing the user interface
WEBDRIVER_BASEURL = get_env_variable("WEBDRIVER_BASEURL")
#
# Optionally import superset_config_docker.py (which will have been included on
# the PYTHONPATH) in order to allow for local settings to be overridden
#
try:
from superset_config_docker import * # noqa
import superset_config_docker
logger.info(
f"Loaded your Docker configuration at " f"[{superset_config_docker.__file__}]"
)
except ImportError:
logger.info("Using default Docker config...")
```
The .env file
```
#
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
COMPOSE_PROJECT_NAME=superset
# database configurations (do not modify)
DATABASE_DB=<SOME_DB>
DATABASE_HOST=<SOME_HOST>
DATABASE_PASSWORD=<SOME_PASSWORD>
DATABASE_USER=<SOME_USER>
# database engine specific environment variables
# change the below if you prefers another database engine
DATABASE_PORT=5432
DATABASE_DIALECT=postgresql+psycopg2
POSTGRES_DB=<SOME_DB>
POSTGRES_USER=<SOME_USER>
POSTGRES_PASSWORD=<SOME_PASSWORD>
# Add the mapped in /app/pythonpath_docker which allows devs to override stuff
PYTHONPATH=/app/pythonpath:/app/pythonpath_docker
REDIS_HOST=redis
REDIS_PORT=6379
FLASK_ENV=production
SUPERSET_ENV=production
SUPERSET_LOAD_EXAMPLES=yes
# Define the secert key
SECRET_KEY=<SOME_KEY>
# Email configurations
ENABLE_SCHEDULED_EMAIL_REPORTS=True
EMAIL_NOTIFICATIONS=True
# smtp server configuration
SMTP_HOST="smtp.gmail.com"
SMTP_STARTTLS=False
SMTP_SSL=True
SMTP_USER="notifications"
SMTP_PORT=587
SMTP_PASSWORD="<SOME_PASSWORD>"
SMTP_MAIL_FROM="<SOME_EMAIL>"
# Email reports - minimum time resolution (in minutes) for the crontab
EMAIL_REPORTS_CRON_RESOLUTION=15
# Email report configuration
# From address in emails
EMAIL_REPORT_FROM_ADDRESS="<SOME_EMAIL>"
# Send bcc of all reports to this address. Set to None to disable.
# This is useful for maintaining an audit trail of all email deliveries.
EMAIL_REPORT_BCC_ADDRESS="<SOME_EMAIL>"
# User credentials to use for generating reports
# This user should have permissions to browse all the dashboards and
# slices.
# TODO: In the future, login as the owner of the item to generate reports
EMAIL_REPORTS_USER="<SOME_ADMIN_USER>"
EMAIL_REPORTS_SUBJECT_PREFIX="[Superset Report] "
EMAIL_REPORTS_WEBDRIVER="firefox"
# Window size - this will impact the rendering of the data
WEBDRIVER_WINDOW={"dashboard": (1600, 2000), "slice": (3000, 1200)}
# The base URL to query for accessing the user interface
WEBDRIVER_BASEURL="http://0.0.0.0:8088/"
```
I tried both web drivers (firefox and chrome) and got the same error with both
Finally, below is my docker-compose file (similar to original file but with extra worker, celery beat for email and flower added)
```
x-superset-build: &superset-build
args:
NPM_BUILD_CMD: build-dev
context: ./
dockerfile: Dockerfile
target: dev
x-superset-depends-on: &superset-depends-on
- redis
x-superset-volumes: &superset-volumes
# /app/pythonpath_docker will be appended to the PYTHONPATH in the final container
- ./docker/docker-init.sh:/app/docker-init.sh
- ./docker/pythonpath_dev:/app/pythonpath
- ./superset:/app/superset
- ./superset-frontend:/app/superset-frontend
- superset_home:/app/superset_home
version: "3.7"
services:
redis:
image: redis:3.2
restart: unless-stopped
ports:
- "127.0.0.1:6379:6379"
volumes:
- redis:/data
superset:
build: *superset-build
env_file: docker/.env
restart: unless-stopped
ports:
- 8088:8088
depends_on: *superset-depends-on
volumes: *superset-volumes
superset-init:
build: *superset-build
command: ["/app/docker-init.sh"]
env_file: docker/.env
depends_on: *superset-depends-on
volumes: *superset-volumes
superset-node:
image: node:10-jessie
command: ["bash", "-c", "cd /app/superset-frontend && npm install --global webpack webpack-cli && npm install && npm run dev"]
env_file: docker/.env
depends_on: *superset-depends-on
volumes: *superset-volumes
superset-worker-1:
build: *superset-build
command: ["celery", "worker", "--pool=prefork", "--app=superset.tasks.celery_app:app", "-Ofair" , "-c 4"]
env_file: docker/.env
restart: unless-stopped
depends_on: *superset-depends-on
volumes: *superset-volumes
superset-worker-2:
build: *superset-build
command: ["celery", "worker", "--pool=prefork", "--app=superset.tasks.celery_app:app", "-Ofair" , "-c 4"]
env_file: docker/.env
restart: unless-stopped
depends_on: *superset-depends-on
volumes: *superset-volumes
superset-beat:
build: *superset-build
command: ["celery", "beat", "--app=superset.tasks.celery_app:app"]
user: root
env_file: docker/.env
restart: unless-stopped
depends_on: *superset-depends-on
volumes: *superset-volumes
superset-flower:
build: *superset-build
command: ["celery", "flower", "--app=superset.tasks.celery_app:app", "-Ofair"]
env_file: docker/.env
restart: unless-stopped
depends_on: *superset-depends-on
ports:
- 5555:5555
volumes: *superset-volumes
volumes:
superset_home:
external: false
redis:
external: false
```
### Environment
all the versions are what is exactly in the `master`.
### Checklist
Make sure these boxes are checked before submitting your issue - thank you!
- [x] I have checked the superset logs for python stacktraces and included it here as text if there are any.
- [x] I have reproduced the issue with at least the latest released version of superset.
- [x] I have checked the issue tracker for the same issue and I haven't found one similar.
### Additional context
ps. I think it might be in the email report configurations, but I have been trying to solve it for almost 2 days. I though it might be the webdrivers but the code does not reach that point. The unbounded local error occur when the code tries to set the webdriver instance to headless.
I also changed the docker file to install chrome as in miteshchavda reply [here](https://github.com/apache/incubator-superset/issues/9477#issuecomment-610679276) and I also changed the driver to chrome, but I still got the same issue.
Thanks in advance
----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
With regards,
Apache Git Services
---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@superset.apache.org
For additional commands, e-mail: notifications-help@superset.apache.org
[GitHub] [superset] Hemanthdev commented on issue #9498: Scheduled email worker is reporting an error
Posted by GitBox <gi...@apache.org>.
Hemanthdev commented on issue #9498:
URL: https://github.com/apache/superset/issues/9498#issuecomment-791679666
I am also facing the Email issue on the superset SMTP configuration
----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@superset.apache.org
For additional commands, e-mail: notifications-help@superset.apache.org
[GitHub] [incubator-superset] wangjuni commented on issue #9498: Scheduled email worker is reporting an error
Posted by GitBox <gi...@apache.org>.
wangjuni commented on issue #9498:
URL: https://github.com/apache/incubator-superset/issues/9498#issuecomment-636758866
hi, Do you shcedule send email success? I want to schedule send email ,but fail. Do i have you what you do (config file eg.) if you success?
thanks very much!
----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@superset.apache.org
For additional commands, e-mail: notifications-help@superset.apache.org
[GitHub] [incubator-superset] bkyryliuk commented on issue #9498: Scheduled email worker is reporting an error
Posted by GitBox <gi...@apache.org>.
bkyryliuk commented on issue #9498:
URL: https://github.com/apache/incubator-superset/issues/9498#issuecomment-645502829
after reading the code: https://github.com/apache/incubator-superset/blob/master/superset/tasks/schedules.py#L170
looks like EMAIL_REPORTS_WEBDRIVER is not set to chrome or firefox - that's causing the exception
----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@superset.apache.org
For additional commands, e-mail: notifications-help@superset.apache.org
[GitHub] [incubator-superset] wangjuni removed a comment on issue #9498: Scheduled email worker is reporting an error
Posted by GitBox <gi...@apache.org>.
wangjuni removed a comment on issue #9498:
URL: https://github.com/apache/incubator-superset/issues/9498#issuecomment-636758866
hi, Do you shcedule send email success? I want to schedule send email ,but fail. Do i have you what you do (config file eg.) if you success?
thanks very much!
----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@superset.apache.org
For additional commands, e-mail: notifications-help@superset.apache.org
[GitHub] [incubator-superset] sweileh commented on issue #9498: Scheduled email worker is reporting an error
Posted by GitBox <gi...@apache.org>.
sweileh commented on issue #9498:
URL: https://github.com/apache/incubator-superset/issues/9498#issuecomment-619440337
I'm closing this since I got no response.
----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@superset.apache.org
For additional commands, e-mail: notifications-help@superset.apache.org
[GitHub] [incubator-superset] caldweln commented on issue #9498: Scheduled email worker is reporting an error
Posted by GitBox <gi...@apache.org>.
caldweln commented on issue #9498:
URL: https://github.com/apache/incubator-superset/issues/9498#issuecomment-645309686
@sweileh were you able to resolve this in the end? I'm experiencing this issue too.
----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@superset.apache.org
For additional commands, e-mail: notifications-help@superset.apache.org
[GitHub] [incubator-superset] sweileh commented on issue #9498: Scheduled email worker is reporting an error
Posted by GitBox <gi...@apache.org>.
sweileh commented on issue #9498:
URL: https://github.com/apache/incubator-superset/issues/9498#issuecomment-647915341
Sorry for the late response.
No I did not fix this issue. I'm planning to do it externally since I need the email to be send based on a trigger.
As for @bkyryliuk, I did set the driver as show above to firefox
EMAIL_REPORTS_WEBDRIVER="firefox"
----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@superset.apache.org
For additional commands, e-mail: notifications-help@superset.apache.org