关于superset邮件发送所遇到的坑

- 日理万妓 2022-12-28 14:13 667阅读 0赞

最近公司做superset二次开发,鉴于网上资料比较少,特意把开发中遇到的bug做一下记录,希望留给有用的人

1,vim config.py

  1. ENABLE_SCHEDULED_EMAIL_REPORTS = True #开启邮件发送功能
  2. #----------
  3. ##配置自己邮件发送服务器地址,邮箱用户密码
  4. EMAIL_NOTIFICATIONS = True
  5. SMTP_HOST = "email-smtp.eu-west-1.amazonaws.com"
  6. SMTP_STARTTLS = True
  7. SMTP_SSL = False
  8. SMTP_USER = "smtp_username"
  9. SMTP_PORT = 25
  10. SMTP_PASSWORD = os.environ.get("SMTP_PASSWORD")
  11. SMTP_MAIL_FROM = "insights@komoot.com"
  12. #---------------------
  13. ##配置哪个用户有权限发送,这个用户要拥有最高权限,一般用admin
  14. EMAIL_REPORTS_USER = "admin"
  15. ## 浏览器类型改成chrome,firefox截图有缺陷不建议使用,
  16. WEBDRIVER_TYPE = "chrome"
  17. WEBDRIVER_OPTION_ARGS = [##需要特别注意google浏览器这里不需要再配置其它额外的,否则报各种错误,自己被坑了很久
  18. "--no-sandbox",#由于我用的是root账户,google必须加上才可以root账户访问
  19. "--force-device-scale-factor=2.0",
  20. "--high-dpi-support=2.0",
  21. "--headless",##linuxchrome浏览器无头模式访问
  22. ]
  23. ##要定时发送需要配置celery
  24. class CeleryConfig(object):
  25. BROKER_URL = 'redis://localhost:6379/0'##改成自己的redis服务器地址
  26. CELERY_IMPORTS = (
  27. 'superset.sql_lab',
  28. 'superset.tasks',
  29. )
  30. CELERY_RESULT_BACKEND = 'redis://localhost:6379/0'##改成自己的redis服务器地址
  31. CELERYD_LOG_LEVEL = 'DEBUG'
  32. CELERYD_PREFETCH_MULTIPLIER = 10
  33. CELERY_ACKS_LATE = True
  34. CELERY_ANNOTATIONS = {
  35. 'sql_lab.get_sql_results': {
  36. 'rate_limit': '100/s',
  37. },
  38. 'email_reports.send': {
  39. 'rate_limit': '1/s',
  40. 'time_limit': 120,
  41. 'soft_time_limit': 150,
  42. 'ignore_result': True,
  43. },
  44. }
  45. CELERYBEAT_SCHEDULE = {
  46. 'email_reports.schedule_hourly': {
  47. 'task': 'email_reports.schedule_hourly',
  48. 'schedule': crontab(minute=1, hour='*'),
  49. },
  50. }
  51. CELERY_CONFIG = CeleryConfig
  52. ## 下面是redis配置,同样host改成自己的redis服务器地址
  53. from cachelib.redis import RedisCache
  54. RESULTS_BACKEND = RedisCache(
  55. host='localhost', port=6379, key_prefix='superset_results')
  56. CACHE_CONFIG = {
  57. 'CACHE_TYPE': 'redis',
  58. 'CACHE_DEFAULT_TIMEOUT': 60 * 60 * 24, # 1 day default (in secs)
  59. 'CACHE_KEY_PREFIX': 'superset_results',
  60. 'CACHE_REDIS_URL': 'redis://localhost:6379/0',
  61. }
  62. ##修改成你superset部署的服务器地址,端口号可以自定义,当然也可以直接用下面的配置
  63. WEBDRIVER_BASEURL = "http://0.0.0.0:8080/"

2,进入superset环境,

执行:source activate superset —激活superset环境

执行superset init命令后可以看到多了两个按钮

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM2ODgxMTA2_size_16_color_FFFFFF_t_70

3,安装google 浏览器和chromedriver,记住版本一定要对上

本人chromedriver版本: ChromeDriver 87.0.4280.88 查看驱动版本命令:chromedriver

google浏览器版本:Google Chrome 87.0.4280.88 查看浏览器版本命令:google-chrome —version

至于安装google浏览器和缺少的依赖详见本人另一篇博客:https://blog.csdn.net/qq_36881106/article/details/110637950,,https://blog.csdn.net/weixin_45010467/article/details/107490043

4,重要由于我们的superset是二次开发,在用户登录的时候往全局session中放入了用户的工号,和访问级别导致我后面的邮件发送一直报keyword error错误,这个问题困惑了我很久,下面说说我的解决方法:

  1. 害人的两个key
  2. session['job_level'] = job_l
  3. session['job_number'] = job_n

由于这两个key是在全局session中,后面发送邮件时是重新调用的login方法,会根据用户工号查询数据,从而导致header中找不到这两个key,我的解决方法是:重写

  1. get_auth_cookies这个方法给起个别名,在重写的这个方法中加入这两个key,一定不要在原来的方法中修改,否则会报错

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM2ODgxMTA2_size_16_color_FFFFFF_t_70 1

如果发送的是data原数据需要在task/schedules.py中做以下修改,把调用get_auth_cookies方法改成get_auth_cookies2方法,如下图:

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM2ODgxMTA2_size_16_color_FFFFFF_t_70 2

如果发送的是dashbord需要在utils/machine_auth.py中做以下修改,把调用get_auth_cookies方法改成get_auth_cookies2方法,如下图:

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM2ODgxMTA2_size_16_color_FFFFFF_t_70 3

在收到的邮件中,中文可能是乱码,需要在utils/core.py中做两处修改:修改完成后需要清除浏览器cookie或者用无痕模式重新打开一个浏览器:ctrl+shift+n

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM2ODgxMTA2_size_16_color_FFFFFF_t_70 4

当然以上是自己发送邮件为附件,需要下载源数据的配置,其它online,什么的就更简单了,最后献上自己发送完的一张截图,如果有不明白的欢迎评论留言:

20201218101249759.pngwatermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM2ODgxMTA2_size_16_color_FFFFFF_t_70 5

如果附件中的中文乱码,请在linux中安装中文字体,导入csv中文乱码参考:https://blog.csdn.net/zhouyan8603/article/details/107484249

发表评论

表情:
评论列表 (有 0 条评论,667人围观)

还没有评论,来说两句吧...

相关阅读

    相关 关于IP遇到

    今天用本机作为服务器,用Android模拟器写了一个关于http的小demo,刷刷刷~代码写完了,一切正常,但运行的时候就是获取不到信息,于是各种检查代码~最后发现URL写错了