40 lines
3.4 KiB
Markdown
40 lines
3.4 KiB
Markdown
## Why
|
||
|
||
当前系统以 HTTP 请求作为唯一 checker 形态,`target`、`expect`、存储、API 和 Dashboard 都围绕 URL、HTTP method、status code 与 response body 建模,无法自然表达本地命令检查等非 HTTP 场景。项目尚未上线,没有兼容性约束,适合一次性重构为面向多种 checker 类型的清晰模型。
|
||
|
||
## What Changes
|
||
|
||
- **BREAKING**: 移除顶层 `target.url`、`target.method`、`target.headers`、`target.body` 配置形态,改为 `target.type` 判别不同 checker 类型,并将领域字段放入 `http` 或 `command` 分组。
|
||
- **BREAKING**: `expect.body` 从对象分组改为有序规则数组,按配置顺序执行并快速失败。
|
||
- 引入 `http` target 类型,支持 HTTP URL、method、headers、body、最大 body 读取字节数和 HTTP 专用 expect。
|
||
- 引入 `command` target 类型,支持本地命令 `exec + args`、`cwd`、`env`、最大输出读取字节数和 command 专用 expect。
|
||
- 为不同 checker 类型提供领域默认成功语义:HTTP 默认 `expect.status: [200]`,command 默认 `expect.exitCode: [0]`。
|
||
- 引入全局并发限制 `runtime.maxConcurrentChecks`,默认值为 20。
|
||
- 引入 size 配置解析,支持 `B`、`KB`、`MB`、`GB`,HTTP `maxBodyBytes` 和 command `maxOutputBytes` 默认均为 `100MB`。
|
||
- 调整 expect 执行管线:先执行状态类检查,再执行耗时检查,再执行元数据或内容检查;同一内容字段内部按数组顺序检查,任一失败立即返回结构化失败信息。
|
||
- 将 check result 的失败信息结构化入库,区分 runner 执行错误与 expect 不匹配,便于后续追查。
|
||
- 将 DB、API、Dashboard 从 HTTP-only 字段命名调整为通用 checker 展示模型,同时保留 HTTP 和 command 的领域专用细节。
|
||
- 同步更新 README、示例配置和测试,覆盖 typed target、默认 expect、快速失败、输出限制、失败信息和 Dashboard 展示。
|
||
|
||
## Capabilities
|
||
|
||
### New Capabilities
|
||
|
||
- `command-checker`: 定义本地命令 checker 的配置、执行、安全边界、默认成功语义、输出限制和 expect 校验。
|
||
|
||
### Modified Capabilities
|
||
|
||
- `probe-config`: YAML 配置从 HTTP-only target 改为 typed target,新增 runtime 并发限制、HTTP/command 默认配置和 size 字符串解析。
|
||
- `probe-engine`: 调度引擎从固定 HTTP fetch 改为按 target type 选择 runner,并在全局并发限制下执行检查。
|
||
- `expect-body-checkers`: HTTP body expect 改为有序规则数组,通用值操作符可复用于 stdout/stderr/header/body 等不同字段。
|
||
- `probe-data-store`: targets 和 check_results schema 从 HTTP-only 字段改为 checker 通用字段,并持久化结构化失败信息。
|
||
- `probe-api`: API 响应从 URL/method/statusCode/latencyMs 为中心改为 type/target/durationMs/statusDetail/failure 等通用 checker 契约。
|
||
- `probe-dashboard`: Dashboard 从 HTTP 拨测视图调整为 checker 通用视图,展示类型、目标、耗时、最近失败原因和领域状态详情。
|
||
|
||
## Impact
|
||
|
||
- 影响后端类型定义、配置加载校验、调度执行、HTTP runner、command runner、expect 校验模块、SQLite schema、聚合查询和 API 映射。
|
||
- 影响前后端共享 API 类型和 Dashboard 表格、详情、历史记录、趋势图展示字段。
|
||
- 影响 README、`probes.example.yaml`、单元测试和 smoke test 配置样例。
|
||
- 不引入新依赖,优先复用 Bun、TypeScript、现有 cheerio/xpath 和 SQLite 能力。
|