提交 23b6cf1a 编写于 作者: U Ulric Qin

fix repeat sender

上级 3babc6c5
...@@ -5,14 +5,15 @@ import ( ...@@ -5,14 +5,15 @@ import (
"github.com/didi/nightingale/v5/src/server/memsto" "github.com/didi/nightingale/v5/src/server/memsto"
) )
func isMuted(event *models.AlertCurEvent) bool { // 如果传入了clock这个可选参数,就表示使用这个clock表示的时间,否则就从event的字段中取TriggerTime
func isMuted(event *models.AlertCurEvent, clock ...int64) bool {
mutes, has := memsto.AlertMuteCache.Gets(event.GroupId) mutes, has := memsto.AlertMuteCache.Gets(event.GroupId)
if !has || len(mutes) == 0 { if !has || len(mutes) == 0 {
return false return false
} }
for i := 0; i < len(mutes); i++ { for i := 0; i < len(mutes); i++ {
if matchMute(event, mutes[i]) { if matchMute(event, mutes[i], clock...) {
return true return true
} }
} }
...@@ -20,8 +21,13 @@ func isMuted(event *models.AlertCurEvent) bool { ...@@ -20,8 +21,13 @@ func isMuted(event *models.AlertCurEvent) bool {
return false return false
} }
func matchMute(event *models.AlertCurEvent, mute *models.AlertMute) bool { func matchMute(event *models.AlertCurEvent, mute *models.AlertMute, clock ...int64) bool {
if event.TriggerTime < mute.Btime || event.TriggerTime > mute.Etime { ts := event.TriggerTime
if len(clock) > 0 {
ts = clock[0]
}
if ts < mute.Btime || ts > mute.Etime {
return false return false
} }
......
...@@ -49,23 +49,16 @@ func repeat() { ...@@ -49,23 +49,16 @@ func repeat() {
event.DB2Mem() event.DB2Mem()
// 重复通知的告警,应该用新的时间来判断是否生效和是否屏蔽, // 重复通知的告警,应该用新的时间来判断是否生效和是否屏蔽,
// 不能使用TriggerTime,因为TriggerTime是触发时的时间, // 不能使用TriggerTime,因为TriggerTime是触发时的时间,是一个比较老的时间
// 先发了告警,又做了屏蔽,本质是不想发了,如果继续用TriggerTime判断 // 先发了告警,又做了屏蔽,本质是不想发了,如果继续用TriggerTime判断,就还是会发,不符合预期
// 就还是会发,不符合预期,所以,这里伪装一下TriggerTime, if isNoneffective(event.NotifyRepeatNext, rule) {
// 判断完了再卸掉伪装
realTriggerTime := event.TriggerTime
event.TriggerTime = event.NotifyRepeatNext
if isNoneffective(event.TriggerTime, rule) {
continue continue
} }
if isMuted(event) { if isMuted(event, event.NotifyRepeatNext) {
continue continue
} }
event.TriggerTime = realTriggerTime
fillUsers(event) fillUsers(event)
notify(event) notify(event)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册