前言
最近应公司要求要把禅道上的超时任务、超出时间没有开始的任务,发送到公司飞书群里。
禅道是干什么的,怎么部署我这里就不再赘述了,可以参考下面的连接。
https://www.zentao.net/dynamic/zentaopms12.5.3-80319.html
环境:centos 7.9
这里写了两个简单的小脚本供大家参考。
一、创建飞书群机器人
1、创建群组,已有群的找到群设置。
2、创建群机器人。
机器人名称你随意。
记好webhook地址一会儿就要用这个地址发送消息的。
这里我用的自定义关键词做的安全设置,你也可以用其他方式,关键词是你在向群里发送消息时必须包含的,否则无法发送的群里会被自动屏蔽掉。
这样群机器人就创建好了。
二、编写发送Python脚本
1.查询今天以前的逾期任务(不包含今天)
这里用到的数据库名是禅道原数据库名。
逾期任务@所有人 代码如下(示例):
#!/usr/bin/python
# conding=utf-8
# Timeout Task
import json
import pymysql
import requests
# 打开数据库连接
# IP 账号 密码 写你们自己的 还有端口写我的你连不上
db = pymysql.connect(host="mysql_ip", user="root", password="*****",
port=3306, db='zentao', charset='utf8')
# 使用 cursor() 方法创建一个游标对象 cursor
cursor = db.cursor()
# sql语句查询
sql = "SELECT p.NAME AS p_name, t.NAME AS t_name, t.id as 任务ID, t.story as 需求ID, t.deadline, t.estStarted, " \
"u.realname, u.mobile FROM zt_task t LEFT " \
"JOIN zt_project p ON t.project = p.id LEFT JOIN zt_user u ON t.assignedTo = u.account WHERE t.deadline < " \
"date_format( now(), '%y-%m-%d' ) AND t.STATUS = 'doing' AND t.deleted = '0'"
# 使用 execute() 方法执行 SQL 查询
cursor.execute(sql)
result = cursor.fetchall()
str1 = ' ------任务逾期风险预警------\n\n'
at = []
for row in result:
# for row in range(len(it)):
name = row[0]
task = row[1]
taskid = row[2]
needid = row[3]
deadline = row[4]
eststarted = row[5]
realname = row[6]
mobile = row[7]
at.append(mobile)
str1 += "【项目:" + str(name) + "】\n 任务:" + str(task) + "\n 任务ID:" + str(taskid) + "\n 需求ID: " + str(
needid) + "\n 预计开始时间:" + str(eststarted) + "\n 截止时间:" + str(deadline) + " \n 负责人员:" + str(realname) + "\n\n"
# 这个用来排查是否有数据
# print(str1, result)
# 关闭数据库连接
db.close()
# 判断是否有内容
if result:
# 发送群消息@所有人
sendurl = "https://open.feishu.cn/.......这个就是刚刚webhook的地址。"
data = {
"content": dict(text="<at user_id='all'></at> \n" + str1),
"msg_type": "text"
}
request = requests.post(sendurl, json.dumps(data))
else:
# 发送群消息@所有人
sendurl = "https://open.feishu.cn/.......这个就是刚刚webhook的地址。"
data = {
"content": {
"text": "<at user_id='all'></at> \n" " 没有逾期的项目! [大笑]"},
"msg_type": "text"
}
request1 = requests.post(sendurl, json.dumps(data))
2.查询今天以前的超时未开始任务(不包含今天)
超时未开始任务@所有人 代码如下(示例):
#!/usr/bin/python
# conding=utf-8
import json
import pymysql
import requests
# 打开数据库连接
# IP 账号 密码 写你们自己的 还有端口写我的你连不上
db = pymysql.connect(host="mysql_ip", user="root", password="*****",
port=3306, db='zentao', charset='utf8')
# 使用 cursor() 方法创建一个游标对象 cursor
cursor = db.cursor()
# sql语句查询
sql = "SELECT p.NAME AS p_name, t.NAME AS t_name, t.id AS 任务ID, t.story AS 需求ID, t.deadline, t.estStarted, \
u.realname, u.mobile FROM zt_task t LEFT JOIN zt_project p ON t.project = p.id LEFT JOIN \
zt_user u ON t.assignedTo = u.account WHERE t.estStarted < date_format( now( ), '%y-%m-%d' ) \
AND t.STATUS = 'wait' AND t.deleted = '0' AND t.estStarted != '0000-00-00';"
# 使用 execute() 方法执行 SQL 查询
cursor.execute(sql)
result = cursor.fetchall()
str1 = ' ------任务未开始提醒------\n\n'
at = []
for row in result:
# for row in range(len(it)):
name = row[0]
task = row[1]
taskid = row[2]
needid = row[3]
deadline = row[4]
eststarted = row[5]
realname = row[6]
mobile = row[7]
at.append(mobile)
str1 += "【项目:" + str(name) + "】\n 任务:" + str(task) + "\n 任务ID:" + str(taskid) + "\n 需求ID: " + str(
needid) + "\n 预计开始时间:" + str(eststarted) + "\n 截止时间:" + str(deadline) + " \n 负责人员:" + str(realname) + "\n\n"
print(str1)
# 关闭数据库连接
# cursor.close()
db.close()
if result:
# 发送群消息@所有人
sendurl = "https://open.feishu.cn/.......这个就是刚刚webhook的地址。"
data = {
"content": dict(text="<at user_id='all'></at> \n" + str1),
"msg_type": "text"
}
request = requests.post(sendurl, json.dumps(data))
# print(request, data)
else:
# 发送群消息@所有人
sendurl = "https://open.feishu.cn/.......这个就是刚刚webhook的地址。"
data = {
"content": {
"text": "<at user_id='all'></at> \n" " 没有未开始的项目! [大笑]"},
"msg_type": "text"
}
request1 = requests.post(sendurl, json.dumps(data))
3.测试结果
逾期任务(示例):
超时未开始任务(示例):
4.创建定时任务
我的是centos7.9 用的crontab 创建
命令:crontab -e
当然你们自己也可以自己定义你们的发送消息时间
我的时间规则 :
周一到周五早上10点提醒任务未开始。
周一到周五下午1点钟和下午6点钟提醒逾期未完成任务。
至此整个推送告警脚本就结束了。
飞书机器人@单个人或者所有人:https://open.feishu.cn/document/ugTN1YjL4UTN24CO1UjN/uUzN1YjL1cTN24SN3UjN