From 43d8938459a208f26d268d1940eee02b2f4b940f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Magnus=20=C3=85hall?= Date: Thu, 27 Jun 2024 08:59:34 +0200 Subject: [PATCH] Added datavalue filtering on date --- datapoint.go | 17 ++++++++++-- main.go | 37 +++++++++++++++++++++++-- static/css/default_light/datapoints.css | 1 + static/css/gruvbox/datapoints.css | 1 + static/less/datapoints.less | 1 + views/pages/datapoint_values.gotmpl | 17 +++++++++++- 6 files changed, 69 insertions(+), 5 deletions(-) diff --git a/datapoint.go b/datapoint.go index 084e4bf..55cdae8 100644 --- a/datapoint.go +++ b/datapoint.go @@ -327,8 +327,21 @@ func DatapointDelete(id int) (err error) { // {{{ } return } // }}} -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) +func DatapointValues(id int, from, to time.Time) (values []DatapointValue, err error) { // {{{ + rows, err := service.Db.Conn.Queryx( + ` + SELECT * + FROM datapoint_value + WHERE + datapoint_id=$1 AND + ts >= $2 AND + ts <= $3 + ORDER BY ts DESC + `, + id, + from, + to, + ) if err != nil { err = werr.Wrap(err).WithData(id) return diff --git a/main.go b/main.go index ce185e1..8310078 100644 --- a/main.go +++ b/main.go @@ -680,13 +680,44 @@ func pageDatapointValues(w http.ResponseWriter, r *http.Request, _ *session.T) { return } + // GET parameters. + display := r.URL.Query().Get("display") + if display == "" && datapoint.Datatype == INT { + display = "graph" + } + + var timeFrom, timeTo time.Time + timeFromParam := r.URL.Query().Get("f") + if timeFromParam == "" { + timeFrom = time.Now().Add(time.Duration(-(24 * 7) * time.Hour)) + } else { + timeFrom, err = time.Parse("2006-01-02T15:04:05", timeFromParam) + if err != nil { + httpError(w, werr.Wrap(err).Log()) + return + } + } + + timeToParam := r.URL.Query().Get("t") + if timeToParam == "" { + timeTo = time.Now() + } else { + timeTo, err = time.Parse("2006-01-02T15:04:05", timeToParam) + if err != nil { + httpError(w, werr.Wrap(err).Log()) + return + } + } + + // Fetch data point values according to the times. var values []DatapointValue - values, err = DatapointValues(id) + values, err = DatapointValues(id, timeFrom, timeTo) if err != nil { httpError(w, werr.Wrap(err).Log()) return } + logger.Info("FOO", "from", timeFrom, "to", timeTo, "t", timeToParam) page := Page{ LAYOUT: "main", PAGE: "datapoint_values", @@ -699,7 +730,9 @@ func pageDatapointValues(w http.ResponseWriter, r *http.Request, _ *session.T) { page.Data = map[string]any{ "Datapoint": datapoint, "Values": values, - "Display": r.URL.Query().Get("display"), + "TimeFrom": timeFrom.Format("2006-01-02T15:04:05"), + "TimeTo": timeTo.Format("2006-01-02T15:04:05"), + "Display": display, } page.Render(w) return diff --git a/static/css/default_light/datapoints.css b/static/css/default_light/datapoints.css index 761b73a..c64a16b 100644 --- a/static/css/default_light/datapoints.css +++ b/static/css/default_light/datapoints.css @@ -68,6 +68,7 @@ grid-gap: 8px; } .graph { + width: 99%; height: 600px; border: 1px solid #fff; } diff --git a/static/css/gruvbox/datapoints.css b/static/css/gruvbox/datapoints.css index 9522023..5af4f87 100644 --- a/static/css/gruvbox/datapoints.css +++ b/static/css/gruvbox/datapoints.css @@ -68,6 +68,7 @@ grid-gap: 8px; } .graph { + width: 99%; height: 600px; border: 1px solid #fff; } diff --git a/static/less/datapoints.less b/static/less/datapoints.less index 87fe972..aecd5a7 100644 --- a/static/less/datapoints.less +++ b/static/less/datapoints.less @@ -83,6 +83,7 @@ } .graph { + width: 99%; height: 600px; border: 1px solid #fff; } diff --git a/views/pages/datapoint_values.gotmpl b/views/pages/datapoint_values.gotmpl index b71d33f..0a5c6fe 100644 --- a/views/pages/datapoint_values.gotmpl +++ b/views/pages/datapoint_values.gotmpl @@ -1,11 +1,26 @@ {{ define "page" }} {{ $version := .VERSION }} + {{ $graph := and (eq .Data.Display "graph") (eq .Data.Datapoint.Datatype "INT") }} {{ block "page_label" . }}{{end}} - {{ if and (eq .Data.Display "graph") (eq .Data.Datapoint.Datatype "INT") }} +
+ {{ if eq .Data.Datapoint.Datatype "INT" }} +
+ + +
+ {{ end }} + + + + +
+

+ + {{ if $graph }}