From 3e64de18edde898572b732c9332897750cd242a9 Mon Sep 17 00:00:00 2001 From: "othman.suseno" Date: Mon, 15 Dec 2025 00:14:07 +0700 Subject: [PATCH] add service monitoring on dashboard --- data/atlas.db | Bin 0 -> 126976 bytes internal/httpapp/dashboard_handlers.go | 130 +++++++++++++++++++++ internal/httpapp/routes.go | 6 + web/templates/dashboard.html | 156 +++++++++++++++++++++---- 4 files changed, 271 insertions(+), 21 deletions(-) create mode 100644 data/atlas.db create mode 100644 internal/httpapp/dashboard_handlers.go diff --git a/data/atlas.db b/data/atlas.db new file mode 100644 index 0000000000000000000000000000000000000000..62d67977584b1c35a99fb924ce1363c37cb76361 GIT binary patch literal 126976 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 unit; n /= unit { + div *= unit + exp++ + } + return fmt.Sprintf("%.1f %cB", float64(bytes)/float64(div), "KMGTPE"[exp]) +} diff --git a/internal/httpapp/routes.go b/internal/httpapp/routes.go index 64cac07..bbe68ac 100644 --- a/internal/httpapp/routes.go +++ b/internal/httpapp/routes.go @@ -18,6 +18,12 @@ func (a *App) routes() { a.mux.HandleFunc("/healthz", a.handleHealthz) a.mux.HandleFunc("/metrics", a.handleMetrics) + // Dashboard API + a.mux.HandleFunc("/api/v1/dashboard", methodHandler( + func(w http.ResponseWriter, r *http.Request) { a.handleDashboardAPI(w, r) }, + nil, nil, nil, nil, + )) + // API v1 routes - ZFS Management a.mux.HandleFunc("/api/v1/disks", methodHandler( func(w http.ResponseWriter, r *http.Request) { a.handleListDisks(w, r) }, diff --git a/web/templates/dashboard.html b/web/templates/dashboard.html index 282bba9..8476e7b 100644 --- a/web/templates/dashboard.html +++ b/web/templates/dashboard.html @@ -5,18 +5,32 @@

Welcome to atlasOS Storage Controller

-
- +
+
-

Storage

+

Pools

-

--

+

-

+

ZFS Pools

+
+ + +
+
+

Capacity

+
+ + + +
+
+

-

Total Capacity

@@ -30,8 +44,8 @@
-

--

-

Active Shares

+

-

+

SMB + NFS

@@ -44,30 +58,130 @@ -

--

+

-

Active Targets

- -
-

System Status

-
-
- ZFS Status - Initializing +
+ +
+

Service Status

+
+
+ SMB/Samba + - +
+
+ NFS Server + - +
+
+ iSCSI Target + - +
+
+ API Status + Online +
-
- Storage Engine - Not Configured -
-
- API Status - Online +
+ + +
+

Jobs

+
+
+ Running + - +
+
+ Completed + - +
+
+ Failed + - +
+
+ Total + - +
+ + +
+

Recent Activity

+
+

Loading...

+
+
+ + {{end}} {{define "dashboard.html"}}