Conversation
状态说明:本分支暂未 restack按维护者建议(#87 上「每个 PR 都基于 main 重新创建,PR 之间的修改不要重叠」)推进 restack 时,本分支被识别为栈依赖,不能独立重建,故本次未推送。 原因:本分支相对 main 的自身增量依赖 根因:本分支此前的 merge-base 停在 已验证:原始分支(未 restack) 下一步:需要先合并 #115( |
63f5046 to
a8c8c86
Compare
已改为独立实现并重建,请重评按维护者建议(#87「每个 PR 都基于 main 重新创建,PR 之间的修改不要重叠」),本分支已重建为不依赖任何未合并分支的独立实现。 改动原实现的问题: 现在改为直接查
结果
已验证: 请在新 head 上重评。 |
pikachuren
left a comment
There was a problem hiding this comment.
🙏 感谢 @suantea 提交!
🤖 AI 自动审核声明:本评审报告由 AI 自动生成,当前使用 Claude Opus 5 模型进行分析。
🔄 增量评审:上轮 → 本轮
本轮新增 1 个 commit(63f5046e → a8c8c86b),改动文件:backend/api/handlers/system.go
新增改动的问题:
⚠️ [P1]backend/api/handlers/system.go:131-158— 响应契约变了:原来每个引擎都会出现在checks里(值为ok或stale: ...),现在只有超过 3 分钟无日志的服务才会写入checks。健康服务完全不出现在 map 中,任何按checks枚举引擎逐个展示状态的消费方(例如 #120 的顶栏健康徽标)会读不到健康项。建议保留健康服务的ok条目,或在 PR 描述里明确这是有意的契约变更并同步前端。⚠️ [P1]backend/api/handlers/system.go:132-137—Select("service, MAX(log_time) AS last").Group("service")没有时间下界。SystemLog增长后,每次自检都会全表扫描 + 分组,而健康检查是 10s 级调用频次。建议加Where("log_time > ?", time.Now().Add(-time.Hour))。- 💡 [P2] 该查询没有 service 白名单,
SystemLog里的非引擎 service(如 #91 引入的audit)会生成engine_audit这类键名。建议限定引擎 service 集合。
旧问题解决情况:
- ✅ 上轮指出的关键点:
GetHealth依赖svcutil.EngineHeartbeats()(由未合并的 #115 引入)→ 已改为直接查SystemLog,svcutilimport 一并移除。本 PR 现在可以独立基于 main 合入,解耦方向正确。
🎯 结论:✅ Approve — 依赖已解耦;建议确认「只报异常服务」是否是有意的契约变更
a8c8c86 to
d4da363
Compare
pikachuren
left a comment
There was a problem hiding this comment.
🙏 感谢 @suantea 提交!
🤖 AI 自动审核声明。
🎯 结论
🔄 Request Changes — 鉴权方向建议重新评估,DB 探活性能问题需修复
📖 概要
/system/health 健康检查端点 · DB读写探活 + 引擎心跳聚合
🚨 关键问题
P1:
- 💡 该端点挂在
auth组(需 JWT 鉴权),但消费方通常是外部看门狗/cron(Docker HEALTHCHECK、K8s liveness),这类基础设施探针通常应无需鉴权即可访问,否则 token 过期会被误判为"服务不健康"。建议评估是否应免鉴权(并对错误信息脱敏)。 - 💡 每次调用都执行真实
CREATE TABLE IF NOT EXISTS + INSERT + DELETE写探活,若被高频轮询会持续抢占 SQLite 写锁;且无 context 超时,DB 阻塞时该端点会无限期挂起,违背"健康检查应快速返回"原则。 - 💡
retention.go用.Limit().Delete(),标准 SQLite 默认不支持DELETE...LIMIT语法,需确认 GORM sqlite dialect 是否转译为子查询,否则清理会直接报语法错误。
P2:diff 混入与 PR 描述无关的 db.go 连接池重构,损害可审查性。
🎯 结论:🔄 Request Changes — 鉴权方式与 DB 探活性能需要修复验证后合并
- GET /api/v1/system/health:DB 读/写探活 + 引擎心跳过期检测(>3 分钟判 stale),健康返回 200、异常 503 - svcutil 新增引擎心跳注册表(BeatEngineHeartbeat/EngineHeartbeats),probe/alert/linereg 循环每轮上报 - 供面板健康徽标、MCP 诊断工具与外部看门狗消费
d4da363 to
e9e7e5b
Compare
概述
新增系统自检端点,暴露 DB 健康与各长驻引擎的存活状态,供面板健康徽标、MCP 诊断工具及外部看门狗(cron 探测)消费。
改动
GET /api/v1/system/health(JWT 保护):stale并整体返回 503svcutil新增引擎心跳注册表(BeatEngineHeartbeat/EngineHeartbeats),probe / alert / linereg 循环每轮上报验证
go build/go vet/ 全量go test ./...通过