<h1 align="center">DiAL</h1>

<p align="center">
  <strong>轻量级多类型拨测监控工具</strong>
</p>

<p align="center">
  基于 Bun + TypeScript 构建 · YAML 配置驱动 · 内置 Dashboard
</p>

---

DiAL 是一个自托管的拨测监控工具，支持 **HTTP**、**命令行**、**数据库**、**TCP**、**UDP**、**DNS**、**ICMP** 和 **LLM** 多种拨测类型。通过 YAML 配置文件定义拨测目标，后端定时并发执行拨测并将结果持久化到本地 SQLite，前端 Dashboard 展示各目标的实时状态、可用率和耗时趋势。

## 功能亮点

- 多类型拨测：HTTP、Cmd、DB、TCP、UDP、DNS、ICMP、LLM
- 丰富校验规则：状态码、响应头、JSONPath、CSS 选择器、XPath、正则匹配、数值比较等
- 结构化观测数据：HTTP body 预览、TCP/UDP 响应摘要、ICMP 丢包率、CMD 输出、LLM token 用量等
- 内置 Dashboard：实时状态、可用率统计、趋势图、最近状态条、手动/自动刷新、版本号展示
- 多主题支持：系统、明亮、黑暗三种主题模式
- 自托管部署：本地 SQLite 存储，无需额外数据库服务

## 应用截图

|        | 亮色                                                | 暗色                                              |
| ------ | --------------------------------------------------- | ------------------------------------------------- |
| 主页   | ![index-light](assets/screenshot/light_index.png)   | ![index-dark](assets/screenshot/dark_index.png)   |
| 详情页 | ![detail-light](assets/screenshot/light_detail.png) | ![detail-dark](assets/screenshot/dark_detail.png) |

## 快速开始

**前置条件：** [Bun](https://bun.sh/) >= 1.0

ICMP checker 依赖系统 `ping` 命令。精简容器镜像需额外安装，例如 Alpine 可安装 `iputils-ping`。

```bash
git clone https://github.com/your-org/DiAL.git
cd DiAL
bun install
cp probes.example.yaml probes.yaml
bun run dev probes.yaml
```

`bun run dev` 会同时启动 Vite 开发服务器（`http://127.0.0.1:5173`）和 API 服务器（`http://127.0.0.1:3000`），访问前端地址即可使用 Dashboard。

## 最小配置示例

```yaml
# yaml-language-server: $schema=./probe-config.schema.json

targets:
  - id: "baidu-home"
    name: "Baidu"
    type: http
    http:
      url: "https://www.baidu.com"
    expect:
      status: [200]
      durationMs:
        lte: 5000
```

完整配置、checker、expect 和部署说明参见 [用户文档](docs/user/README.md)、[配置文件](docs/user/configuration.md)、[Checker 参考](docs/user/checkers/README.md) 和 [校验规则](docs/user/expectations.md)。

## 生产运行

```bash
bun run build
./dist/dial-server ./probes.yaml
```

Docker、跨平台发布包和运行时注意事项参见 [部署文档](docs/user/deployment.md)。

## 文档导航

| 入口                                         | 内容                                        |
| -------------------------------------------- | ------------------------------------------- |
| [文档总览](docs/README.md)                   | 全部文档入口和文档归属矩阵                  |
| [用户文档](docs/user/README.md)              | 配置、部署、expect、排障和 checker 使用入口 |
| [配置文件](docs/user/configuration.md)       | YAML 结构、变量、server、targets 通用字段   |
| [Checker 参考](docs/user/checkers/README.md) | 所有 checker 的配置、expect 和示例          |
| [校验规则](docs/user/expectations.md)        | expect 规则、状态判定、failure、observation |
| [部署文档](docs/user/deployment.md)          | 构建、Docker、发布包和容器运行边界          |
| [故障排查](docs/user/troubleshooting.md)     | 常见运行问题和排查入口                      |
| [开发文档](docs/development/README.md)       | 开发入口、常用命令、质量门禁和专题索引      |

## 开发

```bash
bun run check   # schema:check + typecheck + lint + test
bun run verify  # check + build
```

开发入口参见 [开发文档](docs/development/README.md)。新增或修改 checker 前请先阅读 [Checker 开发](docs/development/checker.md)。

## License

Apache-2.0
