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