summaryrefslogtreecommitdiff
AgeCommit message (Collapse)Author
2026-07-01Lay sections out in a multi-column flow instead of one long columnbatsumaru
pf.sh's rule listing made the page noticeably taller without using any of the available width. Wrap each section in a .section block and the whole set in a .cols container using CSS multi-column layout (column-width: 380px) - sections flow left-to-right/top-to-bottom across however many columns fit the window, each staying intact (break-inside: avoid) rather than splitting a table mid-page. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-01Make the zpool check per-pool with capacity, scrub, and error statusbatsumaru
Replace the single "all pools are healthy" summary line with one row per pool (name, health, capacity) plus a scrub/errors row parsed from `zpool status <pool>`. A pool that's never been scrubbed but has no data errors still reports ok - lack of scrub history isn't itself a failure, only actual reported errors are. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-01Add pf visibility and a wg-quick watcher check, add a neutral row statusbatsumaru
checks/pf.sh reports pf enabled/disabled, state table usage (warn/down as it nears the configured limit), and the loaded filter/nat rule count, then lists each active rule as its own row for at-a-glance visibility into what's actually being enforced. Those rule rows use a new "info" status (gray square) rather than "ok" - they're not a health check on any individual rule, so a green square there would misleadingly imply otherwise. render.sh maps info -> gray; anything else still falls back to red. checks/wg-watcher.sh checks the route-monitor process wg-quick spawns to react to WAN interface/address changes - it isn't rc.d-managed, so there's no `service status` for it, hence the new proc_running helper in lib/common.sh (pgrep -f based). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-01Document the core.hooksPath setup for new clonesbatsumaru
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-01Mark .githooks/pre-commit itself executablebatsumaru
It doesn't match the *.sh glob the hook fixes up, so it committed as 100644 in the previous commit - harmless on this Windows checkout, but a fresh clone on a real Unix filesystem would get it non-executable and the hook would silently never run. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-01Add ntpd/clock-sync check and a pre-commit hook for exec bitsbatsumaru
checks/ntpd.sh reports whether ntpd is running and whether the clock's offset is within tolerance (ok <50ms, warn <200ms, down beyond that or if ntpq doesn't respond) - clock drift is a silent failure that otherwise only surfaces later as TLS handshake failures or misleading cross-jail log timestamps. Also add .githooks/pre-commit + core.hooksPath, since this checkout is on Windows where core.fileMode is false (the filesystem doesn't reliably preserve the executable bit) - without it, a plain `git add` on a new check script silently stages it as non-executable, and render.sh skips non-executable files with no visible error. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-01Auto-discover jails and add WireGuard peer info to status pagebatsumaru
Replace the per-jail check scripts with checks/jails.sh, which lists running jails via jls and resolves each one's IPv4 (falling back to jexec+ifconfig for VNET jails, which don't set the ip4.addr jail parameter). New jails now show up without adding a script; the trade-off is a stopped jail just disappears rather than showing down, since jls only lists what's running. checks/wireguard.sh now also reports each configured peer's allowed-IP and time since last handshake, parsed from `wg show wg0 dump`. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-01Mark statuspage shell scripts executable in gitbatsumaru
core.fileMode is false in this repo (Windows checkout), so the earlier commit recorded every checks/*.sh, lib/common.sh, and render.sh as 100644. render.sh skips non-executable files silently, so without this the deployed page would render with zero rows. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-01Split monolithic status check.sh into modular check scriptsbatsumaru
Replace the single-file prototype with independently-addable check scripts (checks/*.sh) that each emit JSONL rows, a shared helper lib, and one orchestrator/renderer (render.sh) that groups rows by section and writes the static status page. A broken check script now shows up as a down/warn row instead of crashing the whole render. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>