增量质检报告 · dzs/dzs-price-calculator (v1.0.26)
- 对比范围:
4db690f252460d1ff83803aab90835fe8717f619 → 794d5e7650cef76eb14c91b5e5897d0dc1efd3c0
- 分支:v1.0.26
- 变更规模:单文件(
internal/scheduler/scheduler.go),净增约 25 行,无删除逻辑
- 变更性质:可观测性增强(新增分段耗时 / 品类数埋点与日志字段 + 一个纯统计辅助函数),不触碰任何计算/写入业务逻辑
一、变更概览
本次提交只改动了一个文件:internal/scheduler/scheduler.go。核心是把价格计算轮询 runCalculationCycle 的执行过程做分段耗时埋点,并在两处完成日志里补充排查用的统计字段,另新增一个纯统计函数 countCommodities。
具体改动面:
| 位置 | 改动 | 说明 |
|---|
runCalculationCycle 指纹阶段(≈ L202-215) | 新增 phaseStart / fingerprintMs | 度量「窗口指纹查询 + 计算状态读取」耗时 |
| 空转短路日志(≈ L224) | 新增 commodities、fingerprint_ms 字段 | 跳过本轮时也能看到覆盖品类数与指纹阶段耗时 |
| 代补阶段(≈ L237-243) | 新增 stepStart / estimateMs | 度量 runEstimatePhase 耗时 |
| 重算阶段(≈ L251-258) | 复用 stepStart / 新增 recalcMs | 度量按品类分组重算循环耗时 |
| 完成日志(≈ L289) | 新增 commodities、window_pairs、changed_pairs、fingerprint_ms、estimate_ms、recalc_ms | 补齐排查字段 |
二、修复的问题(fixed)
0 条。
基于工具 codescan_issues_diff 的真实对比结果:base..head 两版本质量无差异,无任何历史问题在本版本被修复。
三、新增问题(added)
0 条。
基于工具 codescan_issues_diff 的真实对比结果:本版本未引入任何新的质检问题。
即:本次为纯埋点/日志改动,未新增缺陷、复杂度超标项或死代码告警。
四、逐项变更分析(正确性核查)
对 diff 中每一处改动做了逐一核查,均未发现功能性缺陷:
-
countCommodities 新增函数(L1599-1607)
- 入参类型
map[repository.CommodityDateKey]string,与 GetWindowFingerprints 返回类型一致;k.CommodityID(uint)作为去重键正确。
- 已按
len(fingerprints) 预分配 seen,仅一次 O(n) 遍历,无性能问题。
- 在「跳过」与「完成」两条分支中均以**同一份
fingerprints(完整窗口)**调用,语义一致(都表示「本轮窗口覆盖的品类数」),未误用 changed 集合。
-
fingerprintMs 计时区间(L203、L215)
phaseStart 在 GetWindowFingerprints 之前、两个错误分支之后中途计算,两处 err != nil 早退均发生在 fingerprintMs 使用之前,无未初始化/悬空使用。
- 计时覆盖「指纹查询 + 状态读取」,未包含
diffFingerprints,属可接受的度量粒度。
-
estimateMs / recalcMs 计时区间复用 stepStart(L240、L251、L260)
stepStart 在代补前赋值一次、在重算循环前再赋值一次(变量复用),两次区间互不重叠,度量结果正确。
recalcMs 计算位于重算循环之后、指纹回写之前,取值时 均为最近一次赋值,无时序错误。
五、既有问题提示(非本次引入,仅供参考)
改动函数 runCalculationCycle(internal/scheduler/scheduler.go:159)本身在质量地图中已有历史告警,与本次改动无关,列出以便跟踪:
runCalculationCycle 函数过长(147 行)、圈复杂度 16、直接依赖 49 个函数(高耦合)。
scheduler.Calculator 被判定为「上帝类」(27 个方法)。
本次埋点使该函数体量略有增加,未加剧到被工具判为新问题(issues_diff 为 0 新增),但后续若继续膨胀,建议将「计时/日志组装」下沉为辅助方法。
六、结论与风险评级
| 维度 | 评估 |
|---|
| 变更范围 | 单文件、单函数为主,影响面极小 |
| 业务影响 | 无(未改动计算/写入逻辑,仅增加计时与日志) |
| 回归风险 | 低 |
| 新增问题 | 0 条 |
| 修复问题 | 0 条 |
总体结论:本次提交为低风险的可观测性增强,代码正确、无新增质检问题,无需为本次变更阻塞发布。建议合并前确认 go build/go vet 通过(timeutil、repository 均为文件内已导入包,无新增 import 风险)。