diff --git a/dashboard.go b/dashboard.go
index dfb29a9..3103fe3 100644
--- a/dashboard.go
+++ b/dashboard.go
@@ -34,6 +34,23 @@ type Dashboard struct {
Widgets []Widget
}
+func Dashboards() (dashboards []Dashboard, err error) {
+ var rows pgx.Rows
+ rows, err = db.Query(context.Background(), `SELECT * FROM dashboard ORDER BY name ASC`)
+ if err != nil {
+ err = werr.Wrap(err)
+ return
+ }
+
+ dashboards, err = pgx.CollectRows(rows, pgx.RowToStructByNameLax[Dashboard])
+ if err != nil {
+ err = werr.Wrap(err)
+ return
+ }
+
+ return
+}
+
func DashboardGet(name string) (dashboard Dashboard, err error) {
var rows pgx.Rows
rows, err = db.Query(context.Background(), `SELECT * FROM dashboard WHERE name = $1`, name)
diff --git a/main.go b/main.go
index 4094aec..b59f715 100644
--- a/main.go
+++ b/main.go
@@ -409,13 +409,24 @@ func pageIndex(w http.ResponseWriter, r *http.Request) { // {{{
CONFIG: smonConfig.Settings,
}
- dashboard, err := DashboardGet("start")
+ dashboards, err := Dashboards()
if err != nil {
logger.Error("dashboard", "error", err)
}
+ dbname := r.URL.Query().Get("dashboard")
+ var start Dashboard
+ var names []string
+ for _, dash := range dashboards {
+ if (dbname == "" && dash.Name == "start") || (dbname != "" && dash.Name == dbname) {
+ start = dash
+ }
+ names = append(names, dash.Name)
+ }
+
data := make(map[string]any)
- data["Dashboard"] = dashboard
+ data["Dashboard"] = start
+ data["Dashboards"] = names
page.Data = data
page.Render(w, r)
} // }}}
diff --git a/static/js/dashboard.mjs b/static/js/dashboard.mjs
index a6655ef..e2d5316 100644
--- a/static/js/dashboard.mjs
+++ b/static/js/dashboard.mjs
@@ -46,6 +46,14 @@ export class SmonDashboard extends CustomHTMLElement {// {{{
}
}
+ .header {
+ & > select, & > button {
+ height: 36px;
+ padding: 0px 16px;
+ }
+
+ }
+
.el-error {
display: none;
margin-bottom: 16px;
@@ -68,6 +76,7 @@ export class SmonDashboard extends CustomHTMLElement {// {{{
grid-auto-flow: column;
grid-auto-columns: min-content;
width: min-content;
+ margin-top: 16px;
smon-widget-empty {
display: none;
@@ -110,13 +119,13 @@ export class SmonDashboard extends CustomHTMLElement {// {{{
-
+
@@ -124,29 +133,45 @@ export class SmonDashboard extends CustomHTMLElement {// {{{