smon/problem.go
2024-04-30 21:23:05 +02:00

57 lines
1.1 KiB
Go

package main
import (
// External
we "git.gibonuddevalla.se/go/wrappederror"
// Standard
"database/sql"
)
/*
type Problem struct {
ID int
Name string
SectionID int
Expression string
DatapointNames []string
}
*/
func ProblemStart(trigger Trigger) (err error) {
row := service.Db.Conn.QueryRow(`
SELECT COUNT(id)
FROM problem
WHERE
trigger_id = $1 AND
"end" IS NULL
GROUP BY trigger_id
`,
trigger.ID,
)
var openProblems int
err = row.Scan(&openProblems)
if err != nil && err != sql.ErrNoRows {
err = we.Wrap(err).WithData(trigger.ID)
return
}
// Open up a new problem if no open exists.
if openProblems == 0 {
_, err = service.Db.Conn.Exec(`INSERT INTO problem(trigger_id) VALUES($1)`, trigger.ID)
if err != nil {
err = we.Wrap(err).WithData(trigger)
}
}
return
}
func ProblemClose(trigger Trigger) (err error) {
_, err = service.Db.Conn.Exec(`UPDATE problem SET "end"=NOW() WHERE trigger_id=$1 AND "end" IS NULL`, trigger.ID)
if err != nil {
err = we.Wrap(err).WithData(trigger)
return
}
return
}