github SikamikanikoBG/homelab-monitor v0.25.0
v0.25.0 — AMD GPUs detected reliably, history retention you can set, and the maintenance badge reaches the public page

4 hours ago

Pure-AMD and hybrid AMD+NVIDIA hosts now detect correctly — and an AMD box is no longer told to install the NVIDIA runtime. History retention becomes a live setting you change without a restart. The public status page shows the same "In maintenance" badge as the private dashboard. Plus a hardening pass: a Prometheus gauge double-registration crash, a pruning-cycle deadlock, and a controls gate on the remote host-run route.

Added

  • History retention is now a setting, changeable live. A new General settings tab exposes retention_days (1–3650); the pruning cycle reads it each pass, so a change takes effect within ~6 minutes without a restart. (#233)
  • The "In maintenance" badge now shows on the public status page. Previously only the private dashboard dimmed alerts and showed the blue In maintenance badge during a planned window — the shareable /public page still showed a bare down state. It now computes in_maintenance through the same _in_maintenance() helper and surfaces a dedicated maintenance state when nothing is actually down. (#231, follow-up to #217)

Fixed

  • AMD GPUs are now detected reliably — including on hosts without nvidia-smi, and alongside an NVIDIA card. Two gaps in the amdgpu back-end (#1): the collector called nvidia-smi unguarded, so on a machine without it the GPU read aborted before the AMD sysfs reader ever ran — a pure-AMD box reported "no GPU" even though the reader worked; and detection was NVIDIA-or-AMD, hiding the AMD card on hybrid machines. nvidia-smi is now read defensively and both back-ends always run, with their cards merged (AMD re-indexed so per-card history stays distinct) and VRAM/util/temp aggregated across all of them; per-process attribution still applies to the NVIDIA cards only. Utilisation also survives the amdgpu gpu_busy_percent EBUSY quirk — the intermittent "Device or resource busy" race — by retrying once instead of reporting 0%.
  • GPU diagnostics are now vendor-aware — an AMD host is no longer told to install the NVIDIA runtime. The local requirements panel (and the remote-host probe's GPU check) hard-coded an "NVIDIA GPU" row with nvidia-ctk-only remediation, so a machine with a working AMD Radeon — read via the amdgpu sysfs back-end since v0.21.0 — still showed a confusing "no NVIDIA GPU detected" message. The row now reports the real vendor (GPU (AMD) / GPU (NVIDIA)), and the no-GPU remedy explains that AMD is detected automatically from the kernel (no ROCm needed), with a one-liner to confirm the card's sysfs nodes exist. (#1)
  • Prometheus gauges no longer crash on a double import/reload. Gauges are cached in a module-level _GAUGES dict, preventing the ValueError: Duplicated timeseries on the Flask debug-reloader or a double import. (#233)
  • A pruning-cycle deadlock is fixed. sample_once read the retention window while already holding LOCK, and get_settings() is itself non-reentrant on LOCK — the retention read now happens outside the lock. (#233)
  • Hardening round (#233): the remote POST /api/hosts/<name>/run route is now gated behind ENABLE_CONTROLS (returns 403 when controls are off); the docker policy refresh used the wrong TTL constant (_DOCKER_ENRICH_TTL_DOCKER_POLICY_TTL); container self-ID detection now reads the full cgroups-v1 ID from /proc/self/cgroup and falls back to HOSTNAME for v2/non-container; and changing a container's restart policy now asks for confirmation first.

Upgrade: hit Update in the dashboard, or docker compose pull && docker compose up -d. Pinned image: sikamikaniko123/homelab-monitor:v0.25.0.

Don't miss a new homelab-monitor release

NewReleases is sending notifications on new releases.