I like :https://github.com/lvy010/echarts


AdoAnalysis:Azure DevOps PR 活动分析工具
是什么
AdoAnalysis 是一个本地数据采集和可视化工具,用来统计 DigitalEmployee、Agency 等自动化账号在 Azure DevOps 仓库中创建和完成的 PR。
以下面两个仓库:
Bing_UX/snrcodeContentServices/msnews-experiences
它回答的问题包括:
- DE 每周完成多少 PR?
- Agency 每周完成多少 PR?
- 两者的趋势如何?
- DigitalEmployee PR 占仓库所有已完成 PR 的比例是多少?
为什么需要
Azure DevOps 原生页面适合查看单个 PR,但不方便回答跨仓库、跨时间的统计问题。
它的价值主要是:
- 量化产出:统计 AI Agent 实际完成的 PR 数量。
- 观察趋势:识别采用量增长、下降或异常。
- 比较系统:比较 DigitalEmployee 与 Agency 的贡献。
- 衡量占比:计算 DigitalEmployee 在全部已完成 PR 中的份额。
- 支持汇报:将原始 PR 数据变成直观图表。
整体架构
配置如何工作
配置文件是 config.json。
仓库配置
{
"key": "snrcode",
"organization": "msasg",
"project": "Bing_UX",
"repository": "snrcode"
}
每个仓库会成为页面上的一个 Tab。
Creator 配置
{
"key": "DigitalEmployee",
"id": "...",
"color": "#d62728"
}
id:ADO Identity GUIDkey:最终 JSON 中的 series 名称color:图表颜色
数据怎么抓取
运行:
cd AdoAnalysis
npm install
az login
npm run fetch
为什么不用 PAT
它使用 AzureCliCredential:
优点:
- 不在代码或配置中保存密码
- 不保存 PAT
- Token 自动刷新
- 权限继承自当前登录账号
为什么按月缓存
如果每次都从头请求全部 PR,会很慢,也容易触发 ADO 限流。
因此 fetch.js 将原始 PR 按月份保存:
data/repos/snrcode/raw-prs/
├── creators/
│ ├── DigitalEmployee/
│ │ ├── 2026-05.json
│ │ └── 2026-06.json
│ └── Agency/
└── totals/
├── 2026-05.json
└── 2026-06.json
这种设计称为增量抓取:
- 已完整抓取的历史月份直接复用
- 只补充新时间段
- 定期刷新之前仍为 Open 的 PR
- 根据 PR ID 去重
分页与限流
ADO API 一次不能返回无限数量的 PR,因此脚本使用分页请求。
配置中:
{
"pageSize": 200,
"requestsPerMinute": 120
}
RateLimiter 保证任意滚动 60 秒内不超过配置的请求数量,避免被 ADO 限流。
如何按周统计
fetch.js 将 PR 的 closedDate 转换到对应周,周一作为起始日,使用 UTC。
最终数据大致类似:
{
"weeks": ["2026-05-18", "2026-05-25"],
"series": {
"DigitalEmployee": [12, 18],
"Agency": [8, 9],
"Total": [120, 135]
}
}
两个网页分别看什么
Bot Activity Dashboard
入口:
http://localhost:5173/
它主要回答:
DE 和 Agency 每周分别完成了多少 PR?
DE Share Dashboard
入口:
http://localhost:5173/web/de-share.html
计算公式:
DE Share=DE 完成的 PR 数仓库全部完成的 PR 数×100% \text{DE Share} = \frac{\text{DE 完成的 PR 数}}{\text{仓库全部完成的 PR 数}} \times 100\% DE Share=仓库全部完成的 PR 数DE 完成的 PR 数×100%
例如:
- DE 完成 25 个
- 仓库总共完成 200 个
DE Share=25200×100%=12.5% \text{DE Share} = \frac{25}{200} \times 100\% = 12.5\% DE Share=20025×100%=12.5%
为什么需要本地 HTTP Server
网页通过 JavaScript 加载:
../data/weekly.json
浏览器直接打开 file://.../index.html 时,通常会阻止读取本地 JSON。
所以使用 serve.js:
npm run serve
这个 Server 很简单,只负责读取静态文件并设置正确的 MIME 类型,不负责查询 ADO。
怎么使用
命令:
cd AdoAnalysis
npm install
az login
npm run fetch
npm run serve
浏览:
http://localhost:5173/
http://localhost:5173/web/de-share.html
如果修改了:
- 时间范围
- 仓库
- Creator
- 统计状态
则重新执行:
npm run fetch
页面刷新后读取新数据。
数据边界
需要注意:
- 它统计的是 ADO PR,不是 GitHub PR。
- 每周数据以 UTC 周一为起点。
- Creator PR 是通过 ADO Identity 过滤的。
Total只在fetchTotals=true时生成。- DE Share 的分母是仓库所有已完成 PR。
- 图表完全依赖最后一次
npm run fetch生成的数据,不会自动实时查询 ADO。
转载自 CSDN-专业IT技术社区
原文链接:https://blog.csdn.net/2301_80171004/article/details/163637296



