- 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 文档,新增完整测试覆盖
35 lines
2.5 KiB
Markdown
35 lines
2.5 KiB
Markdown
## 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 相关测试
|