# 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)前后端数据联调 - 告警"通知配置"按钮功能实现(通知渠道管理弹窗)