- CheckerDefinition 泛型化,HTTP/Command checker 移除 resolved target 断言 - 新增 ProbeStore.getAllRecentSamples 消除 targets 路由 N+1 查询 - 统一 getAllTargetStats 与 getTargetStats 的 availability 精度 - Engine rejected 结果写入 internal error 记录,提升可观测性 - 新增 bootstrap.ts 统一 dev/production 启动序列 - dataDir 相对路径改为基于配置文件目录解析 - validatePagination 增加 pageSize 上限 200 校验 - 修复 ErrorBoundary override 标记 - 更新 README/DEVELOPMENT 文档,新增完整测试覆盖
2.5 KiB
2.5 KiB
Why
后端在 target 规模增长(预计到 100)和 checker 类型扩展(预计超过 5 种)的趋势下,存在查询性能瓶颈、可观测性盲区、启动逻辑重复、路径解析 bug 和类型安全不足等问题。本次变更集中修复这些架构短板,为后续扩展打好基础。
What Changes
- targets 路由 N+1 查询优化:
handleTargets中对每个 target 单独调用getRecentSamples改为批量查询,消除 N 次独立 SQL - Engine rejected 结果持久化:
probeGroup中Promise.allSettled的 rejected 结果写入matched: false的 check_result(failure 标记为 internal error),替代仅console.warn - 启动逻辑统一:抽取
bootstrap.ts,dev.ts和 build 生成的 entry 共用同一启动序列,消除重复 - dataDir 相对路径修复:
config-loader.ts中用resolve(configDir, dataDir)处理相对路径,确保从任意 cwd 启动时数据库位置一致 - validatePagination 加 pageSize 上限:限制最大 pageSize 为 200,超出返回 400
- CheckerDefinition 泛型化:为
CheckerDefinition加泛型参数<TResolved extends ResolvedTargetBase>,checker 内部获得完整类型安全,registry 用类型擦除保持解耦 - availability 精度统一:
getAllTargetStats和getTargetStats的 availability 计算精度不一致,统一为相同的四舍五入策略
Capabilities
New Capabilities
server-bootstrap: 统一的服务启动引导流程,dev 和 production 共用
Modified Capabilities
batch-data-queries: 新增getAllRecentSamples批量采样查询,消除 targets 路由的 N+1 问题;修复 availability 精度不一致probe-engine: Engine 对 rejected 结果写入 matched:false 记录而非静默丢弃probe-config: dataDir 相对路径基于 configDir 解析probe-api: validatePagination 增加 pageSize 上限校验checker-runner-abstraction: CheckerDefinition 接口泛型化,checker 内部类型安全
Impact
- 代码:
src/server/下约 8 个文件变更,新增bootstrap.ts和store.ts的批量查询方法;另修复src/web/components/ErrorBoundary.tsx的override标记(typecheck 前置修复) - API:pageSize 超过 200 时返回 400(新增约束,当前前端未使用超大 pageSize)
- 构建:
scripts/build.ts生成的 entry 改为调用 bootstrap - 测试:需新增/更新 engine、store、middleware、bootstrap 相关测试