8 Commits
Author SHA1 Message Date
aziis98 c988ddf22f ui: uptime chip, #0004 shadows, tick marks, raw metrics; server: config meta injection
- ui: add uptime% chip (green >=99, red below) after ssh; remove "up" word
- ui: all shadows use #0004 shadow-color; modal shadow-lg derives from it
- ui: status modal draws a datetime tick mark every 20 history entries from the newest
- server: drop max_points/downsampling/bucketing; metrics served raw, plots share a ~24h window
- docs: fix ps --no-headers in top example; document raw metrics API
- server: inject <meta name=title/description> into index.html from config title + per-group host patterns (shared with --check recap)
2026-08-02 02:06:27 +02:00
aziis98 6ade221621 server: build status payload from expanded machines
StatusPayload was re-resolving grouped machines from the raw
cfg.Groups configs, so glob hosts like a3-dott{1..12} showed up as a
single machine with an unresolved pattern host and no probe state.
Iterate the expanded cfg.Machines once, bucketing by group.

Adds TestStatusPayloadExpandsGlobs regression test.
2026-08-02 00:51:28 +02:00
aziis98 726800a366 server: add --check flag to validate config and exit
Loads and expands the config, prints a per-group machine summary, and
exits without starting the server (no db, probes, or ports needed).
README flags table updated.
2026-08-02 00:43:00 +02:00
aziis98 41a01244c4 server: expand {a,b}/{1..10} host patterns in config; fuzz + tests
Hosts accept brace groups expanded at load time: enumeration {1,2,3},
inclusive ranges {2..5,8..10} with '..' syntax, and labels {a3,a4};
several groups multiply in cartesian fashion. Leading zeros are
preserved, each expanded machine gets its host as unique ID/name.

Malformed patterns (unmatched/nested braces, non-integer or descending
ranges, extra dots) and patterns expanding past 10000 machines fail at
startup. Adds table tests plus a FuzzExpandHostPattern target; the
safety cap keeps fuzzing and real configs from blowing up memory.
2026-08-01 11:27:59 +02:00
aziis98 a32c9ed615 security: FileServer static serving (path traversal fix), 5s refresh cooldown, dockerignore 2026-08-01 03:29:20 +02:00
aziis98 dea6447dd9 server: add --mock mode with generated data; scripts/generate-screenshot for README image 2026-08-01 03:07:52 +02:00
aziis98 c562a816f9 server: env-driven config via dotenv; Dockerfile BuildKit cache mounts; db in data.volume 2026-08-01 02:32:01 +02:00
aziis98 95eab7f584 statuspage: monitor lab/home machines with a small status page
Go backend probes machines over ICMP/TCP, runs a configurable script over
SSH for checks and numeric metrics, and keeps history in SQLite. Preact +
Vite frontend shows machine groups, per-machine metric plots, and
cross-machine metric aggregates.

- server/: status, history, metrics, aggregate, refresh APIs
- src/: Preact + Vite frontend
- Single YAML config; documented example in example.config.yaml
- SQLite data stored under data.volume/ (bind-mounted in Docker)
- Multi-stage alpine Dockerfile with BuildKit cache mounts
- LICENSE: AGPL-3.0
2026-08-01 02:27:47 +02:00