diff --git a/helper.go b/helper.go
index 0dab728..0d9731d 100644
--- a/helper.go
+++ b/helper.go
@@ -1,6 +1,9 @@
package main
import (
+ // External
+ werr "git.gibonuddevalla.se/go/wrappederror"
+
// Standard
"time"
)
@@ -9,3 +12,18 @@ func stringToTime(strTime string) (t time.Time, err error) {// {{{
t, err = time.Parse(time.RFC3339, strTime)
return
}// }}}
+func parseHTMLDateTime(str string, dflt time.Time) (t time.Time, err error) {
+ // Browser sending 2024-06-27T10:43 (16 characters) when seconds is 00.
+ if len(str) == 16 {
+ str += ":00"
+ }
+ if str == "" {
+ return dflt, nil
+ } else {
+ t, err = time.ParseInLocation("2006-01-02T15:04:05", str, smonConfig.Timezone())
+ if err != nil {
+ err = werr.Wrap(err)
+ }
+ }
+ return
+}
diff --git a/main.go b/main.go
index 2e6b594..98a57bc 100644
--- a/main.go
+++ b/main.go
@@ -369,7 +369,7 @@ func getPage(layout, page string) (tmpl *template.Template, err error) { // {{{
funcMap := template.FuncMap{
"format_time": func(t time.Time) template.HTML {
return template.HTML(
- t.In(smonConfig.Timezone()).Format(`2006-01-02 15:04:05`),
+ t.In(smonConfig.Timezone()).Format(`2006-01-02 15:04:05:05`),
)
},
}
@@ -709,26 +709,18 @@ func pageDatapointValues(w http.ResponseWriter, r *http.Request, _ *session.T) {
}
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
- }
+ yesterday := time.Now().Add(time.Duration(-24 * time.Hour))
+
+ timeFrom, err = parseHTMLDateTime(r.URL.Query().Get("f"), yesterday)
+ 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
- }
+ timeTo, err = parseHTMLDateTime(r.URL.Query().Get("t"), time.Now())
+ if err != nil {
+ httpError(w, werr.Wrap(err).Log())
+ return
}
// Fetch data point values according to the times.
diff --git a/static/css/default_light/datapoints.css b/static/css/default_light/datapoints.css
index 76710e1..3bf9009 100644
--- a/static/css/default_light/datapoints.css
+++ b/static/css/default_light/datapoints.css
@@ -42,6 +42,9 @@
gap: 16px;
white-space: nowrap;
}
+#values .header {
+ font-weight: bold;
+}
.widgets {
display: grid;
grid-template-columns: min-content 1fr;
diff --git a/static/css/gruvbox/datapoints.css b/static/css/gruvbox/datapoints.css
index f22e663..c497d4d 100644
--- a/static/css/gruvbox/datapoints.css
+++ b/static/css/gruvbox/datapoints.css
@@ -42,6 +42,9 @@
gap: 16px;
white-space: nowrap;
}
+#values .header {
+ font-weight: bold;
+}
.widgets {
display: grid;
grid-template-columns: min-content 1fr;
diff --git a/static/less/datapoints.less b/static/less/datapoints.less
index 1d2accd..dba6fd8 100644
--- a/static/less/datapoints.less
+++ b/static/less/datapoints.less
@@ -51,6 +51,10 @@
grid-template-columns: repeat(2, min-content);
gap: 16px;
white-space: nowrap;
+
+ .header {
+ font-weight: bold;
+ }
}
.widgets {
diff --git a/views/pages/datapoint_values.gotmpl b/views/pages/datapoint_values.gotmpl
index 0a987cb..8d49b7b 100644
--- a/views/pages/datapoint_values.gotmpl
+++ b/views/pages/datapoint_values.gotmpl
@@ -14,8 +14,8 @@
{{ end }}
-
-
+
+
@@ -43,9 +43,12 @@
{{ else }}