Files
dashboards/.gitignore
T
ducoterra c4bb374ccc Add homelab dashboards: system, LLM, and UPS on one domain
Three dashboards served by one FastAPI app with a SQLite history store
(raw / 1m / 1h) and hand-written SVG charts: no Prometheus, no Grafana,
no CDN, no build step. Nothing is fetched from the internet at runtime.

* system: a stdlib-only agent (agent/host_agent.py) reports /proc and
  /sys counters; the dashboard turns them into rates over a labelled
  window, so every number says how it was measured.
* llm: gufo/llama.cpp and vLLM /metrics are parsed by an in-house
  exposition parser. Measured delta/elapsed throughput beats a native
  per-request gauge, and each value carries its provenance.
* ups: a NUT wire-protocol client plus health checks that name what
  they looked at. Commands are gated by NUT_ALLOW_ACTIONS,
  DASH_READ_ONLY and a DANGER confirmation, re-checked server-side.

Missing values render as n/a rather than 0, and an unconfigured source
answers 404 {"configured": false} without dialling anything, so "not
deployed here" never looks like an outage.

253 tests at 94% coverage against captured real fixtures; ruff and
pyright clean.

LLM-Generated: true
2026-10-16 17:20:45 -04:00

37 lines
703 B
Plaintext

# Python
__pycache__/
*.py[cod]
.venv/
.pytest_cache/
.ruff_cache/
.coverage
coverage.xml
htmlcov/
*.egg-info/
# Local state: the SQLite history DB and anything else runtime-written
data/
*.sqlite3
*.sqlite3-wal
*.sqlite3-shm
# Secrets / local config — never commit. The `.example` files are documentation, so they
# are un-ignored explicitly: `.env.*` would otherwise swallow them and a fresh clone would
# have no annotated list of what to set.
.env
.env.*
!.env.example
!.env.dev.example
# Agent binaries staged for deployment
agent/*.tar.gz
# Editor / OS
.vscode/
.idea/
.DS_Store
# Agent/pipeline scratch (the .agents/ roadmap itself IS tracked)
.agents/phase-sessions/
.agents/pipeline.log