- 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 文档,新增完整测试覆盖
3.6 KiB
3.6 KiB
1. CheckerDefinition 泛型化
- 1.1 修改
src/server/checker/runner/types.ts:为 CheckerDefinition 接口添加泛型参数<TResolved extends ResolvedTargetBase = ResolvedTargetBase>,约束 execute、resolve、serialize 方法的 target 参数类型 - 1.2 修改
src/server/checker/runner/registry.ts:内部 Map 类型使用CheckerDefinition(默认泛型参数),确保类型擦除 - 1.3 修改
src/server/checker/runner/http/execute.ts:HttpChecker 实现CheckerDefinition<ResolvedHttpTarget>,移除 execute/serialize 方法内的as ResolvedHttpTarget断言(resolve 方法内对 RawTargetConfig 的断言保留,泛型不覆盖输入参数窄化) - 1.4 修改
src/server/checker/runner/command/execute.ts:CommandChecker 实现CheckerDefinition<ResolvedCommandTarget>,移除 execute/serialize 方法内的as ResolvedCommandTarget断言(resolve 方法内对 RawTargetConfig 的断言保留) - 1.5 修复
src/web/components/ErrorBoundary.tsx的override标记(noImplicitOverride规则要求的既有代码修复),运行bun run typecheck确认类型系统无错误
2. ProbeStore 批量查询优化
- 2.1 在
src/server/checker/store.ts中新增getAllRecentSamples(limit: number)方法,使用ROW_NUMBER() OVER (PARTITION BY target_id ORDER BY timestamp DESC)实现单次批量查询 - 2.2 修改
src/server/checker/store.ts中getAllTargetStats的 availability 计算:将Math.round((row.upCount / row.totalChecks) * 10000) / 100改为Math.round((row.upCount / row.totalChecks) * 100 * 100) / 100,与getTargetStats精度一致 - 2.3 修改
src/server/routes/targets.ts:handleTargets使用store.getAllRecentSamples(30)替代循环调用store.getRecentSamples - 2.4 在
tests/server/checker/store.test.ts中新增getAllRecentSamples的单元测试和 availability 精度一致性测试
3. Engine rejected 结果持久化
- 3.1 修改
src/server/checker/engine.ts:probeGroup中对 rejected 结果通过索引关联 target,构造matched: false、failure: { kind: "error", phase: "internal", path: "engine", message }的 check_result 写入 store - 3.2 在
tests/server/checker/engine.test.ts中新增 rejected 结果写入的测试用例
4. 启动逻辑统一
- 4.1 新增
src/server/bootstrap.ts,导出bootstrap(options: BootstrapOptions)函数,封装 loadConfig → ProbeStore → syncTargets → ProbeEngine → startServer → shutdown handler 完整序列 - 4.2 修改
src/server/dev.ts:改为调用bootstrap({ configPath, mode: "development" }) - 4.3 修改
scripts/build.ts:生成的 server entry 改为调用bootstrap({ configPath, mode: "production", staticAssets }) - 4.4 在
tests/server/中新增 bootstrap 相关测试
5. dataDir 路径修复
- 5.1 修改
src/server/checker/config-loader.ts:对 dataDir 使用resolve(configDir, dataDir)处理相对路径 - 5.2 在
tests/server/checker/config-loader.test.ts中新增 dataDir 路径解析的测试用例
6. pageSize 上限
- 6.1 修改
src/server/middleware.ts:validatePagination增加pageSize > 200的校验,返回 400 - 6.2 在
tests/server/app.test.ts中新增 pageSize 超限的测试用例
7. 质量保障与文档
- 7.1 运行
bun run check(schema:check + typecheck + lint + test)确认全部通过 - 7.2 运行
bun run build确认构建成功 - 7.3 更新 DEVELOPMENT.md 中相关章节(bootstrap 启动流程、CheckerDefinition 泛型说明、pageSize 上限说明)