refactor: expect 类型模型重构,Raw/Resolved 双层分离与断言基础设施内聚
- 重命名 ContentRules→ContentExpectations, KeyValueExpect→KeyedExpectations - 新增 Raw/Resolved 双层模型:resolve 阶段物化为执行计划,store 持久化 Raw 快照 - HTTP body 按需读取:status/headers 失败或无 body expectation 时不读取 body - 新增 displayValueExpectation() 解包 failure.expected 用户可读展示 - 修复 checkEarlyTimeout 独立 lte/lt 检查,修复 KeyedExpectations JSON Schema - 新增 expect/value.ts(resolve/check/display)、keyed.ts、content.ts、headers.ts、status.ts - 删除旧 normalize.ts/matcher.ts/validate-matcher.ts/key-value.ts - 更新 DEVELOPMENT.md:expect 五层管线表、displayValueExpectation、1.7↔1.10 交叉引用 - 同步 13 个 main specs,归档 refactor-expect-type-model 变更(62/62 tasks)
This commit is contained in:
64
README.md
64
README.md
@@ -16,7 +16,7 @@ DiAL 是一个自托管的拨测监控工具,支持 **HTTP**、**命令行**
|
||||
|
||||
- 多种拨测类型:HTTP(GET/POST/PUT 等)、Cmd(命令行执行)、DB(PostgreSQL/MySQL/SQLite)、TCP(端口可达性 + Banner 探测)、UDP(自定义 payload 请求-响应)、ICMP(存活检测、延迟、丢包率)、LLM(大模型服务应用层健康检查)
|
||||
- 丰富的校验规则:状态码、响应头、JSONPath、CSS 选择器、XPath、正则匹配、数值比较等
|
||||
- 结构化观测数据:检查结果保留 HTTP body 预览、TCP/UDP 响应摘要、ICMP 丢包率、CMD 输出预览、LLM token 用量等 observation,便于排障和后续分析
|
||||
- 结构化观测数据:检查结果保留按需读取的 HTTP body 预览、TCP/UDP 响应摘要、ICMP 丢包率、CMD 输出预览、LLM token 用量等 observation,便于排障和后续分析
|
||||
- 响应式 Dashboard:实时状态、可用率统计、耗时趋势图、手动/自动刷新
|
||||
- 多主题支持:系统、明亮、黑暗三种主题模式
|
||||
- 零外部依赖:数据存储使用 SQLite,无需额外数据库服务
|
||||
@@ -185,8 +185,8 @@ targets: # 拨测目标列表(必填)
|
||||
| 字段 | 说明 | 必填 | 默认值 |
|
||||
| ------------ | -------------------------------------------------- | ---- | ------- |
|
||||
| `status` | 可接受的状态码列表,支持精确码和范围(如 `"2xx"`) | 否 | `[200]` |
|
||||
| `headers` | 响应头校验,使用动态键名和 `KeyValueExpect` | 否 | |
|
||||
| `body` | 响应体校验,使用 `ContentRules` 数组 | 否 | |
|
||||
| `headers` | 响应头校验,使用动态键名和 `KeyedExpectations` | 否 | |
|
||||
| `body` | 响应体校验,使用 `ContentExpectations` 数组 | 否 | |
|
||||
| `durationMs` | 完整执行耗时校验,使用 `ValueMatcher` | 否 | |
|
||||
|
||||
**配置示例**
|
||||
@@ -234,12 +234,12 @@ targets: # 拨测目标列表(必填)
|
||||
|
||||
**expect 校验项**
|
||||
|
||||
| 字段 | 说明 | 必填 | 默认值 |
|
||||
| ------------ | -------------------------------------- | ---- | ------ |
|
||||
| `exitCode` | 可接受的退出码列表 | 否 | `[0]` |
|
||||
| `stdout` | 标准输出校验,使用 `ContentRules` 数组 | 否 | |
|
||||
| `stderr` | 标准错误校验,使用 `ContentRules` 数组 | 否 | |
|
||||
| `durationMs` | 完整执行耗时校验,使用 `ValueMatcher` | 否 | |
|
||||
| 字段 | 说明 | 必填 | 默认值 |
|
||||
| ------------ | --------------------------------------------- | ---- | ------ |
|
||||
| `exitCode` | 可接受的退出码列表 | 否 | `[0]` |
|
||||
| `stdout` | 标准输出校验,使用 `ContentExpectations` 数组 | 否 | |
|
||||
| `stderr` | 标准错误校验,使用 `ContentExpectations` 数组 | 否 | |
|
||||
| `durationMs` | 完整执行耗时校验,使用 `ValueMatcher` | 否 | |
|
||||
|
||||
**配置示例**
|
||||
|
||||
@@ -269,12 +269,12 @@ targets: # 拨测目标列表(必填)
|
||||
|
||||
**expect 校验项**
|
||||
|
||||
| 字段 | 说明 | 必填 | 默认值 |
|
||||
| ------------ | ---------------------------------------------------------------- | ---- | ------ |
|
||||
| `rowCount` | 查询返回行数校验,使用 `ValueMatcher` | 否 | |
|
||||
| `rows` | 查询结果逐行校验,数组内每行为列名到 `KeyValueExpect` 的映射 | 否 | |
|
||||
| `result` | 完整查询结果 `{ rows, rowCount }` 校验,使用 `ContentRules` 数组 | 否 | |
|
||||
| `durationMs` | 完整执行耗时校验,使用 `ValueMatcher` | 否 | |
|
||||
| 字段 | 说明 | 必填 | 默认值 |
|
||||
| ------------ | ----------------------------------------------------------------------- | ---- | ------ |
|
||||
| `rowCount` | 查询返回行数校验,使用 `ValueMatcher` | 否 | |
|
||||
| `rows` | 查询结果逐行校验,数组内每行为列名到 `KeyedExpectations` 的映射 | 否 | |
|
||||
| `result` | 完整查询结果 `{ rows, rowCount }` 校验,使用 `ContentExpectations` 数组 | 否 | |
|
||||
| `durationMs` | 完整执行耗时校验,使用 `ValueMatcher` | 否 | |
|
||||
|
||||
**配置示例**
|
||||
|
||||
@@ -309,11 +309,11 @@ targets: # 拨测目标列表(必填)
|
||||
|
||||
**expect 校验项**
|
||||
|
||||
| 字段 | 说明 | 必填 | 默认值 |
|
||||
| ------------ | ------------------------------------------------------------------ | ---- | ------ |
|
||||
| `connected` | 期望连接结果,`true` 可达或 `false` 期望不可达 | 否 | `true` |
|
||||
| `banner` | Banner 内容校验,使用 `ContentRules` 数组,需开启 `tcp.readBanner` | 否 | |
|
||||
| `durationMs` | 完整执行耗时校验,使用 `ValueMatcher` | 否 | |
|
||||
| 字段 | 说明 | 必填 | 默认值 |
|
||||
| ------------ | ------------------------------------------------------------------------- | ---- | ------ |
|
||||
| `connected` | 期望连接结果,`true` 可达或 `false` 期望不可达 | 否 | `true` |
|
||||
| `banner` | Banner 内容校验,使用 `ContentExpectations` 数组,需开启 `tcp.readBanner` | 否 | |
|
||||
| `durationMs` | 完整执行耗时校验,使用 `ValueMatcher` | 否 | |
|
||||
|
||||
**配置示例**
|
||||
|
||||
@@ -354,14 +354,14 @@ targets: # 拨测目标列表(必填)
|
||||
|
||||
**expect 校验项**
|
||||
|
||||
| 字段 | 说明 | 必填 | 默认值 |
|
||||
| -------------- | -------------------------------------- | ---- | ------ |
|
||||
| `responded` | 期望是否收到响应 | 否 | `true` |
|
||||
| `response` | 响应内容校验,使用 `ContentRules` 数组 | 否 | |
|
||||
| `responseSize` | 响应字节数校验,使用 `ValueMatcher` | 否 | |
|
||||
| `sourceHost` | 响应来源地址校验,使用 `ValueMatcher` | 否 | |
|
||||
| `sourcePort` | 响应来源端口校验,使用 `ValueMatcher` | 否 | |
|
||||
| `durationMs` | 完整执行耗时校验,使用 `ValueMatcher` | 否 | |
|
||||
| 字段 | 说明 | 必填 | 默认值 |
|
||||
| -------------- | --------------------------------------------- | ---- | ------ |
|
||||
| `responded` | 期望是否收到响应 | 否 | `true` |
|
||||
| `response` | 响应内容校验,使用 `ContentExpectations` 数组 | 否 | |
|
||||
| `responseSize` | 响应字节数校验,使用 `ValueMatcher` | 否 | |
|
||||
| `sourceHost` | 响应来源地址校验,使用 `ValueMatcher` | 否 | |
|
||||
| `sourcePort` | 响应来源端口校验,使用 `ValueMatcher` | 否 | |
|
||||
| `durationMs` | 完整执行耗时校验,使用 `ValueMatcher` | 否 | |
|
||||
|
||||
**配置示例**
|
||||
|
||||
@@ -466,8 +466,8 @@ ICMP checker 通过系统 `ping` 命令执行 ICMP 探测,支持 Linux、macOS
|
||||
| 字段 | 说明 | 必填 | 默认值 |
|
||||
| ----------------- | ---------------------------------------------------------------------- | ---- | ------- |
|
||||
| `status` | 可接受的状态码列表,支持精确码和范围(如 `"2xx"`) | 否 | `[200]` |
|
||||
| `headers` | 响应头校验,使用动态键名和 `KeyValueExpect` | 否 | |
|
||||
| `output` | 模型输出校验,使用 `ContentRules` 数组 | 否 | |
|
||||
| `headers` | 响应头校验,使用动态键名和 `KeyedExpectations` | 否 | |
|
||||
| `output` | 模型输出校验,使用 `ContentExpectations` 数组 | 否 | |
|
||||
| `finishReason` | finish reason 校验,使用 `ValueMatcher` | 否 | |
|
||||
| `rawFinishReason` | 原始 finish reason 校验,使用 `ValueMatcher` | 否 | |
|
||||
| `usage` | Token usage 校验(`inputTokens`/`outputTokens`/`totalTokens` matcher) | 否 | |
|
||||
@@ -497,7 +497,7 @@ ICMP checker 通过系统 `ping` 命令执行 ICMP 探测,支持 Linux、macOS
|
||||
|
||||
### 通用校验规则
|
||||
|
||||
#### ContentRules 校验项
|
||||
#### ContentExpectations 校验项
|
||||
|
||||
`body`、`stdout`、`stderr`、`banner`、`response`、`output`、`result` 均使用数组:
|
||||
|
||||
@@ -511,7 +511,7 @@ ICMP checker 通过系统 `ping` 命令执行 ICMP 探测,支持 Linux、macOS
|
||||
|
||||
`equals`、`contains`、`regex`、`empty`、`exists`、`gte`、`lte`、`gt`、`lt`。`equals` 支持 JSON 深度相等;`regex` 固定使用无 flags 正则;提取器未配置 matcher 时等价于 `exists: true`。ValueMatcher expect 字段也可直接写 string、number、boolean 或 null,等价于 `{ equals: value }`;数组和对象必须显式写成 `{ equals: ... }`。
|
||||
|
||||
#### KeyValueExpect
|
||||
#### KeyedExpectations
|
||||
|
||||
`headers`、`rows` 中每行使用的校验结构,支持 ValueMatcher 的全部字段。
|
||||
|
||||
|
||||
Reference in New Issue
Block a user