diff --git a/notifiers/email.go b/notifiers/email.go index 3d8f058e..5caa99ce 100644 --- a/notifiers/email.go +++ b/notifiers/email.go @@ -155,19 +155,27 @@ type emailOutgoing struct { Subject string Template string From string - Data interface{} + Data emailData Source string Sent bool } +type emailData struct { + Service services.Service + Failure failures.Failure +} + // OnFailure will trigger failing service func (e *emailer) OnFailure(s *services.Service, f *failures.Failure) error { email := &emailOutgoing{ To: e.Var2, Subject: fmt.Sprintf("Service %v is Failing", s.Name), Template: mainEmailTemplate, - Data: ToMap(s, f), - From: e.Var1, + Data: emailData{ + Service: *s, + Failure: *f, + }, + From: e.Var1, } return e.dialSend(email) } @@ -179,15 +187,18 @@ func (e *emailer) OnSuccess(s *services.Service) error { To: e.Var2, Subject: msg, Template: mainEmailTemplate, - Data: ToMap(s, nil), - From: e.Var1, + Data: emailData{ + Service: *s, + Failure: failures.Failure{}, + }, + From: e.Var1, } return e.dialSend(email) } // OnTest triggers when this notifier has been saved func (e *emailer) OnTest() (string, error) { - testService := &services.Service{ + testService := services.Service{ Id: 1, Name: "Example Service", Domain: "https://www.youtube.com/watch?v=-u6DvRyyKGU", @@ -206,8 +217,11 @@ func (e *emailer) OnTest() (string, error) { To: e.Var2, Subject: subject, Template: mainEmailTemplate, - Data: testService, - From: e.Var1, + Data: emailData{ + Service: testService, + Failure: failures.Failure{}, + }, + From: e.Var1, } err := e.dialSend(email) return subject, err diff --git a/utils/replacer.go b/utils/replacer.go index 4e895077..e4a15a3c 100644 --- a/utils/replacer.go +++ b/utils/replacer.go @@ -2,32 +2,23 @@ package utils import ( "bytes" - "fmt" "text/template" ) func ReplaceTemplate(tmpl string, data interface{}) string { 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) if err != nil { Log.Error(err) return err.Error() } - err = slackTemp.Execute(buf, injectVars) + + err = slackTemp.Execute(buf, data) if err != nil { Log.Error(err) return err.Error() } + return buf.String() }