From 91a1eba2cfcb55c719d38088684a9b10c388bde9 Mon Sep 17 00:00:00 2001 From: lucas Date: Mon, 1 Sep 2025 09:32:29 +0800 Subject: [PATCH] =?UTF-8?q?update=20=E9=87=8D=E6=96=B0=E5=A4=84=E7=90=86?= =?UTF-8?q?=E5=8E=86=E5=8F=B2=E5=91=8A=E8=AD=A6=E5=88=A4=E6=96=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- consumers/consumerAxySkAlarm.go | 47 ++++++++++++++++++++++----------- 1 file changed, 31 insertions(+), 16 deletions(-) diff --git a/consumers/consumerAxySkAlarm.go b/consumers/consumerAxySkAlarm.go index f177619..55d22e1 100644 --- a/consumers/consumerAxySkAlarm.go +++ b/consumers/consumerAxySkAlarm.go @@ -207,22 +207,9 @@ func (the *consumerAxySkAlarm) judgeSK() string { trigger.StructId, trigger.FactorId, level) onceTriggerStationAlarmMap[sid] = conditionStr //判断历史有没有 - hisK := fmt.Sprintf("%s_%s", sid, fmt.Sprintf("3077000%d", level)) - if hv, ok := the.historyStationAlarmMap[hisK]; ok { - if hv.AlarmLevel < level { //低等级告警过滤 - log.Printf("测点[%s]本次触发 level=[%d] > 历史有效等级%d,不再重复触发", sid, level, hv.AlarmLevel) - continue - } - - if !alarmTime.After(hv.Time) { - log.Printf("测点[%s]本次触发时刻[%s]level=%d 对比历史有效时刻[%s]level=%d 非新", sid, - alarmTime.Format("2006-01-02 15:04:05"), - level, - hv.Time.Format("2006-01-02 15:04:05"), - hv.AlarmLevel, - ) - continue - } + isHisAlarm, hisK := the.isHistoryAlarm(sid, level, alarmTime) + if isHisAlarm { + continue } //纪录历史告警 log.Printf("trigger.Id=%d, 测点[%s]本次触发双控,%s,时刻[%s]level=%d", trigger.Id, sid, hisK, alarmTime.Format("2006-01-02 15:04:05"), level) @@ -252,6 +239,34 @@ func (the *consumerAxySkAlarm) judgeSK() string { return "" } +func (the *consumerAxySkAlarm) isHistoryAlarm(sourceId string, level int, alarmTime time.Time) (bool, string) { + //特别注意 告警进程:产生一级后,后续触发二级 也会算到一级头上,所有双控产生二级 如果二级不存在 要往上高等级判断 + rawK := fmt.Sprintf("%s_%s", sourceId, fmt.Sprintf("3077000%d", level)) + for i := level; i >= 1; i-- { + hisK := fmt.Sprintf("%s_%s", sourceId, fmt.Sprintf("3077000%d", i)) + if hv, ok := the.historyStationAlarmMap[hisK]; ok { + if !alarmTime.After(hv.Time) { + log.Printf("测点[%s]本次触发时刻[%s]%s(实际es=%s) 对比历史有效时刻[%s] 非新", + sourceId, + alarmTime.Format("2006-01-02 15:04:05"), + rawK, + hisK, + hv.Time.Format("2006-01-02 15:04:05"), + ) + continue + } + + if hv.AlarmLevel < level { //低等级告警过滤 + log.Printf("测点[%s]本次触发 %s(实际es=%s) > 历史有效等级%d,不再重复触发", sourceId, rawK, hisK, hv.AlarmLevel) + continue + } + return true, hisK + } + } + + return false, rawK +} + func (the *consumerAxySkAlarm) skAlarmInfo(alarmInfoTemplate *models.EsAlarm, level int, detail string, alarmTime time.Time, triggerTypeCodes []string) []byte { alarmMsg := models.KafkaAlarm{ MessageMode: "AlarmGeneration",