Add SshHostCollector for .180 (omv) and .171 (ripper)
CI / web (push) Successful in 20s
CI / api (push) Successful in 27s

Extends monitoring to the two bare-metal boxes Proxmox can't see.
Uses a dedicated ed25519 key with a forced authorized_keys command
(see docs/ssh-collector-key-setup.md) so a leaked key can only ever
run the fixed read-only stats script, never arbitrary commands.

CPU is approximated from 1-min load average / core count (a true
utilization % would need two /proc/stat samples).

Closes #8.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
2026-07-12 20:40:10 -06:00
parent ac768ed0db
commit 7df08cd16d
10 changed files with 349 additions and 0 deletions
+2
View File
@@ -6,6 +6,7 @@ import { loadConfig } from "./config/index.js";
import { openDb, upsertSnapshots, pruneOldSnapshots } from "./db/index.js";
import { seedAdminUser } from "./auth/local.js";
import { ProxmoxCollector } from "./collectors/proxmox.js";
import { SshHostCollector } from "./collectors/sshHost.js";
import type { Collector } from "./collectors/types.js";
import { registerAuthRoutes } from "./routes/auth.js";
import { registerHostRoutes } from "./routes/hosts.js";
@@ -27,6 +28,7 @@ async function main() {
tokenId: cfg.proxmox.tokenId,
tokenSecret: cfg.proxmox.tokenSecret,
}),
...cfg.sshHosts.map((h) => new SshHostCollector(h)),
];
async function pollOnce() {