feat: 报警规则支持绑定触发任务

This commit is contained in:
Akkia
2022-09-14 11:14:23 +08:00
parent ceb1b74834
commit 13d1be59b6
4 changed files with 73 additions and 18 deletions

View File

@@ -162,6 +162,7 @@ func checkStatus() {
message := fmt.Sprintf("[%s] %s(%s) %s", Localizer.MustLocalize(&i18n.LocalizeConfig{
MessageID: "Incident",
}), server.Name, IPDesensitize(server.Host.IP), alert.Name)
go SendTriggerTasks(alert.FailTriggerTasks, curServer.ID)
go SendNotification(alert.NotificationTag, message, true, &curServer)
}
} else {
@@ -170,6 +171,7 @@ func checkStatus() {
message := fmt.Sprintf("[%s] %s(%s) %s", Localizer.MustLocalize(&i18n.LocalizeConfig{
MessageID: "Resolved",
}), server.Name, IPDesensitize(server.Host.IP), alert.Name)
go SendTriggerTasks(alert.RecoverTriggerTasks, curServer.ID)
go SendNotification(alert.NotificationTag, message, true, &curServer)
}
alertsPrevState[alert.ID][server.ID] = _RuleCheckPass

View File

@@ -35,6 +35,7 @@ func LoadCronTasks() {
for i := 0; i < len(crons); i++ {
// 触发任务类型无需注册
if crons[i].TaskType == model.CronTypeTriggerTask {
Crons[crons[i].ID] = &crons[i]
continue
}
// 旧版本计划任务可能不存在通知组 为其添加默认通知组
@@ -68,6 +69,22 @@ func ManualTrigger(c model.Cron) {
CronTrigger(c)()
}
func SendTriggerTasks(taskIDs []uint64, triggerServer uint64) {
CronLock.RLock()
var cronLists []*model.Cron
for _, taskID := range taskIDs {
if c, ok := Crons[taskID]; ok {
cronLists = append(cronLists, c)
}
}
CronLock.RUnlock()
// 依次调用CronTrigger发送任务
for _, c := range cronLists {
go CronTrigger(*c, triggerServer)()
}
}
func CronTrigger(cr model.Cron, triggerServer ...uint64) func() {
crIgnoreMap := make(map[uint64]bool)
for j := 0; j < len(cr.Servers); j++ {
@@ -76,7 +93,7 @@ func CronTrigger(cr model.Cron, triggerServer ...uint64) func() {
return func() {
if cr.Cover == model.CronCoverSelf {
if len(triggerServer) == 0 {
log.Println("触发任务未指定触发服务器")
log.Println("触发任务", cr.Name, "未指定触发服务器")
return
}
ServerLock.RLock()