From 1053be44b0562deaa434b9be68b9c928f46e87e7 Mon Sep 17 00:00:00 2001 From: Emanuel Bennici Date: Mon, 27 Apr 2020 13:34:31 +0200 Subject: [PATCH 1/2] Fix email template MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The Email notifier was using `map[string]interface{}` to "put" the information (like Service and Failure struct) into the template. The value of a map can only be used with `{{ index . "Service" }}` in a GoLang template. To simplify – and reduce the needed changes – `emailOutgoing` now contains for the `Data` field an extra struct with `Service` and `Failure` fields. This patch fixes #472. --- notifiers/email.go | 30 ++++++++++++++++++++++-------- utils/replacer.go | 17 ++++------------- 2 files changed, 26 insertions(+), 21 deletions(-) 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() } From faa5b96d9e18d8e6051ae14637ca9e4ec669f05b Mon Sep 17 00:00:00 2001 From: Emanuel Bennici Date: Mon, 27 Apr 2020 13:44:12 +0200 Subject: [PATCH 2/2] Add changelog entry --- CHANGELOG.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 48366aba..421a92a0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -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) - Fixed config loading method