Files
aiops/docs/dev-log.md
T

156 lines
9.0 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.
# EZOps AIOps 开发日志
## 2026-06-13 项目初始化
### 完成项
| 项目 | 状态 | 说明 |
|------|------|------|
| 前端 (React+TS+Vite) | ✅ | React 18 + TypeScript + Tailwind CSS + shadcn/ui |
| 后端 (Go+Gin+GORM) | ✅ | Go + Gin + GORM + JWT + SQLite |
| 数据库 (SQLite) | ✅ | sqlite3.db,CGO 编译 |
| run.sh 启动脚本 | ✅ | 一键 start/stop/restart/status/logs |
| Vite Proxy | ✅ | /api → localhost:8080 |
| docs 文档 | ✅ | 项目结构/API/部署/开发指南 |
### 编译修复记录
| 文件 | 问题 | 修复 |
|------|------|------|
| `auth.go` | jwt/v5 移除了 `TimeFunc()` | 改用 `time.Now()` |
| `mock.go` | 匹配实际 model 定义 | 完全重写 |
| `audit.go` | 编译错误 | 修复字段引用 |
| `database.go` | 不支持 SQLite | 添加 `gorm.io/driver/sqlite` |
| `config.go` | DSN 中 Port 类型转换错误 | 在 database.go 用 `fmt.Sprintf("%d", port)` |
### 技术栈
**后端**
- Go 1.21+ / Gin / GORM
- SQLite (开发环境默认) / MySQL / PostgreSQL (生产可选)
- JWT 认证 / Zap 日志
**前端**
- React 18 + TypeScript + Vite
- Tailwind CSS + shadcn/ui 组件库
- Zustand 状态管理
### 端口分配
| 服务 | 端口 |
|------|------|
| 后端 API | 8080 |
| 前端 Dev Server | 5173 |
### 快速启动
```bash
cd ~/devops/aiops
./run.sh start # 启动前后端
./run.sh status # 查看状态
./run.sh stop # 停止
./run.sh restart # 重启
./run.sh logs # 实时日志
```
访问地址:
- 前端: http://localhost:5173
- 后端: http://localhost:8080
- 健康检查: http://localhost:8080/health
### 数据库
开发环境使用 SQLite,数据库文件位于 `backend/sqlite3.db`,首次启动时 GORM AutoMigrate 自动建表。
## 2026-06-14 02:30 自动推进
- **任务**: 修复仪表盘数据管线 — 补充应用发布种子数据 + 修复 limit 参数解析 bug + LDAP 认证集成 + User 类型完善
- **修改**:
- `backend/internal/api/handlers/dashboard.go` — 修复 GetRecentAlerts 的 limit 参数解析(原代码错误地将数字 limit 解析为日期字符串 `time.Parse("2006-01-02")`),为 GetRecentReleases 添加 limit 参数支持
- `backend/scripts/mock.go` — 新增 generateAppReleases() 生成 10 条应用发布种子数据;修复 AlertEvent 的 rule_id/rule_name/severity 数据一致性(原代码从不同随机规则分别取 id 和 name 导致不匹配)
- `backend/go.mod` / `go.sum` — 添加 github.com/go-ldap/ldap/v3 v3.4.10 依赖(GOTOOLCHAIN=local 避免 Go 1.24+ 工具链升级)
- `backend/cmd/seed.go` — 种子数据初始化(admin 用户 + LDAP 配置,仅首次启动)
- `backend/internal/api/handlers/ldap.go` — LDAP 认证处理器
- `backend/internal/models/user.go` — User model 添加 AuthSource 字段 + LDAPConfig model
- `frontend/src/types/index.ts` — 修复 User 类型定义,添加 real_name/is_admin/auth_source 等字段以匹配后端 API
- 多个前端组件联调优化(暗色主题、API 服务层、组件数据对接)
- **结果**:
- `go build ./...` 编译通过 ✅
- `npm run build` 构建通过 ✅
- 仪表盘「发布历史」区域从空白变为展示 5 条真实发布记录 ✅
- `?limit=N` 参数现在被正确解析 ✅
- 健康检查 /health 正常 ✅
- git push origin master 成功 (commit ff0b268) ✅
- **下一步建议**:
- 服务器管理模块的增删改查前后端联调验证
- K8s 集群监控数据展示(Pod/Deployment/Service 列表页面)
- 告警规则配置页面前端完善
- 成本统计从硬编码改为基于实际云账号数据计算
## 2026-06-14 03:10 自动推进
- **任务**: 完善告警规则配置页面 — 实现增删改查弹窗 + 修复白屏bug + 后端UpdateRule序列化修复
- **修改**:
- `frontend/src/components/monitor/AlertManager.tsx` — 新建/编辑告警规则弹窗(规则名称/描述/类型/数据源/触发表达式/告警级别/持续时间/通知渠道Switch选择); 修复白屏bug(getRules返回{list,total}未解包导致rules.map崩溃); 修复规则列表字段显示(原引用不存在的rule.metric/operator/threshold改为rule.source/expression); 新增规则删除按钮(带确认); 新增parseChannels()统一解析通知渠道
- `backend/internal/api/handlers/alert.go` — 修复UpdateRule的notify_channels序列化bug(原直接赋值[]string到text列导致500错误,改用toJSON()序列化)
- **结果**:
- `go build ./...` 编译通过 ✅
- `npx tsc --noEmit` 类型检查通过 ✅
- `npm run build` 构建通过 ✅
- 告警页面白屏修复 — 页面正常加载,展示6条规则/20条告警事件 ✅
- 创建规则弹窗UI验证通过 — 通过浏览器填表提交,规则数从6增至7 ✅
- CRUD API端到端验证: create→update→delete 全部200 ✅
- git push origin master 成功 (commit 00d5510) ✅
- **下一步建议**:
- K8s 集群监控数据展示(Pod/Deployment/Service 列表页面前后端联调)
- 服务器管理模块增删改查前后端联调验证
- 成本统计从硬编码改为基于实际云账号数据计算
- 告警"通知配置"按钮功能实现(通知渠道管理弹窗)
## 2026-06-14 04:00 自动推进
- **任务**: K8s集群监控数据展示 — 修复集群详情标签数据加载(数组响应未解包bug) + 补充Pod/Deployment/Service/Ingress种子数据 + deployment_count字段
- **修改**:
- `frontend/src/components/k8s/K8sClusters.tsx` — **核心bug修复**: loadClusterDetail 中 Promise.all 的 catch fallback 返回 `{list:[]}` 但后端 ListNodes/ListPods/ListDeployments/ListServices/ListIngresses 返回 data 直接为数组(非{list,total}), 导致 `(res)?.list` 永远 undefined → 所有标签页空白; 改用 `toArray(v)` 兼容数组和对象响应; 修复 Pod 表格字段名(restarts→restart_count, cpu→cpu_usage, memory→memory_usage, node→node_name); 修复状态徽章大小写比较(status='Running' vs 'running')
- `backend/internal/models/k8s.go` — K8sCluster model 添加 DeploymentCount 字段(前端引用 cluster.deployment_count 但 model 缺失)
- `backend/scripts/mock.go` — generateK8sClusters 补充生成 Deployment/Pod/Service/Ingress 种子数据(原仅生成 Cluster+Node)
- `backend/scripts/seed_k8s_resources.go` — 新增独立种子脚本, 为已有集群补充 K8s 资源数据(幂等, 跳过已有 Pod 的集群)
- **结果**:
- `go build ./...` 编译通过 ✅
- `npx tsc --noEmit` 类型检查通过 ✅
- `npm run build` 构建通过 ✅
- 种子数据写入: 4集群 → 20节点 + 80 Pod + 41 Deployment + 29 Service + 14 Ingress ✅
- API 端到端验证: `/k8s-clusters/1/pods` 返回21条Pod数据, 字段名正确(restart_count/node_name等) ✅
- 浏览器验证: 集群卡片显示4集群(含deployment_count), 集群详情标签页计数正确: 节点(10)/Pod(21)/Deployment(6)/Service(8)/Ingress(4) ✅
- 无 console 错误 ✅
- git push origin master 成功 (commit 8d47f8d) ✅
- **下一步建议**:
- 服务器管理模块增删改查前后端联调验证
- 成本统计从硬编码改为基于实际云账号数据计算
- K8s 集群拓扑图(TopologyView)前后端数据联调
- 告警"通知配置"按钮功能实现(通知渠道管理弹窗)
## 2026-06-14 05:15 自动推进
- **任务**: 服务器管理模块前后端字段对齐 — 修复前端表单使用后端不支持的CMDB幽灵字段导致数据丢失 + 内存单位 GB→MB 转换 + 表格列重构
- **修改**:
- `backend/internal/models/server.go` — CreateServerRequest 添加 Status 字段(原硬编码 "stopped")
- `backend/internal/api/handlers/server.go` — CreateServer handler 改用 req.Status 替代硬编码值
- `frontend/src/components/server/ServerManager.tsx` — 完全重写表单/表格/过滤器:
- 移除后端不支持的幽灵字段:asset_type/connect_type/floatingip/instance_id/expire_time/remark/region/region_id
- 表单改为SSH连接导向:主机名/IP/公网IP/SSH端口/登录用户/认证方式(密码/密钥)/密码 + 可折叠详情区(OS/状态/CPU/内存/磁盘/标签/描述)
- 内存字段前端输入GB,提交时 ×1024 转换为MB(后端存储MB)
- 表格列从11列精简到8列,新增公网IP列,移除资产类型/连接方式/区域列
- 移除不存在的区域筛选器(servers 无 region_id 数据)
- 移除未实现的"查看详情"下拉项(无详情页)
- **结果**:
- `go build -o aiops-server cmd/main.go` 编译通过 ✅
- `npx tsc --noEmit` 类型检查通过 ✅
- `npm run build` 构建通过 ✅
- API端到端验证: POST /servers → Code 200,hostname/ip/public_ip/port/username/auth_type/memory(16384MB=16GB)/status/tags 全部正确保存 ✅
- API端到端验证: PUT /servers/:id → Code 200,更新成功 ✅
- API端到端验证: DELETE /servers/:id → Code 200 "删除成功" ✅
- 浏览器UI验证: 服务器列表页正常渲染,内存显示为GB(128GB而非131072MB),公网IP列正确显示 ✅
- 表单UI验证: 添加服务器弹窗字段正确,验证逻辑正常(hostname+ip必填时按钮启用)✅
- 服务运行中: 后端:8080 + 前端:5173 ✅