func HandleCallback(event *model.Event, action *api.Action) { teams := action.Uic phones := []string{} mails := []string{} if teams != "" { phones, mails = api.ParseTeams(teams) smsContent := GenerateSmsContent(event) mailContent := GenerateMailContent(event) if action.BeforeCallbackSms == 1 { redis.WriteSms(phones, smsContent) } if action.BeforeCallbackMail == 1 { redis.WriteMail(mails, smsContent, mailContent) } } message := Callback(event, action) if teams != "" { if action.AfterCallbackSms == 1 { redis.WriteSms(phones, message) } if action.AfterCallbackMail == 1 { redis.WriteMail(mails, message, message) } } }
func combineSms() { dtos := popAllSmsDto() count := len(dtos) if count == 0 { return } dtoMap := make(map[string][]*SmsDto) for i := 0; i < count; i++ { key := fmt.Sprintf("%d%s%s%s", dtos[i].Priority, dtos[i].Status, dtos[i].Phone, dtos[i].Metric) if _, ok := dtoMap[key]; ok { dtoMap[key] = append(dtoMap[key], dtos[i]) } else { dtoMap[key] = []*SmsDto{dtos[i]} } } for _, arr := range dtoMap { size := len(arr) if size == 1 { redi.WriteSms([]string{arr[0].Phone}, arr[0].Content) continue } // 把多个sms内容写入数据库,只给用户提供一个链接 contentArr := make([]string, size) for i := 0; i < size; i++ { contentArr[i] = arr[i].Content } content := strings.Join(contentArr, ",,") first := arr[0].Content t := strings.Split(first, "][") eg := "" if len(t) >= 3 { eg = t[2] } path, err := api.LinkToSMS(content) sms := "" if err != nil || path == "" { sms = fmt.Sprintf("[P%d][%s] %d %s. e.g. %s detail in email", arr[0].Priority, arr[0].Status, size, arr[0].Metric, eg) log.Println("get link fail", err) } else { links := g.Config().Api.Links sms = fmt.Sprintf("[P%d][%s] %d %s e.g. %s %s/%s ", arr[0].Priority, arr[0].Status, size, arr[0].Metric, eg, links, path) } redi.WriteSms([]string{arr[0].Phone}, sms) } }
// 高优先级的不做报警合并 func consumeHighEvents(event *model.Event, action *api.Action) { if action.Uic == "" { return } phones, mails := api.ParseTeams(action.Uic) smsContent := GenerateSmsContent(event) mailContent := GenerateMailContent(event) if event.Priority() < 3 { redis.WriteSms(phones, smsContent) } redis.WriteMail(mails, smsContent, mailContent) }