Added nodata code
This commit is contained in:
parent
b22e99a072
commit
1185ebd030
5 changed files with 137 additions and 19 deletions
75
nodata.go
Normal file
75
nodata.go
Normal file
|
|
@ -0,0 +1,75 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
// External
|
||||
werr "git.gibonuddevalla.se/go/wrappederror"
|
||||
|
||||
// Standard
|
||||
"database/sql"
|
||||
"time"
|
||||
)
|
||||
|
||||
// nodataLoop checks if datapoint last_value is larger than the nodata_problem_seconds period and
|
||||
// marks them as problems. They are then notified.
|
||||
func nodataLoop() {
|
||||
var ids []int
|
||||
var err error
|
||||
|
||||
// TODO - should be configurable
|
||||
ticker := time.NewTicker(time.Second * 5)
|
||||
for {
|
||||
<-ticker.C
|
||||
ids, err = nodataDatapointIDs()
|
||||
if err != nil {
|
||||
err = werr.Wrap(err).Log()
|
||||
logger.Error("nodata", "error", err)
|
||||
continue
|
||||
}
|
||||
|
||||
if len(ids) == 0 {
|
||||
continue
|
||||
}
|
||||
|
||||
logger.Info("nodata", "problem_ids", ids)
|
||||
}
|
||||
}
|
||||
|
||||
func nodataDatapointIDs() (ids []int, err error) {
|
||||
ids = []int{}
|
||||
|
||||
var rows *sql.Rows
|
||||
rows, err = service.Db.Conn.Query(`
|
||||
UPDATE datapoint
|
||||
SET
|
||||
nodata_is_problem = true
|
||||
FROM (
|
||||
SELECT
|
||||
id
|
||||
FROM
|
||||
datapoint
|
||||
WHERE
|
||||
NOT nodata_is_problem AND
|
||||
extract(EPOCH from (NOW() - last_value))::int > nodata_problem_seconds
|
||||
) AS subquery
|
||||
WHERE
|
||||
datapoint.id = subquery.id
|
||||
RETURNING
|
||||
datapoint.id
|
||||
|
||||
`)
|
||||
if err != nil {
|
||||
err = werr.Wrap(err)
|
||||
return
|
||||
}
|
||||
defer rows.Close()
|
||||
|
||||
var id int
|
||||
for rows.Next() {
|
||||
if err = rows.Scan(&id); err != nil {
|
||||
err = werr.Wrap(err)
|
||||
return
|
||||
}
|
||||
ids = append(ids, id)
|
||||
}
|
||||
return
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue