37 lines
3.1 KiB
Markdown
37 lines
3.1 KiB
Markdown
## 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`
|