The Containers and Services tabs grow new vital-sign columns: Ports, Uptime, Memory, and Disk. Port chips are clickable and open host:port in a new tab.
Highlights
📦 Containers tab
| Column | What |
|---|---|
| Ports | One pill per published host port. Click to open <host>:<port> in a new tab.
|
| Uptime | Parsed from Docker's own status string — no extra inspect calls. |
| Memory | RSS minus page cache, like docker stats. Cached 30 s.
|
| Disk | Writable-layer size (SizeRw). Cached 30 s so the heavy scan doesn't run on every poll.
|
Image + Disk hide on viewports < 1100 px so the row still fits on a laptop. The Status column now drops the redundant "Up N days" prefix — uptime is its own column now.
🧩 Services tab
| Column | What |
|---|---|
| Ports | LISTEN TCP/TCP6 ports owned by the unit's MainPID. Same clickable pill style as Containers. |
| Uptime | From Unit.ActiveEnterTimestamp. Failed units show exit N instead.
|
| Memory | Prefers Service.MemoryCurrent when systemd has accounting on; otherwise falls back to /proc/<MainPID>/status VmRSS.
|
Enrichment runs only for the rows actually shown (admin/failed) — touching every loaded unit would mean hundreds of D-Bus round-trips per scan.
⚙️ Settings gear
Hosts and Alerts are set-once configuration, not live monitoring views. A new ⚙ gear in the topnav opens a small settings sub-nav with a "← Monitoring" link back. The main tab row drops to the six live tabs; deep links (#hosts, #alerts) still open in settings mode.
Other polish
- Star button CTA: gentle "if it helps, a ⭐ helps me back" before starring, soft "thanks! got ideas? → CONTRIBUTING" after.
- Memory + Disk values render uniformly as
0,00 GBacross both tables (European decimal), so small footprints stay comparable to large ones at a glance. - Public website on GitHub Pages, auto-built on every push to main and every
v*tag —homelab-monitor.devif/when the DNS lines up. - Mobile-friendly landing page; dark-only color scheme; sharper screenshots with subtle borders; SVG architecture diagram.
⚠ Compose change required for Services Ports
To attribute LISTEN sockets to the right systemd unit, the container resolves /proc/<pid>/fd/* symlinks owned by other PIDs. That needs two things Docker doesn't grant by default:
cap_add:
- SYS_PTRACE
security_opt:
- apparmor=unconfinedBoth are now in the upstream docker-compose.yml. If you keep a local override, add them — without these, the Services Ports column will stay empty (Memory still falls back to VmRSS, so it works in degraded mode). The container is already host-net, host-pid, host-root-RO, so the marginal trust delta is small; this is the standard pattern for monitoring stacks like cAdvisor.
Full changelog since v0.8.0
33a6822release: bump VERSION to 0.9.0 — Containers/Services columns (#43)9e3175bfix(compose): apparmor=unconfined so CAP_SYS_PTRACE actually takes effect (#42)c8a797bfix(services/ui): cap_add SYS_PTRACE for Ports + GB,00 format for memory/disk (#41)8bfed34fix(services): use /proc for ports + VmRSS fallback for memory (#40)b645306ui(containers/services): Ports/Uptime/Memory/Disk columns + clickable port pills (#39)c7c44e9Move Hosts & Alerts behind a Settings gear (#38)471c382ui(dashboard): pre/post-star CTA — soft nudge before, ideas pointer after (#37)51b7618ui(site): break 'HomeLab Monitor' on a word boundaryea15deaui(site): mobile media queries — tighter hero, stacked CTAs, narrower aurora355277eui(site): 2px white-tinted borders on screenshotsc07d7bdui(site): visible outlines on screenshots — dark-on-dark was blending4a6c9bbci(docs): also fire the site deploy on everyv*tag push0ea041ffix(docs): force dark scheme — the custom CSS is dark-onlyd998629ci(docs): mirrordocs/*.svginto the siteb01c8abdocs: drop ASCII art for SVG + modern dev-tool aesthetic for the landing11e73a2ci(docs): drop pip cache (no requirements file in this Docker-only repo)d819777docs: public website on GitHub Pages, auto-built on push to main
Upgrade
cd <your-clone-dir>
git pull
docker compose pull
docker compose up -dOr if you're new:
curl -fsSLO https://raw.githubusercontent.com/SikamikanikoBG/homelab-monitor/main/docker-compose.yml
docker compose pull
docker compose up -dOpen http://<your-host-ip>:9800. Click any port chip on Containers or Services to jump straight to the service.
Image
Multi-arch (linux/amd64, linux/arm64) on Docker Hub:
sikamikaniko123/homelab-monitor:0.9.0 · also 0.9 and latest.