From dcb5a6cad029935932c90d2736e20366a66eaefb Mon Sep 17 00:00:00 2001 From: liugq Date: Mon, 7 Aug 2023 13:04:31 +0800 Subject: [PATCH] fix silence period not work when there is a channel throw error --- service/alerting/common/helper.go | 4 ++++ service/alerting/elasticsearch/engine.go | 21 ++++++++++----------- 2 files changed, 14 insertions(+), 11 deletions(-) diff --git a/service/alerting/common/helper.go b/service/alerting/common/helper.go index 825b34a1..3feb2c6f 100644 --- a/service/alerting/common/helper.go +++ b/service/alerting/common/helper.go @@ -83,6 +83,10 @@ func RetrieveChannel(ch *alerting.Channel) (*alerting.Channel, error) { if err != nil { return nil, err } + if !refCh.Enabled { + ch.Enabled = false + return ch, nil + } ch.Type = refCh.Type ch.Name = refCh.Name ch.SubType = refCh.SubType diff --git a/service/alerting/elasticsearch/engine.go b/service/alerting/elasticsearch/engine.go index e3fefe67..308e5b7d 100644 --- a/service/alerting/elasticsearch/engine.go +++ b/service/alerting/elasticsearch/engine.go @@ -671,7 +671,7 @@ func (engine *Engine) Do(rule *alerting.Rule) error { if alertMessage != nil && alertMessage.Status != alerting.MessageStateRecovered && !checkResults.QueryResult.Nodata { alertMessage.Status = alerting.MessageStateRecovered alertMessage.ResourceID = rule.Resource.ID - alertMessage.ResourceName= rule.Resource.Name + alertMessage.ResourceName = rule.Resource.Name err = saveAlertMessage(alertMessage) if err != nil { return fmt.Errorf("save alert message error: %w", err) @@ -801,15 +801,13 @@ func (engine *Engine) Do(rule *alerting.Rule) error { } if alertMessage == nil || period > periodDuration { - actionResults, errCount := performChannels(notifyCfg.Normal, paramsCtx) + actionResults, _ := performChannels(notifyCfg.Normal, paramsCtx) alertItem.ActionExecutionResults = actionResults //change and save last notification time in local kv store when action error count equals zero - if errCount == 0 { - rule.LastNotificationTime = time.Now() - strTime := time.Now().UTC().Format(time.RFC3339) - kv.AddValue(alerting2.KVLastNotificationTime, []byte(rule.ID), []byte(strTime)) - alertItem.IsNotified = true - } + rule.LastNotificationTime = time.Now() + strTime := time.Now().UTC().Format(time.RFC3339) + kv.AddValue(alerting2.KVLastNotificationTime, []byte(rule.ID), []byte(strTime)) + alertItem.IsNotified = true } if notifyCfg.EscalationEnabled { @@ -917,6 +915,7 @@ func newParameterCtx(rule *alerting.Rule, checkResults *alerting.ConditionResult alerting2.ParamResourceID: rule.Resource.ID, alerting2.ParamResourceName: rule.Resource.Name, alerting2.ParamResults: conditionParams, + "objects": rule.Resource.Objects, "first_group_value": firstGroupValue, "first_threshold": firstThreshold, "rule_name": rule.Name, @@ -990,14 +989,14 @@ func performChannels(channels []alerting.Channel, ctx map[string]interface{}) ([ var errCount int var actionResults []alerting.ActionExecutionResult for _, channel := range channels { - if !channel.Enabled { - continue - } _, err := common.RetrieveChannel(&channel) if err != nil { log.Error(err) continue } + if !channel.Enabled { + continue + } resBytes, err, messageBytes := common.PerformChannel(&channel, ctx) var errStr string if err != nil {