禅道指派 bug 关闭情况监控

事件起因
近期因为经常忘记录入绩效任务,所以做了一个绩效提醒的定时任务,工作日每天下午五点半群机器人在指定群发送绩效填报提醒的消息,包含当天的天气、日期、绩效系统链接等,实现效果如下:(不过不是本篇重点)
在这里插入图片描述
获得灵感
这两天觉得群机器人实现的功能太过单调,因此想要增加一些任务的提醒,无独有偶,在少数派网站发现了这篇文章通用状态监控通知脚本,订阅状态通知

在看完这篇文章之后,感觉可以进行实现,因为都是用的禅道,虽然版本可能存在差别,但思路都是通用的,影响比较小。

具体实现
总体实现分为以下几部分:

1.查看禅道:首先要确定好要请求禅道的哪个接口,因为要获取指派 bug 的数据,因此选择了/my-bug-assignedTo.html 这个接口,这个接口会返回指派给当前用户的 bug 信息,要获取的就是这部分内容:
在这里插入图片描述
接口请求头中需要注意 cookie 要获取用户的 id:
在这里插入图片描述
2.获取数据:python 代码如果要实现发送请求,获取响应内容还是比较简单的,这块也没有问题

3.发送消息:发送消息选择了企业微信的群机器人,也可以选择其他的消息推送,比如微信可以用 server 酱

4.定时任务:定时任务的实现主要用了 Jenkins,最近在本地虚拟机上部署了 Jenkins,刚好用一下
至此,整体思路已经完善,可以上手编写代码了,具体代码内容如下:

import time
from datetime import datetime
from bs4 import BeautifulSoup
import json

user_data = (
    ('zentaosid1', 'user1', 'phone_number1'),
    ('zentaosid2', 'user2', 'phone_number2')
)

# 获取禅道数据
def get_zenbug(zentaosid):
    url = "http://zentao12.demo.haogs.cn/my-bug-assignedTo.html"
    # 请求头
    headers = {
      "Accept":"text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7",
        "Cookie":f"zentaosid={zentaosid}",
        "User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36 Edg/115.0.1901.183"
    }
    response = requests.get(url,headers=headers)
    # 获取响应的html
    texthtml = response.text
    soup = BeautifulSoup(texthtml, 'html.parser')
    selected_elements = soup.select('span[class="label label-light label-badge"]')
    bugcount = selected_elements[0].text
    return bugcount

# 企业微信发送消息
def send_message(webhook_url, message, user, phone_number):
    data = {
        "msgtype": "text",
        "text": {
            "content": message,
            "mentioned_list":[f"{user}"],
            "mentioned_mobile_list":[f"{phone_number}"]
        }
    }
    response = requests.post(webhook_url, json=data)
    if response.status_code == 200:
        print("消息发送成功")
    else:
        print("消息发送失败")

if __name__ == "__main__":
    webhook_url = "webhook_url"
    # 使用循环提取数据
    for user in user_data_list:
        zentaosid = user[0]
        user = user[1]
        phone_number = user[2]
        bugcount = get_zenbug(zentaosid)
        bugcount = int(bugcount)
        print(bugcount)
        if bugcount > 0:
            message = f"禅道有未关闭bug{bugcount}个,请及时关闭"
            send_message(webhook_url, message, user, phone_number)
        else:
            print("暂无禅道bug")

本地执行成功后,把文件上传到虚拟机的指定目录:
在这里插入图片描述
设置文件的权限:
在这里插入图片描述
Jenkins 创建任务:
在这里插入图片描述
在这里插入图片描述
企业微信最终效果:

在这里插入图片描述
后续扩展
多人提醒
当前的多人提醒是写在代码的元组中,如果有多个人的话,可以考虑使用 excel 进行读取

丰富内容
获取到禅道 bug 的标题,提醒的时候把 bug 标题附带上,超过固定长度省略后续内容

获取到禅道 bug 的 id,把固定的 URL 和 id 拼接,提醒的时候附带链接,如下
https://zentao12.demo.haogs.cn/bug-view-bugid.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值