Fix email template

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.
pull/540/head
Emanuel Bennici 2020-04-27 13:34:31 +02:00
parent e4ed216833
commit 1053be44b0
No known key found for this signature in database
GPG Key ID: 17FA2D56BAD01661
2 changed files with 26 additions and 21 deletions

View File

@ -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

View File

@ -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()
}