Added datavalue filtering on date
This commit is contained in:
parent
b6e1139e8a
commit
43d8938459
17
datapoint.go
17
datapoint.go
@ -327,8 +327,21 @@ func DatapointDelete(id int) (err error) { // {{{
|
|||||||
}
|
}
|
||||||
return
|
return
|
||||||
} // }}}
|
} // }}}
|
||||||
func DatapointValues(id int) (values []DatapointValue, err error) { // {{{
|
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 ORDER BY ts DESC LIMIT 500`, id)
|
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 {
|
if err != nil {
|
||||||
err = werr.Wrap(err).WithData(id)
|
err = werr.Wrap(err).WithData(id)
|
||||||
return
|
return
|
||||||
|
37
main.go
37
main.go
@ -680,13 +680,44 @@ func pageDatapointValues(w http.ResponseWriter, r *http.Request, _ *session.T) {
|
|||||||
return
|
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
|
var values []DatapointValue
|
||||||
values, err = DatapointValues(id)
|
values, err = DatapointValues(id, timeFrom, timeTo)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
httpError(w, werr.Wrap(err).Log())
|
httpError(w, werr.Wrap(err).Log())
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
logger.Info("FOO", "from", timeFrom, "to", timeTo, "t", timeToParam)
|
||||||
page := Page{
|
page := Page{
|
||||||
LAYOUT: "main",
|
LAYOUT: "main",
|
||||||
PAGE: "datapoint_values",
|
PAGE: "datapoint_values",
|
||||||
@ -699,7 +730,9 @@ func pageDatapointValues(w http.ResponseWriter, r *http.Request, _ *session.T) {
|
|||||||
page.Data = map[string]any{
|
page.Data = map[string]any{
|
||||||
"Datapoint": datapoint,
|
"Datapoint": datapoint,
|
||||||
"Values": values,
|
"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)
|
page.Render(w)
|
||||||
return
|
return
|
||||||
|
@ -68,6 +68,7 @@
|
|||||||
grid-gap: 8px;
|
grid-gap: 8px;
|
||||||
}
|
}
|
||||||
.graph {
|
.graph {
|
||||||
|
width: 99%;
|
||||||
height: 600px;
|
height: 600px;
|
||||||
border: 1px solid #fff;
|
border: 1px solid #fff;
|
||||||
}
|
}
|
||||||
|
@ -68,6 +68,7 @@
|
|||||||
grid-gap: 8px;
|
grid-gap: 8px;
|
||||||
}
|
}
|
||||||
.graph {
|
.graph {
|
||||||
|
width: 99%;
|
||||||
height: 600px;
|
height: 600px;
|
||||||
border: 1px solid #fff;
|
border: 1px solid #fff;
|
||||||
}
|
}
|
||||||
|
@ -83,6 +83,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
.graph {
|
.graph {
|
||||||
|
width: 99%;
|
||||||
height: 600px;
|
height: 600px;
|
||||||
border: 1px solid #fff;
|
border: 1px solid #fff;
|
||||||
}
|
}
|
||||||
|
@ -1,11 +1,26 @@
|
|||||||
{{ define "page" }}
|
{{ define "page" }}
|
||||||
{{ $version := .VERSION }}
|
{{ $version := .VERSION }}
|
||||||
|
{{ $graph := and (eq .Data.Display "graph") (eq .Data.Datapoint.Datatype "INT") }}
|
||||||
<link rel="stylesheet" type="text/css" href="/css/{{ .VERSION }}/{{ .CONFIG.THEME }}/datapoints.css">
|
<link rel="stylesheet" type="text/css" href="/css/{{ .VERSION }}/{{ .CONFIG.THEME }}/datapoints.css">
|
||||||
<script src="/js/{{ .VERSION }}/lib/plotly-2.32.0.min.js" charset="utf-8"></script>
|
<script src="/js/{{ .VERSION }}/lib/plotly-2.32.0.min.js" charset="utf-8"></script>
|
||||||
|
|
||||||
{{ block "page_label" . }}{{end}}
|
{{ block "page_label" . }}{{end}}
|
||||||
|
|
||||||
{{ if and (eq .Data.Display "graph") (eq .Data.Datapoint.Datatype "INT") }}
|
<form action="/datapoint/values/{{ .Data.Datapoint.ID }}" method="get">
|
||||||
|
{{ if eq .Data.Datapoint.Datatype "INT" }}
|
||||||
|
<div>
|
||||||
|
<input name="display" value="graph" type="radio" id="display-graph" {{ if $graph }} checked {{ end}}> <label for="display-graph">Graph</label>
|
||||||
|
<input name="display" value="list" type="radio" id="display-list" {{ if not $graph }} checked {{ end }}> <label for="display-list">List</label>
|
||||||
|
</div>
|
||||||
|
{{ end }}
|
||||||
|
|
||||||
|
<input name="f" type="datetime-local" value="{{ .Data.TimeFrom }}">
|
||||||
|
<input name="t" type="datetime-local" value="{{ .Data.TimeTo }}">
|
||||||
|
<button>OK</button>
|
||||||
|
</form>
|
||||||
|
<br><br>
|
||||||
|
|
||||||
|
{{ if $graph }}
|
||||||
<div class="graph" id="tester"></div>
|
<div class="graph" id="tester"></div>
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
const tester = document.getElementById('tester');
|
const tester = document.getElementById('tester');
|
||||||
|
Loading…
Reference in New Issue
Block a user