如何将炫酷的报表直接截图发送邮件——在Superset 0.37使用Schedule Email功能

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Tair(兼容Redis),内存型 2GB
简介: Superset的图表是非常炫酷的,但是原来的版本只能在web端查看,而最新的0.37版本,可以将图表截图直接发送成邮件,非常的方便。本文将详细介绍Superset 0.37 定时邮件功能。安装过程遇到的任何问题请关注 “实时流式计算” 随时与我联系。所有的离线安装包已经整理好,请后台回复 “superset0928” 下载。

开启邮件功能


superset 0.37的电子邮件功能 默认是关闭的

电子邮件功能允许用户对以下两种电子邮件进行报告:

  • 图表和仪表板(附件或嵌在邮件之中)
  • 图表数据(CSV附件)

vi config.py

开启邮件功能

ENABLE_SCHEDULED_EMAIL_REPORTS = True

要发送电子邮件 还需要配置一下SMTP

EMAIL_NOTIFICATIONS = True
SMTP_HOST = "email-smtp.eu-west-1.amazonaws.com"
SMTP_STARTTLS = True
SMTP_SSL = False
SMTP_USER = "smtp_username"
SMTP_PORT = 25
SMTP_PASSWORD = os.environ.get("SMTP_PASSWORD")
SMTP_MAIL_FROM = "insights@komoot.com"

启动前记得执行 superset init 否则可能看不到菜单

这时候再登录superset,我们可以看到在Manage下有两个新的菜单了

Dashboard Emails 和 Chart Email Schedules

微信图片_20220528110933.png


配置Celery


邮件功能需要使用Celery进行定时调度,为了开启Celery,需要在config.py中进行配置。

class CeleryConfig(object):
    BROKER_URL = 'redis://localhost:6379/0'
    CELERY_IMPORTS = (
        'superset.sql_lab',
        'superset.tasks',
    )
    CELERY_RESULT_BACKEND = 'redis://localhost:6379/0'
    CELERYD_LOG_LEVEL = 'DEBUG'
    CELERYD_PREFETCH_MULTIPLIER = 10
    CELERY_ACKS_LATE = True
    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

随后启动celery worker和celery beat

celery worker --app=superset.tasks.celery_app:app --pool=prefork -O fair -c 4
celery beat --app=superset.tasks.celery_app:app

为了更好地监控Celery,建议大家安装flower,这是一个celery的监控,可以清楚的看到celery任务的执行情况。

pip install flower
celery flower --app=superset.tasks.celery_app:app

flower页面:

微信图片_20220528110937.png


安装浏览器驱动


为了可以渲染看板,需要在superset所在环境下本地安装浏览器驱动。

驱动的类型在config.py中配置

EMAIL_REPORT_WEBDRIVER = "chrome"

这里安装chrome

从google官方网站下载google chrome安装包

 http://www.google.cn/chrome/browser/desktop/index.html

选择linux系统,并下载google-chrome-stable_current_x86_64.rpm

安装:rpm -ivh google-chrome-stable_current_x86_64.rpm

再安装chromedriver

http://chromedriver.chromium.org/

unzip chromedriver_linux64.zip

mv chromedriver /usr/bin/

清注意两者版本一定要保证一致

安装成功输入 chrome 和 chromedriver验证一下


发送邮件


准备工作做好以后,就可以新建一个邮件发送任务了。

发送看板:

微信图片_20220528110941.png

可以选择发送的看板,crontab表达式,邮箱,是否发送测试邮件,内联还是附件。。

也可以选择发送图表:

微信图片_20220528110944.png

可以选择发送原始数据。

最后,在邮件中接收到看板和图表了~

邮件看板:

微信图片_20220528110948.png

邮件图表:

微信图片_20220528110951.png

原始数据:

微信图片_20220528110955.png


常见错误


接收不到邮件,也没有看到错误提示

请仔细查看celery worker的log日志,如果发送失败会有错误提示。

可能是SMTP或者其他的配置问题。

如果log正常,请注意设置 SCHEDULED_EMAIL_DEBUG_MODE 是不是设置成了True,如果是True将进行调试模式不会真正的发送邮件,要改成False。

Error: Failed dependencies:

Error: Failed dependencies:
    libappindicator3.so.1()(64bit) is needed by google-chrome-stable-85.0.4183.121-1.x86_64
    liberation-fonts is needed by google-chrome-stable-85.0.4183.121-1.x86_64
    libvulkan.so.1()(64bit) is needed by google-chrome-stable-85.0.4183.121-1.x86_64

安装chrome依赖失败,有网的情况下 yum install libappindicator3 等等 依次安装,没网的话只能自行下载

IndexError: pop from empty list

redis.exceptions.AuthenticationError: Authentication required.

redis认证失败,redis设置了密码,但是访问的URL没有设置密码,设置好密码:“redis://xxx:xxx@localhost:6379/0”

想去掉邮件中的Explore in Superset

需要修改源码,位于

anaconda3/lib/python3.7/site-packages/apache_superset-0.37.0-py3.7.egg/superset/tasks/schedules.py

里面有report charts的邮件模板,修改为自己想要的即可。

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
8月前
|
安全 API 数据安全/隐私保护
email api接口配置教程步骤详解
Email API是用于程序化访问邮件服务的工具,让开发者能集成邮件功能到应用中。配置Email API包括选择供应商(如SendGrid、Mailgun、AokSend),注册获取API密钥,配置API参数,及测试邮件发送。使用Email API能提升邮件发送的可靠性和效率,便于邮件管理及营销活动。AokSend支持大量验证码发送,适合高效邮件运营。
|
算法 数据安全/隐私保护
Daily-Blog项目后台日志(中)
Daily-Blog项目后台日志(中)
105 0
|
JavaScript Java Spring
一张思维导图带你学会使用SpringBoot中的Schedule定时发送邮件
一张思维导图带你学会使用SpringBoot中的Schedule定时发送邮件
166 0
|
存储 数据安全/隐私保护
Daily-Blog项目后台日志(下)
Daily-Blog项目后台日志(下)
139 0
|
XML NoSQL 前端开发
Daily-Blog项目后台日志(上)
Daily-Blog项目后台日志(上)
76 0
jira学习案例17-hook+ts实现useArray小作业
jira学习案例17-hook+ts实现useArray小作业
74 0
jira学习案例17-hook+ts实现useArray小作业
jira学习案例10-为什么需要ts
jira学习案例10-为什么需要ts
73 0
jira学习案例10-为什么需要ts
|
开发工具 git
GitHub/GitLab 为不同的项目修改提交名字 user.name 和邮箱 user.email(附:批量处理脚本)
大疫情的背景下,家里的电脑需要同时支撑自己和公司的项目,根据 GitHub/GitLab 网站的提交记录上看,其是根据邮箱来辨识用户的,所以有必要分别针对不同的项目设置不同的 Git 名字(user.name)和邮箱(user.email)。
595 1
学习笔记jira项目18-实现登录表单ts类型1
学习笔记jira项目18-实现登录表单ts类型1
129 0
学习笔记jira项目18-实现登录表单ts类型1
express学习20-多人管理项目8user登录
express学习20-多人管理项目8user登录
113 0