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,18 +155,26 @@ 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{
|
||||||
|
Service: *s,
|
||||||
|
Failure: *f,
|
||||||
|
},
|
||||||
From: e.Var1,
|
From: e.Var1,
|
||||||
}
|
}
|
||||||
return e.dialSend(email)
|
return e.dialSend(email)
|
||||||
|
@ -179,7 +187,10 @@ 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{
|
||||||
|
Service: *s,
|
||||||
|
Failure: failures.Failure{},
|
||||||
|
},
|
||||||
From: e.Var1,
|
From: e.Var1,
|
||||||
}
|
}
|
||||||
return e.dialSend(email)
|
return e.dialSend(email)
|
||||||
|
@ -187,7 +198,7 @@ func (e *emailer) OnSuccess(s *services.Service) error {
|
||||||
|
|
||||||
// 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,7 +217,10 @@ func (e *emailer) OnTest() (string, error) {
|
||||||
To: e.Var2,
|
To: e.Var2,
|
||||||
Subject: subject,
|
Subject: subject,
|
||||||
Template: mainEmailTemplate,
|
Template: mainEmailTemplate,
|
||||||
Data: testService,
|
Data: emailData{
|
||||||
|
Service: testService,
|
||||||
|
Failure: failures.Failure{},
|
||||||
|
},
|
||||||
From: e.Var1,
|
From: e.Var1,
|
||||||
}
|
}
|
||||||
err := e.dialSend(email)
|
err := e.dialSend(email)
|
||||||
|
|
|
@ -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()
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue