fix(ops-cleanup): 让 UI 数据保留策略真正生效
UI 上 admin 改的数据保留策略(cron + retention 天数)此前只写入 settings 表的 ops_advanced_settings.data_retention,但 OpsCleanupService 启动时只读 cfg.Ops.Cleanup(config.yaml / 环境变量),从未读取 settings 表,导致 UI 配置 完全不生效——cron 实际仍按默认 0 2 * * * 每日跑、retention 30 天。 改动: - OpsCleanupService 增加 settingRepo 依赖,新增 effective 配置 + Reload 方法。 Start/Reload 时从 settings.ops_advanced_settings.data_retention 覆盖 cfg.Ops.Cleanup(Enabled、Schedule、*RetentionDays),无 settings 时整体 fallback 到 cfg。runScheduled 顶部刷新一次 effective,让 retention 改动当次 即生效(schedule/enabled 改动需要 Reload 才换 cron)。 - 用 mu + started/stopped 替换 startOnce/stopOnce 以支持 Reload 重建 cron。 - OpsService 增加 CleanupReloader 接口与 SetCleanupReloader setter; UpdateOpsAdvancedSettings 写入后调用 Reload。 - wire 通过 setter 注入 cleanup hook,避免构造期循环依赖。 - 新增单测覆盖 overlay 五种情形 + Update 触发 Reload。
This commit is contained in:
@@ -271,15 +271,22 @@ func ProvideOpsAlertEvaluatorService(
|
||||
// ProvideOpsCleanupService creates and starts OpsCleanupService (cron scheduled).
|
||||
// channelMonitorSvc 让维护任务(聚合 + 历史/聚合软删)跟随 ops 清理 cron 一起跑,
|
||||
// 共享 leader lock + heartbeat。
|
||||
// settingRepo 让 cleanup service 自己读 ops_advanced_settings.data_retention 覆盖 cfg;
|
||||
// opsService 用来反向注入 cleanup hook,以便 UI 改清理设置时能 Reload cron。
|
||||
func ProvideOpsCleanupService(
|
||||
opsRepo OpsRepository,
|
||||
db *sql.DB,
|
||||
redisClient *redis.Client,
|
||||
cfg *config.Config,
|
||||
channelMonitorSvc *ChannelMonitorService,
|
||||
settingRepo SettingRepository,
|
||||
opsService *OpsService,
|
||||
) *OpsCleanupService {
|
||||
svc := NewOpsCleanupService(opsRepo, db, redisClient, cfg, channelMonitorSvc)
|
||||
svc := NewOpsCleanupService(opsRepo, db, redisClient, cfg, channelMonitorSvc, settingRepo)
|
||||
svc.Start()
|
||||
if opsService != nil {
|
||||
opsService.SetCleanupReloader(svc)
|
||||
}
|
||||
return svc
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user