package controllers import ( "github.com/gin-gonic/gin" "lokistack/services" "lokistack/utils" ) // SystemController 系统级运维操作:备份 / 恢复 / 巡检。 type SystemController struct{} func NewSystemController() *SystemController { return &SystemController{} } // Backup 导出当前平台数据(tar.gz 下载)。 // // 内容:数据文件 + kubeconfigs/ + known_hosts/ + manifest.json(含密钥指纹), // Restore 上传备份包:校验 + 暂存,**不直接覆盖**线上数据库。 // GetRetention 读取平台数据保留期(告警发送历史 / 审计日志)。 func (ctrl *SystemController) GetRetention(c *gin.Context) { utils.Success(c, services.GetRetentionSettings()) } // SaveRetention 保存平台数据保留期。 // 校验范围而不是直接接受:保留 0 天等于"什么都不留",通常是误操作。 func (ctrl *SystemController) SaveRetention(c *gin.Context) { var req services.RetentionSettings if !utils.BindAndValidate(c, &req) { return } if err := services.SaveRetentionSettings(req.AlertDeliveryDays, req.AuditLogDays); err != nil { utils.BadRequest(c, err.Error()) return } utils.Success(c, services.GetRetentionSettings()) } // Health 平台自检:一键诊断用。 // 聚合「能不能用」的判断,避免排障时在多个页面之间跳。 func (ctrl *SystemController) Health(c *gin.Context) { utils.Success(c, services.SelfCheck()) } // LicenseStatus 当前授权(登录即可见:前端按 plan 显示锁/引导) func (ctrl *SystemController) LicenseStatus(c *gin.Context) { lic := services.CurrentLicense() utils.Success(c, gin.H{ "license": lic.Sanitized(), "pro": lic != nil, "features": services.ProFeatureList(), }) } // ActivateLicense 激活许可码(admin) func (ctrl *SystemController) ActivateLicense(c *gin.Context) { var req struct { Key string `json:"key" binding:"required"` } if !utils.BindAndValidate(c, &req) { return } lic, err := services.ActivateLicense(req.Key) if err != nil { utils.Error(c, 400, err.Error()) return } utils.Success(c, lic.Sanitized()) }