feat(ws): A3 WebSocket 统一连接管理 — 心跳/注册表/监控/优雅关闭

- 新增 pkg/wshub/manager.go 统一 WebSocket 连接管理器 (WSManager)
- 6 个 WebSocket handler 全部迁移: WebShell/kubectl/PodExec/Audit/Metrics/Pipeline
- 心跳机制: ping(30s) + pong handler + read deadline(60s) 自动检测死连接
- 连接注册表: 元数据(类型/用户/远程地址/连接时间/最后活跃)
- 每用户连接限制 MaxConnsPerUser=15 防资源耗尽
- 监控端点: GET /api/v1/ws/stats + GET /api/v1/ws/connections
- 优雅关闭: CloseAll() 发送 CloseGoingAway 帧并关闭所有连接
- 消除 3 个重复 websocket.Upgrader 变量统一为 WSManager 内部 upgrader
- 6/6 A3 测试通过, 17/17 回归测试通过
This commit is contained in:
attacker committed 2026-06-27 07:20:11 +08:00
1 parent 00a98e210d
commit e4f1018ca1
13 files changed
+508 -58

No files matched your search

+21 -4
View File
@@ -192,11 +192,28 @@ services/api.ts (1324L)
- [x] `GET /alerts/engine/status` 状态监控端点(is_leader / instance_id / lock_holder)
- [x] 本地/redka 模式(cache=nil)自动 fallback 为单实例直行
### A3: WebSocket 连接统一管理 [pending]
### A3: WebSocket 连接统一管理 [done]
**问题**: WebShell/kubectl/PodExec/日志流各有 WebSocket 实现
**问题**: WebShell/kubectl/PodExec/日志流各有 WebSocket 实现(3 个独立 upgrader,无心跳、无连接注册、无优雅关闭)
**方案**: 封装统一的 WebSocket 管理器(断线重连 + 心跳 + 消息分发)
**已完成 (2026-06-27)**:
- ✅ 新增 `pkg/wshub/manager.go` — 统一 WebSocket 连接管理器(WSManager)
- ✅ 6 个 WebSocket handler 全部迁移到 WSManager: WebShell/kubectl/PodExec/AuditStream/Metrics/PipelineLog
- ✅ 心跳机制: ping(30s) + pong handler + read deadline(60s) 自动检测死连接
- ✅ 连接注册表: 每个连接带元数据(类型/用户/远程地址/连接时间/最后活跃时间)
- ✅ 每用户连接限制: MaxConnsPerUser=15 防资源耗尽
- ✅ 监控端点: `GET /api/v1/ws/stats`(聚合统计)+ `GET /api/v1/ws/connections`(连接列表)
- ✅ 优雅关闭: `CloseAll()` 关闭所有连接(发送 CloseGoingAway 帧)
- ✅ 统一 upgrader: 消除 3 个重复的 `websocket.Upgrader` 变量
**验收标准**:
- [x] 所有 6 个 WebSocket handler 共享同一个 WSManager 实例
- [x] `/api/v1/ws/stats` 返回 total + by_type + by_user + by_type_user
- [x] `/api/v1/ws/connections` 返回活跃连接列表(含 uptime_sec)
- [x] 连接打开→注册成功,关闭→注销成功(E2E 验证)
- [x] 心跳 ping/pong 生效(30s ping + 60s pong timeout)
- [x] 多连接并发注册正常
- [x] `go build` 零错误,17/17 回归测试通过
---
@@ -232,7 +249,7 @@ services/api.ts (1324L)
| F3 | 前端 RBAC 控制 | P1 | **done** |
| A1 | K8s 路由统一 | P2 | **done** |
| A2 | 告警引擎分布式 | P2 | **done** |
| A3 | WebSocket 管理 | P2 | pending |
| A3 | WebSocket 管理 | P2 | **done** |
| U1 | 虚拟滚动 | P3 | pending |
| U2 | 统一 DataTable | P3 | pending |
| U3 | 国际化 | P3 | pending |