1
0
Files
DiAL/openspec/changes/archive/2026-05-09-http-probe-checker/proposal.md

37 lines
3.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
## Why
项目当前只有 demo 验证链路(`/api/demo` + 前端展示连接状态),缺少核心业务逻辑。需要一个 HTTP 拨测工具,通过 YAML 配置文件定义拨测目标URL、method、header、body、期望条件等后端按配置定时、并行批量拨测结果持久化到本地 SQLite前端 Dashboard 展示各目标实时状态、可用率、延迟趋势等。
## What Changes
- **清理 demo 样例代码**:移除 `/api/demo` 路由、`DemoResponse` 类型、前端 demo 展示逻辑,保留路由框架、服务启动、构建打包链路和 `/health` 端点
- **新增 YAML 配置文件解析**:使用 Bun 内置 `Bun.YAML.parse()` 读取拨测规则文件,包含 server 配置、数据目录、全局默认值和拨测目标列表
- **简化 CLI 参数**:只保留一个命令行参数——配置文件路径,所有配置统一到 YAML 文件
- **新增 SQLite 数据存储**:使用 `bun:sqlite` 存储拨测目标(从 YAML 同步)和拨测结果(追加写入),支持索引查询
- **新增拨测调度引擎**:按 target 的 interval 分组,每组独立 timer组内 `Promise.all` 并发拨测,支持 expect 校验(状态码、响应体、延迟阈值)
- **新增 REST API 层**:提供总览统计、目标列表含当前状态、历史记录、趋势聚合等接口
- **新增前端 Dashboard**:使用 React 组件展示统计卡片、目标列表表格(含状态圆点和迷你趋势线)、可展开详情面板(含完整趋势图),通过轮询 5-10s 更新数据
- **引入 recharts 依赖**:用于趋势图和迷你 Sparkline 可视化
## Capabilities
### New Capabilities
- `probe-config`: YAML 配置文件格式定义、解析校验与 CLI 启动流程
- `probe-engine`: 拨测调度引擎——按 interval 分组定时、并发拨测、expect 校验、结果存储
- `probe-data-store`: SQLite 数据存储——targets 同步、results 追加、索引与聚合查询
- `probe-api`: REST API 层——总览统计、目标列表含状态、历史记录、趋势聚合
- `probe-dashboard`: React 前端 Dashboard——统计卡片、目标表格、详情面板、趋势图
### Modified Capabilities
- `fullstack-app-runtime`: CLI 参数从 `--host/--port` 简化为单个配置文件路径参数;移除 `/api/demo` 路由;新增 `/api/*` 拨测相关 API 路由
- `frontend-development-workflow`: 前端从 demo 展示页面替换为拨测 Dashboard移除 `/api/demo` 相关代理场景
## Impact
- **代码变更**`src/server/app.ts` 路由重写、`src/server/config.ts` 简化、`src/shared/api.ts` 类型重写、`src/web/` 前端全部重写
- **新增模块**`src/server/checker/` 目录engine、fetcher、store、config-loader、types
- **新增依赖**`recharts`(前端图表)
- **无新增外部依赖**YAML 解析使用 Bun 内置 `Bun.YAML`SQLite 使用 Bun 内置 `bun:sqlite`
- **构建打包**:现有 single executable 打包链路不变YAML 配置文件为外部文件不嵌入 executable
- **API 变更****BREAKING** 移除 `/api/demo`,新增 `/api/summary``/api/targets``/api/targets/:id/history``/api/targets/:id/trend`