Skip to content

Commit

Permalink
fix: fix the display of templates
Browse files Browse the repository at this point in the history
* Fixed the display of templates
* Added error display in messages if they could not parse templates
  • Loading branch information
Nikolay committed Aug 14, 2020
1 parent a898c2c commit 7fe6f28
Show file tree
Hide file tree
Showing 6 changed files with 56 additions and 20 deletions.
6 changes: 4 additions & 2 deletions api/dto/triggers.go
Original file line number Diff line number Diff line change
Expand Up @@ -176,10 +176,12 @@ func (trigger *Trigger) Bind(request *http.Request) error {
return api.ErrInvalidRequestContent{ValidationError: fmt.Errorf("pattern \"*\" is not allowed to use")}
}
}

middleware.SetTimeSeriesNames(request, metricsDataNames)
if _, err := triggerExpression.Evaluate(); err != nil {
return err
}

return nil
}

Expand Down Expand Up @@ -314,15 +316,15 @@ func (*Trigger) Render(w http.ResponseWriter, r *http.Request) error {
return nil
}

func (trigger *Trigger) PopulatedDescription(events moira.NotificationEvents) *api.ErrorResponse {
func (trigger *Trigger) PopulatedDescription(events moira.NotificationEvents) error {
if trigger.Desc == nil {
return nil
}

templatingEvents := moira.NotificationEventsToTemplatingEvents(events)
description, err := templating.Populate(trigger.Name, *trigger.Desc, templatingEvents)
if err != nil {
return api.ErrorRender(fmt.Errorf("you have an error in your Go template: %v", err))
return fmt.Errorf("you have an error in your Go template: %v", err)
}

*trigger.Desc = description
Expand Down
47 changes: 33 additions & 14 deletions api/handler/trigger.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@ import (

"github.com/go-chi/chi"
"github.com/go-chi/render"
"github.com/moira-alert/moira"
"github.com/moira-alert/moira/metric_source/local"
"github.com/moira-alert/moira/metric_source/remote"

Expand Down Expand Up @@ -54,11 +53,10 @@ func updateTrigger(writer http.ResponseWriter, request *http.Request) {
render.Render(writer, request, api.ErrorInternalServer(err))
}

return
}
if err := checkingTemplateFilling(request, *trigger); err != nil {
render.Render(writer, request, err)
}

if err := trigger.PopulatedDescription(moira.NotificationEvents{}); err != nil {
render.Render(writer, request, err)
return
}

Expand Down Expand Up @@ -95,22 +93,43 @@ func getTrigger(writer http.ResponseWriter, request *http.Request) {
return
}

if middleware.GetPopulated(request) {
eventsList, err := controller.GetTriggerEvents(database, triggerID, 0, 3)
if err != nil {
middleware.GetLoggerEntry(request).Warning(err)
}

if err := trigger.PopulatedDescription(eventsList.List); err != nil {
middleware.GetLoggerEntry(request).Warning(err)
}
if err := checkingTemplateFilling(request, *trigger); err != nil {
middleware.GetLoggerEntry(request).Warning(err)
}

//if middleware.GetPopulated(request) {
// eventsList, err := controller.GetTriggerEvents(database, triggerID, 0, 3)
// if err != nil {
// middleware.GetLoggerEntry(request).Warning(err)
// }
//
// if err := trigger.PopulatedDescription(eventsList.List); err != nil {
// middleware.GetLoggerEntry(request).Warning(err)
// }
//}

if err := render.Render(writer, request, trigger); err != nil {
render.Render(writer, request, api.ErrorRender(err))
}
}

func checkingTemplateFilling(request *http.Request, trigger dto.Trigger) *api.ErrorResponse {
if !middleware.GetPopulated(request) {
return nil
}

eventsList, err := controller.GetTriggerEvents(database, trigger.ID, 0, 3)
if err != nil {
return err
}

if err := trigger.PopulatedDescription(eventsList.List); err != nil {
return api.ErrorRender(err)
}

return nil
}

func getTriggerState(writer http.ResponseWriter, request *http.Request) {
triggerID := middleware.GetTriggerID(request)
triggerState, err := controller.GetTriggerLastCheck(database, triggerID)
Expand Down
9 changes: 9 additions & 0 deletions api/handler/triggers.go
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,15 @@ func createTrigger(writer http.ResponseWriter, request *http.Request) {
}
return
}

if trigger.Desc != nil {
err := trigger.PopulatedDescription(moira.NotificationEvents{{}})
if err != nil {
render.Render(writer, request, api.ErrorRender(err))
return
}
}

timeSeriesNames := middleware.GetTimeSeriesNames(request)
response, err := controller.CreateTrigger(database, &trigger.TriggerModel, timeSeriesNames)
if err != nil {
Expand Down
5 changes: 5 additions & 0 deletions datatypes.go
Original file line number Diff line number Diff line change
Expand Up @@ -109,6 +109,11 @@ type NotificationEvents []NotificationEvent

func (trigger *TriggerData) PopulatedDescription(events NotificationEvents) error {
description, err := templating.Populate(trigger.Name, trigger.Desc, NotificationEventsToTemplatingEvents(events))
if err != nil {
description = "Your description is using the wrong template. Since we were unable to populate your template with " +
"data, we return it so you can parse it.\n\n"+trigger.Desc
}

trigger.Desc = description

return err
Expand Down
2 changes: 1 addition & 1 deletion notifier/notifier.go
Original file line number Diff line number Diff line change
Expand Up @@ -175,7 +175,7 @@ func (notifier *StandardNotifier) runSender(sender moira.Sender, ch chan Notific

err = pkg.Trigger.PopulatedDescription(pkg.Events)
if err != nil {
notifier.logger.Warningf("Error populate description: %v", err)
notifier.logger.Warningf("Error populate description:\n%v", err)
}

err = sender.SendEvents(pkg.Events, pkg.Contact, pkg.Trigger, plots, pkg.Throttled)
Expand Down
7 changes: 4 additions & 3 deletions templating/templating.go
Original file line number Diff line number Diff line change
Expand Up @@ -47,11 +47,12 @@ func Populate(name, description string, events []Event) (desc string, err error)
defer func() {
if errRecover := recover(); errRecover != nil {
desc = description
err = fmt.Errorf("%v, Trigger name: %s, desc: %s, events:%#v", err, name, description, events)
err = fmt.Errorf("PANIC in populate: %v, Trigger name: %s, desc: %s, events:%#v",
err, name, description, events)
}
}()

buffer := new(bytes.Buffer)
buffer := bytes.Buffer{}
funcMap := template.FuncMap{
"date": date,
"formatDate": formatDate,
Expand All @@ -68,7 +69,7 @@ func Populate(name, description string, events []Event) (desc string, err error)
return description, err
}

err = triggerTemplate.Execute(buffer, dataToExecute)
err = triggerTemplate.Execute(&buffer, dataToExecute)
if err != nil {
return description, err
}
Expand Down

0 comments on commit 7fe6f28

Please sign in to comment.