Merge pull request #540 from statping/bugfix/472_alert-mail-incomplete

Fix Mail notification Template
pull/548/head
Hunter Long 2020-04-28 05:01:55 -07:00 committed by GitHub
commit 4ec739845c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 29 additions and 21 deletions

View File

@ -1,3 +1,6 @@
# Upcoming
- Added missing information to Mail notification ([#472](https://github.com/statping/statping/issues/472))
# 0.90.33 (04-24-2020) # 0.90.33 (04-24-2020)
- Fixed config loading method - Fixed config loading method

View File

@ -155,19 +155,27 @@ type emailOutgoing struct {
Subject string Subject string
Template string Template string
From string From string
Data interface{} Data emailData
Source string Source string
Sent bool Sent bool
} }
type emailData struct {
Service services.Service
Failure failures.Failure
}
// OnFailure will trigger failing service // OnFailure will trigger failing service
func (e *emailer) OnFailure(s *services.Service, f *failures.Failure) error { func (e *emailer) OnFailure(s *services.Service, f *failures.Failure) error {
email := &emailOutgoing{ email := &emailOutgoing{
To: e.Var2, To: e.Var2,
Subject: fmt.Sprintf("Service %v is Failing", s.Name), Subject: fmt.Sprintf("Service %v is Failing", s.Name),
Template: mainEmailTemplate, Template: mainEmailTemplate,
Data: ToMap(s, f), Data: emailData{
From: e.Var1, Service: *s,
Failure: *f,
},
From: e.Var1,
} }
return e.dialSend(email) return e.dialSend(email)
} }
@ -179,15 +187,18 @@ func (e *emailer) OnSuccess(s *services.Service) error {
To: e.Var2, To: e.Var2,
Subject: msg, Subject: msg,
Template: mainEmailTemplate, Template: mainEmailTemplate,
Data: ToMap(s, nil), Data: emailData{
From: e.Var1, Service: *s,
Failure: failures.Failure{},
},
From: e.Var1,
} }
return e.dialSend(email) return e.dialSend(email)
} }
// OnTest triggers when this notifier has been saved // OnTest triggers when this notifier has been saved
func (e *emailer) OnTest() (string, error) { func (e *emailer) OnTest() (string, error) {
testService := &services.Service{ testService := services.Service{
Id: 1, Id: 1,
Name: "Example Service", Name: "Example Service",
Domain: "https://www.youtube.com/watch?v=-u6DvRyyKGU", Domain: "https://www.youtube.com/watch?v=-u6DvRyyKGU",
@ -206,8 +217,11 @@ func (e *emailer) OnTest() (string, error) {
To: e.Var2, To: e.Var2,
Subject: subject, Subject: subject,
Template: mainEmailTemplate, Template: mainEmailTemplate,
Data: testService, Data: emailData{
From: e.Var1, Service: testService,
Failure: failures.Failure{},
},
From: e.Var1,
} }
err := e.dialSend(email) err := e.dialSend(email)
return subject, err return subject, err

View File

@ -2,32 +2,23 @@ package utils
import ( import (
"bytes" "bytes"
"fmt"
"text/template" "text/template"
) )
func ReplaceTemplate(tmpl string, data interface{}) string { func ReplaceTemplate(tmpl string, data interface{}) string {
buf := new(bytes.Buffer) buf := new(bytes.Buffer)
var varStr string
switch fmt.Sprintf("%T", data) {
case "*services.Service":
varStr = "Service"
case "*failures.Failure":
varStr = "Failure"
default:
varStr = "Object"
}
injectVars := make(map[string]interface{})
injectVars[varStr] = data
slackTemp, err := template.New("replacement").Parse(tmpl) slackTemp, err := template.New("replacement").Parse(tmpl)
if err != nil { if err != nil {
Log.Error(err) Log.Error(err)
return err.Error() return err.Error()
} }
err = slackTemp.Execute(buf, injectVars)
err = slackTemp.Execute(buf, data)
if err != nil { if err != nil {
Log.Error(err) Log.Error(err)
return err.Error() return err.Error()
} }
return buf.String() return buf.String()
} }