mirror of https://github.com/statping/statping
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
parent
e4ed216833
commit
1053be44b0
|
@ -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
|
||||
|
|
|
@ -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()
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue