# DCU 多机监控平台需求文档

## 1. 项目概述

- **项目名称**: DCU Multi-Machine Monitor
- **项目描述**: 基于 DCGM 的多台 GPU 服务器实时监控可视化平台
- **技术栈**: Python + Gradio + Plotly + SQLite

---

## 2. 功能需求

### 2.1 多机监控

- [x] 支持同时监控多台机器
- [x] 批量添加 URL（每行一个地址）
- [x] 单个添加 URL
- [x] 添加 URL 后自动开始监控
- [x] 支持移除已添加的目标
- [x] 监控数据保存到数据库

### 2.2 监控指标

从 API `http://<ip>:16081/CollectDeviceMetrics` 获取以下数据：

| 字段 | 说明 | 显示方式 |
|------|------|----------|
| PowerUsage | 功率 (W) | 折线图 |
| MemoryCap | 内存容量 | - |
| MemoryUsed | 内存使用量 | 计算利用率 |
| UtilizationRate | 利用率 (%) | 折线图 |
| Temperature | 温度 (°C) | 折线图 |

**内存利用率计算**：
```
Mem Utilization (%) = ceil(MemoryUsed / MemoryCap * 100)
```
- 精度：整数（向上取整，不四舍五入）

### 2.3 数据存储

- **数据库**: SQLite (`/public/wkx/dcgm/mon/monitor.db`)
- **保留时间**: 最近 24 小时
- **自动清理**: 每次更新数据时删除超过 24 小时的数据
- **数据表**:
  - `monitor_targets`: 监控目标 URL 列表
  - `monitor_data`: 监控数据（包含 timestamp 字段）

### 2.4 图表展示

- [x] 4 个独立 Tab 页：Power、Memory、Utilization、Temperature
- [x] 每个设备单独的颜色曲线
- [x] 鼠标悬停显示详细数值
- [] 必须是折线图

### 2.5 时间轴功能

- **默认显示**: 最近 30 分钟
- **可调范围**: 5 分钟 ~ 24 小时（1440 分钟）
- [] 期望在2.4的每一个图表底部增加选中后，鼠标滚轮滑动缩放时间轴的功能
- [] 滑动鼠标滚轮：5 ~ 1440 分钟

### 2.6 UI 布局

- 图表尺寸：高度 800px（比原来增加 1 倍）
- 目标选择：下拉框切换不同机器
- 目标列表：滚动显示所有已添加的目标

---

## 3. 页面交互

### 3.1 添加监控目标

**方式一：单个添加**
```
输入框: http://10.20.100.12:16081/CollectDeviceMetrics
按钮: Add Single URL
```

**方式二：批量添加**
```
输入框: 每行一个URL
http://10.20.100.12:16081/CollectDeviceMetrics
http://10.20.100.13:16081/CollectDeviceMetrics
...
按钮: Batch Add URLs
```

### 3.2 监控控制

- **Start Monitoring**: 启动监控（每5秒采集一次）
- **Refresh Charts**: 刷新图表数据
- [] 增加监控失败的提示，如果失败，出现按钮，删除指定机器的监控任务；

### 3.3 多个监控目标的显示

- [] 多个监控目标的话，在监控栏，以每个机器为一个矩形区，从上向下，每台机器增加1个监控目标的监控折线图展示
- [] 每个机器的矩形区的右侧，增加停机并监控目标的按钮



---

## 4. 配置文件

## 5. API 数据格式

### 5.1 输入数据

```json
[
  {
    "MinorNumber": 0,
    "PciBusNumber": "0000:00:08.0",
    "DeviceId": "TPXS320016070601",
    "SubSystemName": "K100 AI",
    "Temperature": 57,
    "PowerUsage": 113,
    "PowerCap": 400,
    "MemoryCap": 68702699520,
    "MemoryUsed": 2142208,
    "UtilizationRate": 0,
    "PcieBwMb": 0,
    "Clk": 600,
    "Socclk": 309,
    "PerfLevel": "AUTO"
  }
]
```

### 5.2 输出图表

- **Power**: 功率监控 (W)
- **Memory**: 内存利用率 (%), 范围 0-100
- **Utilization**: 利用率 (%), 范围 0-100
- **Temperature**: 温度 (°C)
