- 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 文档,新增完整测试覆盖
25 lines
1.7 KiB
Markdown
25 lines
1.7 KiB
Markdown
## MODIFIED Requirements
|
||
|
||
### Requirement: 组内并发拨测
|
||
系统 SHALL 在每次调度 tick 时并发执行同组内目标的检查,但实际同时运行的检查数 MUST 受全局 `runtime.maxConcurrentChecks` 限制。当某个目标的 checker 执行 rejected(非正常 CheckResult 返回,而是 Promise reject)时,系统 SHALL 将该异常记录为 `matched: false` 的 check_result,而非仅 console.warn。
|
||
|
||
#### Scenario: 同组目标并发执行
|
||
- **WHEN** 调度器触发一次 tick,该组有 3 个目标,且全局并发余量至少为 3
|
||
- **THEN** 系统 SHALL 同时执行 3 个 checker,而非顺序执行
|
||
|
||
#### Scenario: 单个目标失败不影响同组其他目标
|
||
- **WHEN** 同组中某个目标的检查请求超时或失败(checker 正常返回 CheckResult)
|
||
- **THEN** 其他目标的检查 SHALL 正常完成并记录结果
|
||
|
||
#### Scenario: 同组中某个目标的 checker 执行 rejected
|
||
- **WHEN** 同组中某个目标的 checker 执行抛出未捕获异常(Promise rejected)
|
||
- **THEN** 系统 SHALL 为该目标写入一条 `matched: false` 的 check_result,failure 为 `{ kind: "error", phase: "internal", path: "engine", message: <rejected reason> }`,其他目标的检查 SHALL 不受影响
|
||
|
||
#### Scenario: rejected 结果通过索引关联 targetName
|
||
- **WHEN** checker 执行 rejected
|
||
- **THEN** 系统 SHALL 通过 Promise.allSettled 的索引关联回 target 数组,获取对应的 targetName 用于写入 check_result
|
||
|
||
#### Scenario: 全局并发限制生效
|
||
- **WHEN** 调度器同时触发 10 个目标且 runtime.maxConcurrentChecks 为 3
|
||
- **THEN** 系统 MUST 同时最多运行 3 个检查,其余检查等待并发槽位释放
|