主要更新内容
- 新增
GetRecordMetricMaxByClientAndTime接口,支持按单项监控指标查询各时间桶内的最大值,优化通知系统只拉取所需指标。 - 通知器
getMetricRecordsForClient改为仅查询当前通知指标,避免重建完整监控记录,降低 CPU 和 I/O 开销。 - 将
rollupTimeBounds和latestRollupBefore中的表 JOIN 改写为子查询,减少扫描范围,提升查询性能。 - drain 函数预分配 slice 容量为队列当前长度与 limit 中的较小值,避免不必要的内存分配。
Bug修复
- 修复 #626:CPU 占用过大问题(通过优化 SQL 查询和预分配逻辑解决)。
- 修复通知器中 RAM、Swap 百分比计算错误:原代码错误引用
record.RamTotal/record.SwapTotal,修正为从client对象获取MemTotal/SwapTotal。
其他
- 在
metricNameForRecordField中添加完整的监控字段名映射,支持 cpu、gpu、ram、swap、load、disk、net_in/out、traffic 等。 - 调整
utils/notifier/load.go中的 import 顺序。
Commits
- perf: preallocate slice capacity based on queue length in drain functions (1c75cb8) @Akizon77
- fix: #626 CPU占用过大 (05a91ad) @Akizon77
Full Changelog: 1.3.1...Snapshot-2607301114