初识python 之 smtplib 发送(dolphinscheduler任务监测)邮件
需求
监测dolphinscheduler调度系统,任务执行异常情况。如有异常,则发送邮件通知。
处理思路
因DS本身自带的邮件发送功能,不能正常发送邮件。
故而,通过查询DS源数据表,获取当前任务执行情况。将获取结果,使用python发送邮件。
通过shell脚本获取执行情况,并将结果保存到本地。
执行代码


mysql -hip -P3306 -u用户 -p密码 -e"
use dolphinscheduler;
select a.name,
a.state,
a.submit_time,
a.start_time,
a.end_time,
CONCAT(TIMESTAMPDIFF(SECOND, a.start_time,a.end_time),'(s)') dur
from t_ds_task_instance a,
(
select name,
max(submit_time) submit_time
from t_ds_task_instance
group by name
) b
where a.name=b.name
and a.submit_time=b.submit_time
and substr(a.start_time,1,10)='${deal_day}'
and a.state not in(0,1,7)
union all
select a.name,
a.state,
a.submit_time,
a.start_time,
'-' end_time,
CONCAT(cast(TIMESTAMPDIFF(SECOND, a.start_time,current_timestamp)/60/60 as decimal(10,2)),'(h)') dur
from t_ds_task_instance a,
(
select name,
max(submit_time) submit_time
from t_ds_task_instance
group by name
) b
where a.name=b.name
and a.submit_time=b.submit_time
and substr(a.submit_time,1,10)='${deal_day}'
and a.state in(1,10,11)
and TIMESTAMPDIFF(SECOND, a.start_time,current_timestamp)>7200;
" > rwjk.txt
登陆mysql数据库,并执行SQL,导出结果
python处理导出结果,并发送邮件


# !/user/bin/env python
# -*- coding: utf-8 -*- import smtplib
from email.mime.text import MIMEText
from email.header import Header def send_mail():
# 第三方 SMTP 服务
mail_host = "" # 设置服务器
mail_user = "" # 用户名
mail_pass = "" # 口令 sender = '' # 发送邮件用户
receivers = ['收件人1',
'收件人2',
'收件人3'
] msg_text = '邮件正文发送内容'
mail_msg_list=['<p>你好,DS调度异常任务如下:</p>',
'<table border="1" cellpadding="0" cellspacing="0" width="1000" style="border-collapse: collapse; style="text-align:center"">',
'<tbody>',
'<tr><th>任务</th><th>状态</th><th>提交时间</th><th>开始时间</th><th>结束时间</th><th>执行时长(s)</th></tr>'
]
with open('/zhjs/work01/lizhenhua/rwjk/rwjk.txt', 'r') as f:
s = f.readlines()
for k,v in enumerate(s):
s[k]=v.replace('\n','').split('\t') # 替换掉换行符、并转换为列表
for i in range(len(s)):
mail_msg_list.append('<tr>')
for j in range(len(s[i])):
if i>=1:
s[i][1] = s[i][1].replace('0','提交成功')
s[i][1] = s[i][1].replace('1', '正在运行')
s[i][1] = s[i][1].replace('2', '准备暂停')
s[i][1] = s[i][1].replace('3', '暂停')
s[i][1] = s[i][1].replace('4', '准备停止')
s[i][1] = s[i][1].replace('5', '停止')
s[i][1] = s[i][1].replace('6', '失败')
s[i][1] = s[i][1].replace('7', '成功')
s[i][1] = s[i][1].replace('8', '需要容错')
s[i][1] = s[i][1].replace('9', 'kill')
s[i][1] = s[i][1].replace('10', '等待线程')
s[i][1] = s[i][1].replace('11', '等待依赖完成')
mail_msg_list.append('<td>{}</td>'.format(s[i][j]))
mail_msg_list.append('</tr>') # 结尾标识
mail_msg_list.append('</tbody>')
mail_msg_list.append('</table>') mail_msg=''.join(mail_msg_list) # 列表转为字符串HTML message = MIMEText(mail_msg, 'html', 'utf-8')
message['From'] = Header("任务监测", 'utf-8')
message['To'] = ','.join(receivers) subject = 'DS调度异常任务监控'
message['Subject'] = Header(subject, 'utf-8') try:
smtpObj = smtplib.SMTP()
smtpObj.connect(mail_host, 25) # 25 为 SMTP 端口号
smtpObj.login(mail_user, mail_pass) # 登陆
smtpObj.sendmail(sender, receivers, message.as_string()) # 发送
print('邮件发送成功')
except smtplib.SMTPException:
print('Error: 无法发送邮件') if __name__ == '__main__':
send_mail()
Send_Email.py
整合以上两个为一个shell脚本


