From d444963fb553eef7fb3c08db14a0ff3ea49c42f0 Mon Sep 17 00:00:00 2001 From: Zexi Li Date: Tue, 9 Dec 2025 18:23:47 +0800 Subject: [PATCH] fix(monitor): meter alert panic --- pkg/monitor/alerting/notifiers/onecloud.go | 15 ++++++++++++--- pkg/monitor/models/meteralert.go | 20 ++++++++++++++------ 2 files changed, 26 insertions(+), 9 deletions(-) diff --git a/pkg/monitor/alerting/notifiers/onecloud.go b/pkg/monitor/alerting/notifiers/onecloud.go index 1f2bc70f6b8..ebc873c8bfd 100644 --- a/pkg/monitor/alerting/notifiers/onecloud.go +++ b/pkg/monitor/alerting/notifiers/onecloud.go @@ -413,9 +413,18 @@ func (oc *OneCloudNotifier) newMeterRemoteMobileContent(config *monitor.Notifica typ = "预算" config.Title = MOBILE_DEFAULT_TOPIC_CN } - customizeConfig := new(monitor.MeterCustomizeConfig) - evalCtx.Rule.CustomizeConfig.Unmarshal(customizeConfig) - return mobileContent(customizeConfig.Name, typ) + var name string + if evalCtx.Rule.CustomizeConfig != nil { + customizeConfig := new(monitor.MeterCustomizeConfig) + if err := evalCtx.Rule.CustomizeConfig.Unmarshal(customizeConfig); err == nil { + name = customizeConfig.Name + } + } + // 兼容旧数据:如果 CustomizeConfig 为 nil 或解析失败,使用 Rule.Name 作为后备值 + if name == "" { + name = evalCtx.Rule.Name + } + return mobileContent(name, typ) } func GetUserLangIdsMap(ids []string) (map[string][]string, error) { diff --git a/pkg/monitor/models/meteralert.go b/pkg/monitor/models/meteralert.go index 6a7b1843ae8..7d0f0563cac 100644 --- a/pkg/monitor/models/meteralert.go +++ b/pkg/monitor/models/meteralert.go @@ -204,10 +204,14 @@ func (f *sMeterDailyFee) ToAlertCreateInput( level string, ) monitor.AlertCreateInput { freq, _ := time.ParseDuration(input.Window) + customizeConfig := monitor.MeterCustomizeConfig{ + Name: f.GetName(), + } ret := monitor.AlertCreateInput{ - Name: f.GetName(), - Level: level, - Frequency: int64(freq / time.Second), + Name: f.GetName(), + Level: level, + Frequency: int64(freq / time.Second), + CustomizeConfig: jsonutils.Marshal(customizeConfig), Settings: GetMeterAlertSetting(input, "account_daily_resfee", "meter_db", allAccountIds, "sumDate"), @@ -235,10 +239,14 @@ func (f *sMeterMonthFee) ToAlertCreateInput( level string, ) monitor.AlertCreateInput { freq, _ := time.ParseDuration(input.Window) + customizeConfig := monitor.MeterCustomizeConfig{ + Name: f.GetName(), + } ret := monitor.AlertCreateInput{ - Name: f.GetName(), - Level: level, - Frequency: int64(freq / time.Second), + Name: f.GetName(), + Level: level, + Frequency: int64(freq / time.Second), + CustomizeConfig: jsonutils.Marshal(customizeConfig), Settings: GetMeterAlertSetting(input, "account_month_resfee", "meter_db", allAccountIds, "sumMonth"),