目录
Superset配置邮件发送报告功能
superset版本1.3.0
安装方式: docker官方安装
superset config配置
EMAIL_REPORTS_USER="admin" # 发送邮件的用户账号
EMAIL_REPORTS_SUBJECT_PREFIX = "[Report] " # 邮件前缀
EMAIL_PAGE_RENDER_WAIT=300
EMAIL_NOTIFICATIONS = True
SMTP_HOST = "smtp.exmail.qq.com"
# 这部分直接参考smtplib模组的参数即可,如果是腾讯企业邮箱可以直接用下面的配置
SMTP_STARTTLS = False
SMTP_SSL = True
SMTP_USER = "***@***.com"
SMTP_PORT = 465 # your port eg. 587
SMTP_PASSWORD = "******"
SMTP_MAIL_FROM = "***@***.com"
WEBDRIVER_TYPE= "chrome"
# 用chrome的我这样配,记得driver和chrome版本匹配
WEBDRIVER_OPTION_ARGS = [
"--force-device-scale-factor=2.0",
"--high-dpi-support=2.0",
"--headless",
"--disable-gpu",
"--disable-dev-shm-usage",
"--no-sandbox",
"--disable-setuid-sandbox",
"--disable-extensions",
]
FEATURE_FLAGS = {"ALERT_REPORTS": True,
"ENABLE_TEMPLATE_PROCESSING": True,
"THUMBNAILS" : False,}
WEBDRIVER_WINDOW = {"dashboard": (1600, 3500), "slice": (1280, 960)} # 图片报告的图片大小
ALERT_REPORTS_NOTIFICATION_DRY_RUN = False # 为true时测试配置效果,不发送邮件
WEBDRIVER_BASEURL = "https://***"
WEBDRIVER_BASEURL_USER_FRIENDLY="https://***"
SUPERSET_WEBSERVER_PROTOCOL = "http"
SUPERSET_WEBSERVER_ADDRESS = "superset"
SUPERSET_WEBSERVER_TIMEOUT=600
如上配置成功后有两个问题,一个是发送csv文件时的图表标题需要为英文,否则邮件会发送但没有附件;另一个时发送png图片时,中文字符为方框无法展示
debian10 配置中文环境
之所以图片报告发送时,中文是方框,是因为没有配置容器中文环境
如下所示,查看当前环境
root@ca04d687222c:~# locale
LANG=zh_CN.utf8
LANGUAGE=
LC_CTYPE="C.UTF-8"
LC_NUMERIC="C.UTF-8"
LC_TIME="C.UTF-8"
LC_COLLATE="C.UTF-8"
LC_MONETARY="C.UTF-8"
LC_MESSAGES="C.UTF-8"
LC_PAPER="C.UTF-8"
LC_NAME="C.UTF-8"
LC_ADDRESS="C.UTF-8"
LC_TELEPHONE="C.UTF-8"
LC_MEASUREMENT="C.UTF-8"
LC_IDENTIFICATION="C.UTF-8"
LC_ALL=C.UTF-8
lang需要设置为 zh_CN.utf8 才能使浏览器正常显示中文
首先,确认locale 是否已安装对应的字符集
root@ca04d687222c:~# locale -a
C
C.UTF-8
POSIX
由于容器默认是精简版,所以没有安装,而要在容器中安装对应的字符集,很麻烦
首先,给apt换源
查看linux发行版本
cat /etc/os-release
PRETTY_NAME="Debian GNU/Linux 10 (buster)"
NAME="Debian GNU/Linux"
VERSION_ID="10"
VERSION="10 (buster)"
VERSION_CODENAME=buster
ID=debian
HOME_URL="https://www.debian.org/"
SUPPORT_URL="https://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"
Debian GNU/Linux 10 (buster) 版本,该版本下默认安装工具是apt,如果不换源,要么架梯子,要么将体验b/s的下载速度,那感觉太酸爽。
vim 打开/etc/apt/sources.list,替换为如下buster版本的源,如选错镜像,apt会各种冲突,什么都装不了。修改完源后,需要apt update一下,让源生效
vim /etc/apt/sources.list
deb http://mirrors.163.com/debian/ buster main non-free contrib
deb http://mirrors.163.com/debian/ buster-updates main non-free contrib
deb http://mirrors.163.com/debian/ buster-backports main non-free contrib
deb-src http://mirrors.163.com/debian/ buster main non-free contrib
deb-src http://mirrors.163.com/debian/ buster-updates main non-free contrib
deb-src http://mirrors.163.com/debian/ buster-backports main non-free contrib
deb http://mirrors.163.com/debian-security/ buster/updates main non-free contrib
deb-src http://mirrors.163.com/debian-security/ buster/updates main non-free contrib
update
update 是同步 /etc/apt/sources.list 和 /etc/apt/sources.list.d 中列出的源的索引,这样才能获取到最新的软件包。
upgrade
upgrade 是升级已安装的所有软件包,升级之后的版本就是本地索引里的,因此,在执行 upgrade 之前一定要执行 update, 这样才能是最新的。
An update should always be performed before an upgrade or dist-upgrade.
upgrade is used to install the newest versions of all packages currently installed on the system from the sources enumerated in /etc/apt/sources.list. Packages currently installed with new versions available are retrieved and upgraded.
安装对应字符集
首先,安装locals
apt install locales
然后,安装字符集
dpkg-reconfigure locales
选486即可,可惜我的486第一季全网下架了
486. zh_CN.UTF-8 UTF-8
安装成功后,可以使用 locale -a 指令查看所有可用字符集
安装完成后需要启用,在此处卡了很久
我使用如下指令,、etc/default/locale配置文件里也确实修改了,但使用locale指令查看,还是没变化。最后又设置环境变量的生效了。
locale-gen zh_CN.UTF-8
最后,安装对应中文字体
#apt-get install xfonts-intl-chinese
#apt-get install xfonts-intl-chinese wqy*
再更新字体库
fc-cache -fv
可以使用 fc-list 指令查看安装的字体
修改源码使csv附件名中文时正常显示
修改superset/utils/core.py 882行
# Attach any files passed directly
for name, body in (data or {}).items():
att = MIMEApplication(
body,
Name=name,
)
att.add_header('Content-Disposition', 'attachment',filename=('gbk', '', name))
msg.attach(att)
'''
msg.attach(
MIMEApplication(
body, Content_Disposition="attachment; filename='%s'" % name, Name=name
)
)
'''
# Attach files by reading them from disk
for fname in files or []:
basename = os.path.basename(fname)
with open(fname, "rb") as f:
att = MIMEApplication(
f.read(),
Name=basename
)
att.add_header('Content-Disposition', 'attachment',filename=('gbk', '', basename))
msg.attach(att)
'''
msg.attach(
MIMEApplication(
f.read(),
Content_Disposition="attachment; filename='%s'" % basename,
Name=basename,
)
)
'''