#!/bin/bash if [ ${#} -ne 1 ]
then
deal_day=$(date +"%Y-%m-%d")
else
deal_day=$1
fi echo ${day}
mysql -hip -P3306 -u用户 -p密码 -e"
use dolphinscheduler;
select a.name,
a.state,
a.submit_time,
a.start_time,
a.end_time,
CONCAT(TIMESTAMPDIFF(SECOND, a.start_time,a.end_time),'(s)') dur
from t_ds_task_instance a,
(
select name,
max(submit_time) submit_time
from t_ds_task_instance
group by name
) b
where a.name=b.name
and a.submit_time=b.submit_time
and substr(a.start_time,1,10)='${deal_day}'
and a.state not in(0,1,7)
union all
select a.name,
a.state,
a.submit_time,
a.start_time,
'-' end_time,
CONCAT(cast(TIMESTAMPDIFF(SECOND, a.start_time,current_timestamp)/60/60 as decimal(10,2)),'(h)') dur
from t_ds_task_instance a,
(
select name,
max(submit_time) submit_time
from t_ds_task_instance
group by name
) b
where a.name=b.name
and a.submit_time=b.submit_time
and substr(a.submit_time,1,10)='${deal_day}'
and a.state in(1,10,11)
and TIMESTAMPDIFF(SECOND, a.start_time,current_timestamp)>7200;
" > rwjk.txt # 发送邮件
n=`cat rwjk.txt|wc -l`
if [ $n -ge 2 ]
then
python rwjk_mail.py # 执行python,发送邮件
else
echo "无异常任务"
fi
rwjk.sh
执行结果
初识python 之 smtplib 发送(dolphinscheduler任务监测)邮件的更多相关文章
- Python+request+ smtplib 测试结果html报告邮件发送(上)《五》
此方法通用适合所有邮箱的使用,只需注意几个点,如下: QQ邮箱.其他非QQ邮箱的写法,区别点如下: #--------------------------使用腾讯企业邮箱作为发件人的操作如下----- ...
- web端自动化——Python的smtplib发送电子邮件
SMTP (Simple Mail Transfer Protocol)是简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式. Python的smtplib模块提 ...
- 接口测试基础——第3篇smtplib发送带图片的邮件
smtplib发送邮件最后一篇,发送带图片的邮件: 大家可以去廖雪峰的网站看一下,下面的代码就是我跟着博客写的,哈哈,大家即使不明白为什么,也要多写两遍,记在心里,如果有不明白的地方可以留言,船长会第 ...
- Python+request+ smtplib 测试结果html报告邮件发送(下)《六》
目录结构如下: 1.cfg.ini的配置信息写法如下: [email] ;--------------------------使用腾讯企业邮箱作为发件人的操作如下------------------- ...
- 接口测试基础——第2篇smtplib发送带附件的邮件
我先给大家补充一个用QQ发送纯文本电子邮件的代码,用QQ的朋友可以参考一下: # coding=utf-8 import smtplib from email.mime.text import MIM ...
- Python模块探秘 Smtplib发送带有各种附件的邮件
这两天对Python的邮件模块比较感兴趣,于是就查了查资料.同时在实际的编码过程中也遇到了各种各样的问题.下面我就来分享一下我与smtplib的故事. 前提条件 我的上一篇博文里面讲解了,发送邮件必须 ...
- 利用Python+163邮箱授权码发送带附件的邮件
背景 前段时间写了个自动爬虫的脚本,定时在阿里云服务器上执行,会从某个网站上爬取链接保存到txt文本中,但是脚本不够完善,我需要爬虫完毕之后通过邮件把附件给我发送过来,之前写过一个<利用Pyth ...
- python利用smtplib和MIMETYPE发送邮件
# -*- coding:utf- -*- import smtplib from email.mime.text import MIMEText sender = '你的发送邮件' my_pass= ...
- python使用smtplib发送邮件
python要实现发送邮件的功能,需要使用smtplib库. 1. 过程大致如下: 1. 建立和SMTP邮件服务器的连接 # 默认端口25 smtp = smtplib.SMTP(host, port ...
随机推荐
- 侵入式&非侵入式
侵入式设计 引入了框架,对现有的类的结构有影响:即需要实现或继承某些特定类. 例如:Struts框架 非侵入式设计 引入了框架,对现有的类结构没有影响. 例如:Hibernate框架 / Spring ...
- hash 模式与 history 模式小记
hash 模式 这里的 hash 就是指 url 后的 # 号以及后面的字符.比如说 "www.baidu.com/#hashhash" ,其中 "#hashhash&q ...
- 【Service】【MiddleWare】【Message】rabbitMQ
1. 概念: 1.1. 消息型中间件:遵循AMQP协议(高级消息队列协议)AMQP 0-9-1 AMQP 1.0 1.2. 路由模型: direct topic fan-out headers 1.3 ...
- 【Linux】【Services】【Project】Haproxy Keepalived Postfix实现邮件网关Cluster
1. 简介: 1.1. 背景:公司使用exchange服务器作为邮件服务器,但是使用Postfix作为邮件网关实现病毒检测,内容过滤,反垃圾邮件等功能.原来的架构非常简单,只有两台机器,一个负责进公司 ...
- 【Java多线程】线程池-ThreadPoolExecutor
ThreadPoolExecutor提供了四个构造方法: 我们以最后一个构造方法(参数最多的那个),对其参数进行解释: public ThreadPoolExecutor(int corePoolSi ...
- matplotlib画散点图和柱状图,等高线图,image图
一:散点图: scatter函数原型 其中散点的形状参数marker如下: 其中颜色参数c如下: n = 1024 # 均值是0, 方差是1, 取1024个数 x = np.rando ...
- Linux下安装数据库sqlite3
目录 一.简介 二.安装 三.测试 一.简介 SQLite 是一个软件库,实现了自给自足的.无服务器的.零配置的.事务性的 SQL 数据库引擎.SQLite 是在世界上最广泛部署的 SQL 数据库引擎 ...
- Nginx模块之ngx_http_gzip_module
Module ngx_http_gzip_module 该ngx_http_gzip_module模块是一个使用"gzip"方法压缩响应的过滤器.这通常有助于将传输数据的大小减少一 ...
- 前端浅谈-协议相关(http/https)
当DNS工作完之后得到了一个网址 https//192.168.1.255/index.html 这个并不符合标准的请求路径.接下来就是https的功能了.讲https前先讲讲它的前身http协议 H ...
- AD小白如何发板厂制板--导出gerber文件和钻孔文件+嘉立创下单教程
AD如何发工程制板子? 方式1,发PCB源文件给板厂 方式2,发一些工艺文件给板厂,这样就无须泄漏你的PCB源文件了,一个硬件工程师必须要掌握方式2. 方式2要做的就是导出gerber文件和钻孔文件, ...