Added nodata code

This commit is contained in:
Magnus Åhall 2024-05-25 09:40:40 +02:00
parent b22e99a072
commit 1185ebd030
5 changed files with 137 additions and 19 deletions

View file

@ -21,14 +21,16 @@ const (
)
type Datapoint struct {
ID int
Group string
Name string
Datatype DatapointType
LastValue time.Time `db:"last_value"`
DatapointValueJSON []byte `db:"datapoint_value_json"`
LastDatapointValue DatapointValue
Found bool
ID int
Group string
Name string
Datatype DatapointType
LastValue time.Time `db:"last_value"`
DatapointValueJSON []byte `db:"datapoint_value_json"`
LastDatapointValue DatapointValue
Found bool
NodataProblemSeconds int `db:"nodata_problem_seconds"`
NodataIsProblem bool `db:"nodata_is_problem"`
}
type DatapointValue struct {
@ -56,13 +58,13 @@ func (dp DatapointValue) Value() any { // {{{
return nil
} // }}}
func (dp DatapointValue) FormattedTime() string {// {{{
func (dp DatapointValue) FormattedTime() string { // {{{
if dp.ValueDateTime.Valid {
return dp.ValueDateTime.Time.Format("2006-01-02 15:04:05")
}
return "invalid time"
}// }}}
func (dp Datapoint) Update() (err error) {// {{{
} // }}}
func (dp Datapoint) Update() (err error) { // {{{
name := strings.TrimSpace(dp.Name)
if name == "" {
err = errors.New("Name can't be empty")
@ -71,23 +73,47 @@ func (dp Datapoint) Update() (err error) {// {{{
if dp.ID == 0 {
_, err = service.Db.Conn.Exec(
`INSERT INTO datapoint("group", name, datatype) VALUES($1, $2, $3)`,
`INSERT INTO datapoint("group", name, datatype) VALUES($1, $2, $3, $4)`,
dp.Group,
name,
dp.Datatype,
dp.NodataProblemSeconds,
)
} else {
/* Keep nodata_is_problem as is unless the nodata_problem_seconds is changed.
* Otherwise unnecessary nodata problems could be notified when updating unrelated
* datapoint properties. */
_, err = service.Db.Conn.Exec(
`UPDATE datapoint SET "group"=$2, name=$3, datatype=$4 WHERE id=$1`,
`
UPDATE datapoint
SET
"group"=$2,
name=$3,
datatype=$4,
nodata_problem_seconds=$5,
nodata_is_problem = (
CASE
WHEN $5 != nodata_problem_seconds THEN false
ELSE
nodata_is_problem
END
)
WHERE
id=$1
`,
dp.ID,
dp.Group,
name,
dp.Datatype,
dp.NodataProblemSeconds,
)
}
if err != nil {
err = werr.Wrap(err)
}
return
}// }}}
} // }}}
func DatapointAdd[T any](name string, value T) (err error) { // {{{
row := service.Db.Conn.QueryRow(`SELECT id, datatype FROM datapoint WHERE name=$1`, name)
@ -120,7 +146,7 @@ func DatapointAdd[T any](name string, value T) (err error) { // {{{
return
}
service.Db.Conn.Exec(`UPDATE datapoint SET last_value = NOW() WHERE name=$1`, name)
service.Db.Conn.Exec(`UPDATE datapoint SET last_value = NOW(), nodata_is_problem = false WHERE id=$1`, dpID)
return
} // }}}
@ -253,14 +279,14 @@ func DatapointRetrieve(id int, name string) (dp Datapoint, err error) { // {{{
return
} // }}}
func DatapointDelete(id int) (err error) {// {{{
func DatapointDelete(id int) (err error) { // {{{
_, err = service.Db.Conn.Exec(`DELETE FROM datapoint WHERE id=$1`, id)
if err != nil {
err = werr.Wrap(err).WithData(id)
}
return
}// }}}
func DatapointValues(id int) (values []DatapointValue, err error) {// {{{
} // }}}
func DatapointValues(id int) (values []DatapointValue, err error) { // {{{
rows, err := service.Db.Conn.Queryx(`SELECT * FROM datapoint_value WHERE datapoint_id=$1 ORDER BY ts DESC LIMIT 500`, id)
if err != nil {
err = werr.Wrap(err).WithData(id)
@ -278,4 +304,4 @@ func DatapointValues(id int) (values []DatapointValue, err error) {// {{{
values = append(values, dpv)
}
return
}// }}}
} // }}}