diff --git a/dashboard/backend/routers/docker_router.py b/dashboard/backend/routers/docker_router.py index f7bce60..f06050b 100644 --- a/dashboard/backend/routers/docker_router.py +++ b/dashboard/backend/routers/docker_router.py @@ -13,6 +13,7 @@ def list_containers(): "id": c.short_id, "name": c.name, "status": c.status, + "health": (c.attrs.get("State", {}).get("Health", {}) or {}).get("Status", ""), "image": c.image.tags[0] if c.image.tags else str(c.image.id)[:20], "ports": c.ports, } diff --git a/dashboard/backend/routers/system.py b/dashboard/backend/routers/system.py index 23c05d3..4e55b27 100644 --- a/dashboard/backend/routers/system.py +++ b/dashboard/backend/routers/system.py @@ -28,6 +28,14 @@ async def send_notification(body: dict): @router.get("/stats") def system_stats(): disk = shutil.disk_usage("/volume1") + volumes = [] + for mount in psutil.disk_partitions(): + if mount.mountpoint.startswith(("/volume",)): + try: + u = shutil.disk_usage(mount.mountpoint) + volumes.append({"mount": mount.mountpoint, "total": u.total, "used": u.used, "free": u.free, "percent": round(u.used / u.total * 100, 1)}) + except Exception: + pass mem = psutil.virtual_memory() cpu_pct = psutil.cpu_percent(interval=0.5) load_1, load_5, load_15 = psutil.getloadavg() @@ -53,6 +61,7 @@ def system_stats(): }, "uptime": f"{days}d {hours}h", "platform": platform.platform(), + "volumes": volumes, } diff --git a/dashboard/frontend/src/routes/Dashboard.svelte b/dashboard/frontend/src/routes/Dashboard.svelte index 1512087..9fc7d66 100644 --- a/dashboard/frontend/src/routes/Dashboard.svelte +++ b/dashboard/frontend/src/routes/Dashboard.svelte @@ -1,5 +1,5 @@
@@ -106,13 +108,13 @@

Docker Containers

- {containers.filter(c => c.status === "running").length} running + {containers.filter(c => c.status === "running").length}/{containers.length} running
{#each containers.slice(0, 5) as c}
- + {c.name}
{c.image} @@ -147,19 +149,29 @@
- - {#if stats?.disk} + + {#if stats?.volumes?.length}

Storage Usage

-
-
-
-
- {fmtBytes(stats.disk.used)} used - {fmtBytes(stats.disk.free)} free +
+ {#each stats.volumes as vol} +
+
+ {vol.mount} + {vol.percent}% +
+
+
+
+
+ {fmtBytes(vol.used)} used + {fmtBytes(vol.free)} free +
+
+ {/each}
{/if}