Trigger expression evaluated and problems managed

This commit is contained in:
Magnus Åhall 2024-04-30 21:23:05 +02:00
parent ffe0c3def2
commit b0a0f9290e
3 changed files with 82 additions and 20 deletions

36
main.go
View file

@ -172,10 +172,42 @@ func entryDatapoint(w http.ResponseWriter, r *http.Request, sess *session.T) { /
var triggers []Trigger
triggers, err = TriggersRetrieveByDatapoint(dpoint)
for _, trigger := range triggers {
trigger.Run()
if err != nil {
logger.Error("entry", "error", err)
}
for _, trigger := range triggers {
var out any
out, err = trigger.Run()
if err != nil {
err = we.Wrap(err).Log()
logger.Error("entry", "error", err)
}
logger.Debug("entry", "datapoint", dpoint, "value", value, "trigger", trigger, "result", out)
switch v := out.(type) {
case bool:
// Trigger returning true - a problem occured
if v {
err = ProblemStart(trigger)
if err != nil {
err = we.Wrap(err).Log()
logger.Error("entry", "error", err)
}
} else {
err = ProblemClose(trigger)
if err != nil {
err = we.Wrap(err).Log()
logger.Error("entry", "error", err)
}
}
default:
err := fmt.Errorf(`Expression for trigger %s not returning bool (%T)`, trigger.Name, v)
logger.Info("entry", "error", err)
we.Wrap(err).WithData(v).Log()
}
}
j, _ := json.Marshal(struct{ OK bool }{true})
w.Write(j)