在Jenkins中我们创建日历视图的时候,能够看到每次构建在时间线上面的分布,那么我就有一个疑惑,这个分布的数据是不是可以直接提取出来。如果能够得到这个数据,无疑是能够极大促进工程分析效率的。
分析数据来源
发挥一贯的方法,在页面上查看浏览器的请求信息。
找到一个events请求里含有大量的工程构建信息数据。
通过点击页面上的按钮,可以观察到这个数据是按照日历上的日期进行分类的,系统在我们操作界面时,会读取月视图上一个日历月的数据。(一个日历月是指的还会包含1号之前的几天以凑满一周的界面,以及月底之后带上下个月的几天凑满6周的数据,也就是42天)
可以看到6月视图的请求的路径:
/view/CA/events?start=2023-05-29&end=2023-07-10&_=1687959108872
视图上是5月29号到7月9号,所以可以推断最后一天是个开区间。最后的时间戳参数不是必要的,只是在区分请求。
代码读取数据
直接在代码中仿制拉取这个请求。选定时间范围是6-10到6-14。
# coding:utf-8
import requests
from requests.auth import HTTPBasicAuth
host = '106.14.132.184'
auth = HTTPBasicAuth(username='bob', password='110c70ea8f41063e377aca53007a1ca2e4')
jenkins_url = f'http://{host}:8080'
data_url = f'{jenkins_url}/view/CA/events'
params = {
'start': '2023-06-10',
'end': '2023-06-14'
}
response = requests.get(data_url, params=params, auth=auth)
print(response.status_code)
print(response.text)
得到的数据包含6月10号到13号这四天的数据。
数据项分析
拉最后一条数据进行分析
其中:
title部分的值标名了工程和运行的编号
url可以转换后用于后续的构建信息提取。
duration是这次构建的耗时,单位是毫秒
state是这次构建的状态。
job里面的title就是完全写明了工程的名称。
后面两个展示构建前后次的信息,无需要不用处理。
allDay标识是否一整天都在跑,这个信息我这边没用到,读者有用的可以看看。这个日历视图是以开始时间为分界线往图形上面放工程的,所以每次构建在界面上是没有时间长度的,都是一块差不多尺寸的记录。
用途
有了这个,我们完全可以简化前一篇文章的操作流程,省去我们的监控流程。只需要每天读一下前面一天的数据,做一个增量的统计也不需要额外存储了。还是很有用的。因为这个数据只有日历视图里可以通过这个events请求得到,所以我们必须要在Jenkins中装上Calendar view的插件并建立一个日历视图,这是先决条件。这个视图同样可以添加过滤器,以实现对指定任务的监控。