View datapoint values
This commit is contained in:
parent
5f6a48e7e0
commit
d72694a8b4
14 changed files with 288 additions and 28 deletions
98
main.go
98
main.go
|
|
@ -122,6 +122,7 @@ func main() { // {{{
|
|||
service.Register("/datapoint/edit/{id}", false, false, pageDatapointEdit)
|
||||
service.Register("/datapoint/update/{id}", false, false, pageDatapointUpdate)
|
||||
service.Register("/datapoint/delete/{id}", false, false, pageDatapointDelete)
|
||||
service.Register("/datapoint/values/{id}", false, false, pageDatapointValues)
|
||||
|
||||
service.Register("/triggers", false, false, pageTriggers)
|
||||
service.Register("/trigger/edit/{id}", false, false, pageTriggerEdit)
|
||||
|
|
@ -194,6 +195,8 @@ func entryDatapoint(w http.ResponseWriter, r *http.Request, sess *session.T) { /
|
|||
if err != nil {
|
||||
logger.Error("entry", "error", err)
|
||||
}
|
||||
|
||||
// Multiple triggers can use the same datapoint.
|
||||
for _, trigger := range triggers {
|
||||
var out any
|
||||
out, err = trigger.Run()
|
||||
|
|
@ -204,23 +207,77 @@ func entryDatapoint(w http.ResponseWriter, r *http.Request, sess *session.T) { /
|
|||
}
|
||||
logger.Debug("entry", "datapoint", dpoint, "value", value, "trigger", trigger, "result", out)
|
||||
|
||||
var problemID int
|
||||
switch v := out.(type) {
|
||||
case bool:
|
||||
// Trigger returning true - a problem occurred
|
||||
if v {
|
||||
err = ProblemStart(trigger)
|
||||
problemID, err = ProblemStart(trigger)
|
||||
logger.Info("FOO", "problemID", problemID, "err==nil", err == nil)
|
||||
if err != nil {
|
||||
err = werr.Wrap(err).Log()
|
||||
logger.Error("entry", "error", err)
|
||||
}
|
||||
|
||||
} else {
|
||||
err = ProblemClose(trigger)
|
||||
// A problem didn't occur.
|
||||
problemID, err = ProblemClose(trigger)
|
||||
logger.Info("FOO", "problemID", problemID, "err==nil", err == nil)
|
||||
if err != nil {
|
||||
err = werr.Wrap(err).Log()
|
||||
logger.Error("entry", "error", err)
|
||||
}
|
||||
}
|
||||
|
||||
// Has a change in problem state happened?
|
||||
if problemID == 0 && err == nil {
|
||||
logger.Debug("notification", "trigger", trigger.ID, "state", "no change")
|
||||
continue
|
||||
} else {
|
||||
logger.Debug("notification", "trigger", trigger.ID, "state", "change")
|
||||
}
|
||||
|
||||
err = notificationManager.Send(problemID, []byte(trigger.Name), func(notificationService *notification.Service, err error) {
|
||||
logger.Info(
|
||||
"notification",
|
||||
"service", (*notificationService).GetType(),
|
||||
"problemID", problemID,
|
||||
"prio", (*notificationService).GetPrio(),
|
||||
"ok", true,
|
||||
)
|
||||
|
||||
var errBody any
|
||||
if err != nil {
|
||||
errBody, _ = json.Marshal(err)
|
||||
} else {
|
||||
errBody = nil
|
||||
}
|
||||
_, err = service.Db.Conn.Exec(
|
||||
`
|
||||
INSERT INTO notification_send(notification_id, problem_id, uuid, ok, error)
|
||||
SELECT
|
||||
id, $3, '', $4, $5
|
||||
FROM notification
|
||||
WHERE
|
||||
service=$1 AND
|
||||
prio=$2
|
||||
`,
|
||||
(*notificationService).GetType(),
|
||||
(*notificationService).GetPrio(),
|
||||
problemID,
|
||||
err == nil,
|
||||
errBody,
|
||||
)
|
||||
if err != nil {
|
||||
err = werr.Wrap(err).Log()
|
||||
logger.Error("entry", "error", err)
|
||||
}
|
||||
})
|
||||
if err != nil {
|
||||
err = werr.Wrap(err).Log()
|
||||
logger.Error("notification", "error", err)
|
||||
}
|
||||
|
||||
default:
|
||||
err := fmt.Errorf(`Expression for trigger %s not returning bool (%T)`, trigger.Name, v)
|
||||
logger.Info("entry", "error", err)
|
||||
|
|
@ -519,6 +576,43 @@ func pageDatapointDelete(w http.ResponseWriter, r *http.Request, _ *session.T) {
|
|||
w.Header().Add("Location", "/datapoints")
|
||||
w.WriteHeader(302)
|
||||
} // }}}
|
||||
func pageDatapointValues(w http.ResponseWriter, r *http.Request, _ *session.T) { // {{{
|
||||
idStr := r.PathValue("id")
|
||||
id, err := strconv.Atoi(idStr)
|
||||
if err != nil {
|
||||
httpError(w, werr.Wrap(err).Log())
|
||||
return
|
||||
}
|
||||
|
||||
var datapoint Datapoint
|
||||
datapoint, err = DatapointRetrieve(id, "")
|
||||
if err != nil {
|
||||
httpError(w, werr.Wrap(err).Log())
|
||||
return
|
||||
}
|
||||
|
||||
var values []DatapointValue
|
||||
values, err = DatapointValues(id)
|
||||
if err != nil {
|
||||
httpError(w, werr.Wrap(err).Log())
|
||||
return
|
||||
}
|
||||
|
||||
page := Page{
|
||||
LAYOUT: "main",
|
||||
PAGE: "datapoint_values",
|
||||
MENU: "datapoints",
|
||||
Icon: "datapoints",
|
||||
Label: "Values for "+datapoint.Name,
|
||||
}
|
||||
|
||||
page.Data = map[string]any{
|
||||
"Datapoint": datapoint,
|
||||
"Values": values,
|
||||
}
|
||||
page.Render(w)
|
||||
return
|
||||
} // }}}
|
||||
|
||||
func pageTriggers(w http.ResponseWriter, _ *http.Request, _ *session.T) { // {{{
|
||||
areas, err := TriggersRetrieve()
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue