1
0
Files
DiAL/openspec/changes/backend-architecture-hardening/specs/probe-engine/spec.md
lanyuanxiaoyao 147a2559ae refactor: 后端架构加固 — 泛型化、批量查询、bootstrap 统一、路径修复与 pageSize 上限
- 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 文档,新增完整测试覆盖
2026-05-13 18:15:46 +08:00

1.7 KiB
Raw Blame History

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_resultfailure 为 { 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 个检查,其余检查等待并发槽位释放