Files
yinjianm 1739f7a2f9 feat(api): 新增节点流量悬浮详情与即时自动上线同步
为 server/manage/getNodes 返回节点级今日、本月与累计流量统计,
并在节点管理页名称悬浮层展示上行、下行和合计流量。

同时为自动上线补齐单节点同步入口,在管理端保存、
批量更新以及 REST/WS 心跳后立即同步 show 状态,
避免复制节点后开启自动上线仍需等待定时任务。

另优化管理端前端 Docker 发布流程,默认仅构建 amd64,
并收敛 BuildKit 缓存导出以缩短发布时间
2026-04-28 16:51:35 +08:00

83 lines
3.6 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.
# 任务清单: admin-frontend-node-auto-online-immediate-sync
> **@status:** completed | 2026-04-28 16:37
```yaml
@feature: admin-frontend-node-auto-online-immediate-sync
@created: 2026-04-28
@status: completed
@mode: R2
```
## LIVE_STATUS
```json
{"status":"completed","completed":5,"failed":0,"pending":0,"total":5,"percent":100,"current":"开发实施完成,方案包已归档","updated_at":"2026-04-28 16:43:00"}
```
## 进度概览
| 完成 | 失败 | 跳过 | 总数 |
|------|------|------|------|
| 5 | 0 | 0 | 5 |
---
## 任务列表
### 1. 自动上线服务
- [√] 1.1 修改 `app/Services/ServerAutoOnlineService.php`
- 预期变更: 抽出单节点同步入口 `syncServer(Server $server)`,让全量 `sync()` 复用同一判定逻辑。
- 完成标准: 单节点和全量同步返回结构一致,仍包含 `total/updated/shown/hidden/unchanged`
- 验证方式: `vendor/bin/phpunit tests/Unit/ServerAutoOnlineServiceTest.php`
- depends_on: []
### 2. 触发点接入
- [√] 2.1 修改 `app/Services/ServerService.php`
- 预期变更: `touchNode()` 更新节点心跳缓存后,对 `auto_online=true` 的节点立即调用单节点同步。
- 完成标准: 自动上线节点心跳后无需等待 Scheduler 即可同步 `show`,未开启自动上线的节点不受影响。
- 验证方式: `vendor/bin/phpunit tests/Unit/ServerAutoOnlineServiceTest.php`
- depends_on: [1.1]
- [√] 2.2 修改 `app/WebSocket/NodeEventHandlers.php`
- 预期变更: WebSocket 节点状态上报改为复用 `ServerService::touchNode()`,避免绕过自动上线即时同步。
- 完成标准: REST 与 WebSocket 心跳入口都收敛到同一个自动上线触发点。
- 验证方式: 代码检查 + `vendor/bin/phpunit tests/Unit/ServerAutoOnlineServiceTest.php`
- depends_on: [2.1]
- [√] 2.3 修改 `app/Http/Controllers/V2/Admin/Server/ManageController.php`
- 预期变更: `save()``update()``batchUpdate()` 在保存或开启 `auto_online` 后立即执行单节点同步。
- 完成标准: 管理端保存复制节点、行级开启自动上线、批量开启自动上线后会立即按当前状态同步 `show`
- 验证方式: 代码检查 + `vendor/bin/phpunit tests/Unit/ServerAutoOnlineServiceTest.php`
- depends_on: [1.1]
### 3. 验证覆盖
- [√] 3.1 修改 `tests/Unit/ServerAutoOnlineServiceTest.php`
- 预期变更: 增加单节点同步和 `touchNode()` 触发自动上线的测试。
- 完成标准: 新测试能复现复制节点 `show=0 + auto_online=1` 在线后立即 `show=1` 的核心行为。
- 验证方式: `vendor/bin/phpunit tests/Unit/ServerAutoOnlineServiceTest.php`
- depends_on: [1.1, 2.1]
---
## 执行日志
| 时间 | 任务 | 状态 | 备注 |
|------|------|------|------|
| 2026-04-28 16:32 | DESIGN | completed | 已确认唯一方案并创建任务清单 |
| 2026-04-28 16:37 | 1.1 | completed | 已抽出单节点自动上线同步入口并复用全量同步逻辑 |
| 2026-04-28 16:38 | 2.1/2.2 | completed | 已接入节点心跳、管理端保存、行级更新和批量更新触发点 |
| 2026-04-28 16:39 | 3.1 | completed | 已补充单节点同步和心跳即时同步测试 |
| 2026-04-28 16:40 | 验证 | warning | `npm --prefix admin-frontend run build` 通过;本机缺少 PHP/vendorPHPUnit 未运行 |
| 2026-04-28 16:43 | 2.2 | completed | 已补齐 WebSocket 状态上报入口,统一复用 `touchNode()` |
---
## 执行备注
- 本次不修改前端视觉和接口签名,前端现有 `@success="() => loadNodeBoard()"` 会在保存成功后刷新列表。
- 后端自动上线仍以 `available_status` 和墙状态为准,不做无条件显示。