diff --git a/apps/dashboard/assets/js/renderers/storage.js b/apps/dashboard/assets/js/renderers/storage.js index e65c2a0..3cc07b9 100644 --- a/apps/dashboard/assets/js/renderers/storage.js +++ b/apps/dashboard/assets/js/renderers/storage.js @@ -1,54 +1,28 @@ -function gb(value) { - return `${Number(value).toFixed(1)} GB`; -} - -function diskTone(status) { - if (status === "critical" || status === "offline") return "danger"; - if (status === "warning") return "warning"; - return "online"; -} - -function pillLabel(status) { - if (status === "critical") return "Critical"; - if (status === "warning") return "Warning"; - if (status === "offline") return "Offline"; - return "Stable"; -} - export function renderStorage(state) { - const { storage } = state.data; - const rootTone = diskTone(storage.root.status); + const storage = state.storage || {}; + const grid = document.getElementById("storage-grid"); + if (!grid) return; - const rootPill = document.getElementById("root-storage-pill"); - rootPill.className = `status-pill ${rootTone === "danger" ? "offline" : rootTone}`; - rootPill.textContent = pillLabel(storage.root.status); + const disks = storage.disks || []; + if (!disks.length) { + grid.innerHTML = '
No disk data
'; + return; + } - document.getElementById("root-storage-value").textContent = `${storage.root.usage_percent.toFixed(1)}%`; - document.getElementById("root-storage-value").className = `card-value value-${rootTone === "danger" ? "danger" : rootTone}`; - document.getElementById("root-storage-used").textContent = gb(storage.root.used_gb); - document.getElementById("root-storage-free").textContent = gb(storage.root.free_gb); - - const rootBar = document.getElementById("root-storage-bar"); - rootBar.className = `metric-bar${rootTone === "online" ? "" : ` ${rootTone === "danger" ? "danger" : rootTone}`}`; - document.getElementById("root-storage-bar-fill").style.width = `${storage.root.usage_percent}%`; - - const signal = document.getElementById("disk-matrix-signal"); - signal.className = `signal ${storage.summary.overall_status === "degraded" ? "warning" : storage.summary.overall_status === "offline" ? "offline" : "online"}`; - - const list = document.getElementById("storage-list"); - list.innerHTML = storage.disks - .map((disk) => { - const tone = diskTone(disk.status); - const pillClass = tone === "danger" ? "offline" : tone === "warning" ? "warning" : "online"; - const barClass = tone === "online" ? "metric-bar" : `metric-bar ${tone === "danger" ? "danger" : tone}`; - return ` -
- ${disk.name} - ${disk.mount} -
- ${disk.usage_percent.toFixed(0)}% + grid.innerHTML = disks.map(disk => { + const pct = disk.usage_percent ?? 0; + const fillClass = pct > 85 ? "danger" : pct > 70 ? "warn" : ""; + const statusColor = disk.status === "critical" ? "var(--red)" : disk.status === "warning" ? "var(--yellow)" : "var(--teal)"; + return ` +
+
+ ${disk.name || disk.mount} + ${pct.toFixed(1)}%
- `; - }) - .join(""); +
${disk.mount} ยท ${disk.used_gb?.toFixed(1)}/${disk.total_gb?.toFixed(1)} GB
+
+
+
+
`; + }).join(""); }