# GPU/DCU 资源看板

一个面向测试团队共享使用的 GPU/DCU 服务器占用看板。它通过 SSH 定时在服务器上执行 `hy-smi` 或 `nvidia-smi`，集中展示每台机器的卡数、型号、显存占用、算力占用、温度、功耗、空闲/占用/离线状态。

## 推荐使用方式

最推荐的方式是：**在一台能免密 SSH 登录所有服务器的电脑或跳板机上部署一次，然后把网页地址共享给大家。**

这样每个同事不用单独安装，也不用每个人都配置服务器 SSH 密钥。大家只需要访问：

```text
http://部署机器IP:3066
```

## 快速启动

Windows 用户可以双击：

```text
start-windows.bat
```

或者手动启动：

```powershell
npm start
```

默认地址：

```text
http://localhost:3066
```

如果要给同网段同事访问，在部署机器的防火墙放行 `3066` 端口后，让大家访问：

```text
http://你的电脑IP:3066
```

## 使用前提

- 部署机器需要安装 Node.js 18 或更高版本。
- 部署机器需要能通过 SSH 免密登录目标服务器。
- 海光服务器上需要能执行 `hy-smi`。
- NVIDIA 服务器上需要能执行 `nvidia-smi`。

建议先在部署机器上验证：

```powershell
ssh root@10.0.0.12 hy-smi
ssh root@10.0.0.13 nvidia-smi
```

## 功能

- 网页端添加、编辑、删除服务器。
- 自动识别卡数。
- 自动识别显卡型号：
  - 海光：通过 `hy-smi --showproductname` 识别，例如 `BW100`、`BW150`，未来新型号也会按输出自动提取。
  - NVIDIA：通过 `nvidia-smi --query-gpu=name` 识别。
- 同时展示显存占用和算力占用。
- 显存泄漏或 vLLM 服务未释放显存时，即使算力为 0，也会判定该卡不可用。
- 主界面水位色块按占用率从下往上填充。
- 占用颜色分级：绿色、黄绿色、橘色、红色。
- 默认每 10 秒自动采集一次，也可以点“手动刷新”立即刷新。

## 配置说明

网页里点击“添加服务器”即可写入配置。真实配置保存在：

```text
data/servers.json
```

该文件已被 `.gitignore` 忽略，避免把真实服务器地址提交到仓库。示例配置见：

```text
data/servers.sample.json
```

服务器支持 `group` 分组字段，适合公共部署时按项目或客户线管理，例如“通信中兴组”“政府联想组”“企业浪潮组”“金融华三组”“深度组”。页面会自动生成分组筛选入口；`tags` 仍然可以用于补充“8卡”“回归”“临时”等标签。

## 环境变量

```powershell
$env:PORT=3066
$env:POLL_INTERVAL_MS=10000
$env:SSH_TIMEOUT_MS=8000
npm start
```

常用配置：

- `PORT`：网页端口，默认 `3066`。
- `POLL_INTERVAL_MS`：自动采集间隔，默认 `10000` 毫秒。
- `SSH_TIMEOUT_MS`：单台服务器 SSH/采集命令超时，默认 `20000` 毫秒。NVIDIA 机器首次执行 `nvidia-smi` 较慢时可以继续调大。
- `SSH_PATH`：自定义 SSH 程序路径。Windows 默认使用 `C:\Windows\System32\OpenSSH\ssh.exe`。

## 上传到 GitHub

首次上传：

```powershell
git init
git add .
git commit -m "Initial GPU DCU monitor"
git branch -M main
git remote add origin https://github.com/你的用户名/你的仓库名.git
git push -u origin main
```

后续更新：

```powershell
git add .
git commit -m "Update dashboard"
git push
```

## 给同事一键使用

最简单的方式：

1. 在 GitHub 页面点击 `Code` -> `Download ZIP`。
2. 解压 ZIP。
3. 双击 `start-windows.bat`。
4. 打开或分享 `http://localhost:3066` / `http://部署机器IP:3066`。

更推荐的团队方式：

1. 由你在一台固定机器上运行 `start-windows.bat`。
2. 你在网页里添加所有服务器。
3. 同事只访问 `http://部署机器IP:3066`。

如果你想做到真正的“无需安装 Node.js，双击一个 exe 就能运行”，后续可以再做 Windows 打包版。常见路线是 Electron、pkg/nexe 或 Inno Setup，但会比当前轻量 Web 版复杂一些。

## 注意事项

- 不要把 `data/servers.json` 提交到 GitHub，里面可能包含内部服务器 IP。
- 不要把 SSH 私钥提交到 GitHub。
- 如果同事访问不了网页，优先检查部署机器防火墙是否放行了 `3066` 端口。
