- ROADMAP Q1: 记录 src/api 清零里程碑, any 1076→937 - TDD_PLAN Q1: 补充 U8 通过标准 (src/api any 清零) - PROJECT_EVALUATION: 技术债 any 标记 in_progress
225 lines
8.6 KiB
Markdown
225 lines
8.6 KiB
Markdown
# AIOps 智能运维平台 — 优化路线图
|
||
|
||
> 基于全量审计(96,102 行代码 / 374 文件),从「K8s 功能开发」全面转向「工程质量 + 功能补全 + 架构治理」。
|
||
> 最后更新: 2026-06-25
|
||
|
||
---
|
||
|
||
## 当前状态:功能开发阶段已完成
|
||
|
||
| 大模块 | 完成度 | 说明 |
|
||
|--------|:------:|------|
|
||
| 资产管理 | 100% | 服务器/云账号/域名/账单/Agent 全功能 |
|
||
| Kubernetes 管理 | 100% | M1-M14 全部完成(14 个子模块) |
|
||
| 应用发布 | 100% | CI/CD 流水线 + SSH/K8s 双路径 |
|
||
| 监控告警 | 80% | Agent 监控 + 告警引擎完善;缺:大屏/链路追踪/告警静默 |
|
||
| 自动化运维 | 100% | CronJob/脚本/Ansible |
|
||
| AIOps 智能 | 100% | 6 种 LLM + 告警分析 + 容量预测 |
|
||
| 系统管理 | 95% | 审计导出 TODO |
|
||
|
||
---
|
||
|
||
## P0 — 工程质量治理(最高优先级)
|
||
|
||
> 目标:从「能跑」升级到「能维护」。解决前端类型安全和后端巨型文件问题。
|
||
|
||
### Q1: 前端类型安全治理 [in_progress]
|
||
|
||
**问题**: ~~1026 处 `any` 类型 + 218 处未使用变量~~ → 当前 any=937(ESLint), unused≈3, console=0, tsc -b=0 errors
|
||
|
||
**已完成里程碑 (2026-06-26)**:
|
||
- ✅ **整个 `src/api/` 目录 any 清零** — monitor/deploy/cloud/agent/server/auth/automation 等子目录所有 create/update 入参与返回值对接具体接口类型/mock 桩对接 Trace/GrafanaDashboard 标准类型
|
||
- ✅ `types/monitor.ts` 扩展 ~150 行接口:ZabbixDatasource / AlertSilence / 7 个输入 DTO + Trace/Span/ServiceMetrics + GrafanaDashboard/Panel + HealthProbeInput
|
||
- ✅ ESLint `no-explicit-any` 1076 → 937(API 服务层 + 类型库贡献)
|
||
|
||
**方案**:
|
||
1. 建立 `frontend/src/types/` 后端响应类型定义库(当前仅 375 行,覆盖率极低)
|
||
2. 按模块定义接口:`types/kubernetes.ts` / `types/server.ts` / `types/pipeline.ts` 等
|
||
3. 逐步将 `any` 替换为具体接口类型
|
||
4. 清理 218 处 `no-unused-vars`
|
||
5. 移除 93 处 `console.*`(特别是 `api.ts:280` 泄露 token 的调试日志)
|
||
6. 配置 CI `tsc --noEmit` 零错误门禁
|
||
|
||
**验收标准**:
|
||
- [ ] `types/` 目录覆盖所有后端响应结构
|
||
- [ ] `any` 类型从 1026 处降至 < 50 处
|
||
- [ ] `npx tsc --noEmit` 零错误
|
||
- [ ] ESLint `no-unused-vars` 降至 < 20 处
|
||
- [ ] `console.*` 降至 < 10 处(仅保留 error 级别)
|
||
|
||
### Q2: 后端 kubernetes.go 模块化拆分 [done]
|
||
|
||
**问题**: 单文件 4204 行 / 134 函数,全仓最大文件
|
||
|
||
**方案**:
|
||
```
|
||
handlers/kubernetes.go (4204L → 106L core)
|
||
→ handlers/kubernetes.go (106L: struct + constructor + shared helpers)
|
||
→ handlers/k8s_cluster.go (642L: 集群 CRUD + 同步 + RBAC)
|
||
→ handlers/k8s_workload.go (696L: Deployment/STS/DS/ReplicaSet 读写操作)
|
||
→ handlers/k8s_pod.go (653L: Pod 日志/终端/exec/指标)
|
||
→ handlers/k8s_pod_files.go (206L: Pod 文件浏览/上传/下载)
|
||
→ handlers/k8s_resource.go (351L: Service/Ingress/ConfigMap/Secret/PVC/Topology)
|
||
→ handlers/k8s_hpa_cronjob.go (384L: HPA + CronJob)
|
||
→ handlers/k8s_yaml.go (213L: 通用 YAML get/update/delete/apply)
|
||
→ handlers/k8s_namespace.go (305L: Namespace CRUD + 配额)
|
||
→ handlers/k8s_events.go (207L: 事件列表 + 聚合)
|
||
→ handlers/k8s_node.go (428L: Node 详情 + 资源分配)
|
||
→ handlers/k8s_compare.go (146L: 多集群对比)
|
||
```
|
||
|
||
**验收标准**:
|
||
- [x] 拆分后单文件不超过 800 行(最大 k8s_workload.go 696 行)
|
||
- [x] 所有路由不变,API 响应不变(425 条路由,26 个核心端点回归测试全通过)
|
||
- [x] `go build` 零错误
|
||
- [x] 425 条路由全部可访问(回归测试)
|
||
|
||
### Q3: 前端 api.ts 模块化拆分 [done]
|
||
|
||
**问题**: 单文件 1324 行 / 352 方法
|
||
|
||
**方案**:
|
||
```
|
||
services/api.ts (1324L)
|
||
→ services/api/kubernetes.ts (78 方法)
|
||
→ services/api/deploy.ts (34 方法)
|
||
→ services/api/agent.ts (23 方法)
|
||
→ services/api/alert.ts (21 方法)
|
||
→ services/api/server.ts (11 方法)
|
||
→ services/api/cloud.ts (12 方法)
|
||
→ services/api/index.ts (统一 re-export)
|
||
```
|
||
|
||
**验收标准**:
|
||
- [x] 拆分后单文件不超过 300 行(kubernetes.ts 409 行为例外:78 方法单一模块不可再分)
|
||
- [x] 所有 import 路径正确(97 个文件 import @/services/api 全部通过 index.ts 解析)
|
||
- [x] `npm run build` 零错误
|
||
- [x] 31 个 API 对象 + 3 个类型定义全部保留
|
||
|
||
---
|
||
|
||
## P1 — 功能补全
|
||
|
||
> 目标:消除前端 mock 桩,补全监控模块缺失的后端。
|
||
|
||
### F1: 告警静默规则 [done]
|
||
|
||
**问题**: `alertCenterApi.silence` 硬编码返回 `{success:true}`
|
||
|
||
**方案**:
|
||
- 后端新增 `alert_silences` 表 + CRUD API
|
||
- 告警引擎评估时检查静默规则(匹配 namespace/label/时间窗)
|
||
- 前端 AlertCenter 新增「静默规则」Tab
|
||
|
||
**验收标准**:
|
||
- [x] 可创建/查看/删除静默规则
|
||
- [x] 静默期间告警引擎不触发通知(`isSilenced` 集成在 alert_engine.go)
|
||
- [x] 静默到期自动恢复(onetime/daily/weekly 三种模式)
|
||
|
||
### F2: 审计日志导出 [done]
|
||
|
||
**问题**: 后端 `audit.go` 导出功能仅返回 JSON(TODO)
|
||
|
||
**方案**:
|
||
- 实现 CSV 导出(stdlib `encoding/csv`,带 UTF-8 BOM,Excel 可直接打开)
|
||
- 前端 `http.download` 触发浏览器下载,传递当前筛选参数
|
||
|
||
**验收标准**:
|
||
- [x] 可导出为 CSV 格式(带 UTF-8 BOM,Excel 直接打开无乱码)
|
||
- [x] 支持按模块/操作类型/用户/时间范围筛选导出
|
||
- [x] 导出限制 10000 条防内存溢出
|
||
- [x] JSON 格式向后兼容(format=json)
|
||
|
||
### F3: 前端 RBAC 按钮级控制 [done]
|
||
|
||
**问题**: 后端 RBAC 完善,但前端无按钮级权限控制
|
||
|
||
**方案**:
|
||
- 后端新增 `GET /user/permissions` 端点返回当前用户权限码;Login 响应附带 `permissions` 数组
|
||
- 封装 `<HasPermission permission="xxx">` 组件 + `usePermission()` hook
|
||
- Sidebar 菜单按权限过滤(每个菜单项带 `permission` 字段)
|
||
- 服务器管理/系统管理等关键页面的增删改按钮按权限显隐
|
||
- admin 用户 permissions=`["*"]` 通配符,所有按钮可见
|
||
|
||
**验收标准**:
|
||
- [x] 不同角色看到不同菜单(viewer 只看到 7 个只读菜单,admin 看到全部)
|
||
- [x] 无权限按钮自动隐藏(viewer 看不到「添加服务器」「删除」按钮)
|
||
- [x] 权限变更后实时生效(登录即获取最新权限,刷新页面自动拉取)
|
||
- [x] admin 通配符 `["*"]` 短路逻辑
|
||
- [x] 页面刷新后自动拉取权限(MainLayout useEffect)
|
||
|
||
---
|
||
|
||
## P2 — 架构优化
|
||
|
||
### A1: K8s 双路由体系统一 [pending]
|
||
|
||
**问题**: 104 条 K8s 路由存在集群域 `/kubernetes-clusters/:id/...` 和 Kuboard 域 `/kubernetes/:code/...` 两套
|
||
|
||
**方案**: 以 Kuboard code 路由为主,ID 路由保留向后兼容(标记 deprecated)
|
||
|
||
### A2: 告警引擎分布式安全 [pending]
|
||
|
||
**问题**: 告警引擎用 goroutine + 30s ticker 常驻,多副本会重复告警
|
||
|
||
**方案**: Redis 分布式锁(每轮 ticker 先抢锁),或选主机制
|
||
|
||
### A3: WebSocket 连接统一管理 [pending]
|
||
|
||
**问题**: WebShell/kubectl/PodExec/日志流各有 WebSocket 实现
|
||
|
||
**方案**: 封装统一的 WebSocket 管理器(断线重连 + 心跳 + 消息分发)
|
||
|
||
---
|
||
|
||
## P3 — 用户体验提升
|
||
|
||
### U1: 虚拟滚动 [pending]
|
||
- Pod 列表(1000+ Pod 场景)使用 `@tanstack/react-virtual`
|
||
- 事件列表、审计日志列表
|
||
|
||
### U2: 统一 DataTable 组件 [pending]
|
||
- 封装排序/筛选/分页/导出/列自定义的通用表格
|
||
- 替换散布在各页面的手写表格
|
||
|
||
### U3: 国际化 (i18n) [pending]
|
||
- 提取所有中文文案到 `i18n/zh-CN.json`
|
||
- 预留 `en-US.json` 扩展
|
||
|
||
### U4: 后端镜像优化 [pending]
|
||
- Backend 277MB → 目标 < 150MB(多阶段构建优化,移除 Agent 编译工具链)
|
||
- 或使用 distroless 基础镜像
|
||
|
||
---
|
||
|
||
## 模块状态追踪
|
||
|
||
| ID | 模块 | 优先级 | 状态 |
|
||
|----|------|:------:|:----:|
|
||
| Q1 | 前端类型安全治理 | P0 | **in_progress** |
|
||
| Q2 | kubernetes.go 拆分 | P0 | **done** |
|
||
| Q3 | api.ts 拆分 | P0 | **done** |
|
||
| F1 | 告警静默规则 | P1 | **done** |
|
||
| F2 | 审计日志导出 | P1 | **done** |
|
||
| F3 | 前端 RBAC 控制 | P1 | **done** |
|
||
| A1 | K8s 路由统一 | P2 | pending |
|
||
| A2 | 告警引擎分布式 | P2 | pending |
|
||
| A3 | WebSocket 管理 | P2 | pending |
|
||
| U1 | 虚拟滚动 | P3 | pending |
|
||
| U2 | 统一 DataTable | P3 | pending |
|
||
| U3 | 国际化 | P3 | pending |
|
||
| U4 | 镜像优化 | P3 | pending |
|
||
|
||
---
|
||
|
||
## 状态标记规则
|
||
|
||
```
|
||
pending → in_progress → done / blocked
|
||
```
|
||
|
||
每个模块完成后:
|
||
1. 更新本文件状态
|
||
2. 更新 PROJECT_EVALUATION.md 对应行
|
||
3. git commit message 格式: `refactor: Q2 kubernetes.go 模块化拆分`
|