Total Soundbox
+ speaker_group +0
+registered devices
+diff --git a/src/app.ts b/src/app.ts index fc559d8..e635a03 100644 --- a/src/app.ts +++ b/src/app.ts @@ -82,7 +82,7 @@ const adminWriteLimiter = rateLimit({ }); app.get("/", (_req, res) => { - res.redirect(302, "/ui/admin-login-portal"); + res.redirect(302, "/ui/soundbox-ops"); }); app.get("/favicon.ico", (_req, res) => { diff --git a/ui/admin-login/index.html b/ui/admin-login/index.html index 9a63a2f..10a211e 100644 --- a/ui/admin-login/index.html +++ b/ui/admin-login/index.html @@ -261,7 +261,7 @@ password: passInput.value }) .then(() => { - window.location.href = '/ui/admin-dashboard-overview'; + window.location.href = '/ui/soundbox-ops'; }) .catch((error) => { feedback.textContent = error?.message || 'Login gagal'; diff --git a/ui/shared/admin-api.js b/ui/shared/admin-api.js index 9d6d575..a2b9f6c 100644 --- a/ui/shared/admin-api.js +++ b/ui/shared/admin-api.js @@ -299,6 +299,7 @@ window.AdminUIAPI = { }), getDashboardSummary: () => adminFetch("/admin/dashboard/summary"), getMqttStatus: (query) => adminFetch("/admin/mqtt/status", { query }), + getObservabilitySummary: () => adminFetch("/admin/observability/summary"), listFailedNotifications: (query) => adminFetch("/admin/notifications/failed", { query }), listAuditLogs: (query) => adminFetch("/admin/audit-logs", { query }), formatMoney, diff --git a/ui/soundbox-ops/index.html b/ui/soundbox-ops/index.html index bab3145..044f2d5 100644 --- a/ui/soundbox-ops/index.html +++ b/ui/soundbox-ops/index.html @@ -3,21 +3,409 @@
-Folder desain ini hanya menyediakan DESIGN.md (tanpa code.html).
- - - -' + + + +Total Soundbox
+ speaker_group +0
+registered devices
+Online
+ check_circle +0
+0% online rate
+Stale/Degraded
+ running_with_errors +0
+needs operator attention
+Offline
+ cloud_off +0
+no recent heartbeat
+MQTT
+ hub +Checking
+broker state
+Loading soundbox fleet...
+| Soundbox | +Merchant | +Mode | +Health | +Last Seen | +Action | +
|---|---|---|---|---|---|
| Loading devices... | |||||