package models import "time" // AuditLog 操作审计日志。 // // 设计参考 /usr/local/src/aiops 的 audit_operation_logs(字段口径一致, // 便于两套运维工具链用同一套查询习惯与看板),差异有两点: // // 1. 多了 Method / Path / Before / After —— aiops 用 gorm 表,LokiStack 用 JSON 文件, // 没法靠 SQL 关联,所以把"改了什么"直接落到行上,查询时不用再回表。 // 2. 不做 Response 全量落盘(Loki 日志响应动辄几百 KB,会撑爆 JSON DB), // 只留 Detail 摘要 + 结构化 diff。 // // 敏感字段(password / secretKey / privateKey / token)在写入前统一脱敏, // 见 middleware.MaskAuditPayload。 type AuditLog struct { ID uint `json:"id"` UserID uint `json:"userId"` Username string `json:"username"` Role string `json:"role,omitempty"` IP string `json:"ip"` // UserAgent 截断到 200 字符,避免个别客户端把 DB 撑大 UserAgent string `json:"userAgent,omitempty"` // Module 业务模块:deployment / collector / storage / host / cluster / user / policy / alert / system / auth Module string `json:"module"` // Action 动作:create / update / delete / deploy / install / uninstall / login / logout / test / reset Action string `json:"action"` // Resource 资源类型(中文可读名,如「部署」「采集器」) Resource string `json:"resource"` // ResourceID 资源 ID 或名称 ResourceID string `json:"resourceId,omitempty"` Method string `json:"method"` Path string `json:"path"` Status int `json:"status"` // DurationMs 处理耗时(毫秒) DurationMs int64 `json:"durationMs"` // Detail 人类可读的一句话说明(如「修改保留天数 7 → 3」) Detail string `json:"detail,omitempty"` // Before / After 变更前后摘要(仅记录变更字段,已脱敏) Before string `json:"before,omitempty"` After string `json:"after,omitempty"` // Error 失败原因(status >= 400 时填) Error string `json:"error,omitempty"` CreatedAt time.Time `json:"createdAt"` } // AuditQuery 审计日志查询条件 type AuditQuery struct { Username string Module string Action string ResourceID string // Status 0 = 全部;1 = 仅成功(2xx);2 = 仅失败(>=400) Status int StartTime *time.Time EndTime *time.Time Page int PageSize int } // AuditStats 审计统计(给审计页面顶部卡片用) type AuditStats struct { TodayCount int64 `json:"todayCount"` WeekCount int64 `json:"weekCount"` FailCount int64 `json:"failCount"` TotalCount int64 `json:"totalCount"` TopModules []AuditCount `json:"topModules"` TopUsers []AuditCount `json:"topUsers"` } // AuditCount 分组计数 type AuditCount struct { Name string `json:"name"` Count int64 `json:"count"` }