func (s *Schedule) notify(st *models.IncidentState, n *conf.Notification) { if len(st.EmailSubject) == 0 { st.EmailSubject = []byte(st.Subject) } if len(st.EmailBody) == 0 { st.EmailBody = []byte(st.Body) } n.Notify(st.Subject, st.Body, st.EmailSubject, st.EmailBody, s.SystemConf, string(st.AlertKey), st.Attachments...) }
func (s *Schedule) executeTemplates(state *models.IncidentState, event *models.Event, a *conf.Alert, r *RunHistory) { if event.Status != models.StUnknown { var errs []error metric := "template.render" //Render subject endTiming := collect.StartTimer(metric, opentsdb.TagSet{"alert": a.Name, "type": "subject"}) subject, err := s.ExecuteSubject(r, a, state, false) if err != nil { slog.Infof("%s: %v", state.AlertKey, err) errs = append(errs, err) } else if subject == nil { err = fmt.Errorf("Empty subject on %s", state.AlertKey) slog.Error(err) errs = append(errs, err) } endTiming() //Render body endTiming = collect.StartTimer(metric, opentsdb.TagSet{"alert": a.Name, "type": "body"}) body, _, err := s.ExecuteBody(r, a, state, false) if err != nil { slog.Infof("%s: %v", state.AlertKey, err) errs = append(errs, err) } else if subject == nil { err = fmt.Errorf("Empty body on %s", state.AlertKey) slog.Error(err) errs = append(errs, err) } endTiming() //Render email body endTiming = collect.StartTimer(metric, opentsdb.TagSet{"alert": a.Name, "type": "emailbody"}) emailbody, attachments, err := s.ExecuteBody(r, a, state, true) if err != nil { slog.Infof("%s: %v", state.AlertKey, err) errs = append(errs, err) } else if subject == nil { err = fmt.Errorf("Empty email body on %s", state.AlertKey) slog.Error(err) errs = append(errs, err) } endTiming() //Render email subject endTiming = collect.StartTimer(metric, opentsdb.TagSet{"alert": a.Name, "type": "emailsubject"}) emailsubject, err := s.ExecuteSubject(r, a, state, true) if err != nil { slog.Infof("%s: %v", state.AlertKey, err) errs = append(errs, err) } else if subject == nil { err = fmt.Errorf("Empty email subject on %s", state.AlertKey) slog.Error(err) errs = append(errs, err) } endTiming() if errs != nil { endTiming = collect.StartTimer(metric, opentsdb.TagSet{"alert": a.Name, "type": "bad"}) subject, body, err = s.ExecuteBadTemplate(errs, r, a, state) endTiming() if err != nil { subject = []byte(fmt.Sprintf("unable to create template error notification: %v", err)) } emailbody = body attachments = nil } state.Subject = string(subject) state.Body = string(body) //don't save email seperately if they are identical if string(state.EmailBody) != state.Body { state.EmailBody = emailbody } if string(state.EmailSubject) != state.Subject { state.EmailSubject = emailsubject } state.Attachments = attachments } }