执行摘要
- 一句话:修复CI任务监控脚本中的队列时间、利用率和摘要指标计算错误。
- 推荐动作:对于负责CI基础设施或监控的工程师,值得精读以了解如何正确处理GitHub Actions API数据并优化监控脚本;重点关注使用runner_name作为状态区分器的设计决策和参数化时间窗口的可配置性改进。
功能与动机
根据PR body,GitHub Actions在任务进入队列时设置started_at,而不是当runner真正开始处理时。对于没有runner的任务,started_at ≈ created_at,导致队列时间计算错误,需要使用runner_name作为判断任务是否被runner拾取的可靠信号以修正监控指标。
实现拆解
- 修复队列时间计算:在
scripts/ci/utils/query_job_status.py中,修改_queue_time_seconds和calculate_queue_time函数,使用runner_name区分任务状态——有runner时计算started_at - created_at,无runner且状态为queued/waiting时计算report_time - created_at并标记为“queuing”,其他情况跳过,确保队列时间准确反映实际等待。
- 修正利用率快照:更新
analyze_utilization_snapshots函数,添加hours参数以尊重CLI的--hours参数,避免硬编码24小时窗口,并修复无runner完成任务的计数逻辑,防止产生虚假队列分钟数。
- 完善摘要表格:在摘要报告函数中添加“Skipped”列,并计数
neutral和stale结论,解决Total ≠ sum of columns的错误。
- 性能优化:预编译runner标签正则表达式
_RUNNER_LABEL_ALT_RE,避免在排序操作中重复编译,提升脚本效率。
- 配套调整:在
fetch_all_jobs_snapshot函数中添加无标签任务的排除跟踪,确保数据收集完整性。
关键文件:
scripts/ci/utils/query_job_status.py(模块 CI脚本;类别 infra;类型 infrastructure;符号 _runner_label_sort_key, _queue_time_seconds, analyze_busy_periods, analyze_queue_distribution): 唯一变更文件,包含所有修复逻辑,涉及队列时间计算、利用率快照和摘要指标的核心函数。
关键符号:_runner_label_sort_key, _queue_time_seconds, analyze_busy_periods, analyze_queue_distribution, analyze_utilization_snapshots, _count_at_time
评论区精华
Review中gemini-code-assist[bot]建议预编译runner标签正则表达式以优化性能,并参数化利用率快照窗口以使用CLI参数而非硬编码值。作者采纳了这些建议,在最终提交中实现了_RUNNER_LABEL_ALT_RE和修改analyze_utilization_snapshots函数签名,体现了对代码效率和可配置性的关注。
- 预编译正则表达式优化性能 (performance): 作者采纳,在模块级别添加了预编译的
_RUNNER_LABEL_ALT_RE正则表达式。
- 参数化利用率快照窗口提升可配置性 (design): 作者修改函数签名,添加
hours参数,确保利用率快照尊重用户输入。
风险与影响
- 风险:风险较低,主要影响CI监控脚本的数据准确性,不涉及核心业务逻辑或生产代码。如果计算错误持续,可能导致团队基于不准确队列时间和利用率数据的决策偏差,但无安全、性能回归或兼容性问题。脚本变更仅限于AMD CI监控流程,影响范围可控。
- 影响:对CI监控系统有直接改进,提升队列时间、利用率和摘要指标的报告准确性,帮助团队更好地理解CI资源使用情况和瓶颈。影响范围仅限于使用该监控脚本的AMD CI流程,对用户和系统其他部分无影响。
- 风险标记:监控数据准确性
关联脉络
- PR #22948 [AMD] Qwen3.5 MXFP4 breaks after shared expert fusion is enabled: 同为AMD相关的bugfix PR,涉及特定硬件环境的修复,但领域不同(模型vs CI监控)。
参与讨论