diff --git a/docs/signal-triggers.md b/docs/signal-triggers.md new file mode 100644 index 0000000..63fad64 --- /dev/null +++ b/docs/signal-triggers.md @@ -0,0 +1,206 @@ +# Signal Trigger Architecture + +## Overview + +When Nomos is asked "what are the thermals of hubris?", here is exactly what happens: + +``` +┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ +│ Nomos │ │ Oikos │ │Scheduler │ │ Hubris │ +│ (Agent) │ │ API │ │ (Docker) │ │(Proxmox) │ +└────┬─────┘ └────┬─────┘ └────┬─────┘ └────┬─────┘ + │ │ │ │ + │ query_metrics │ │ │ + │────────────────>│ │ │ + │ │ │ │ + │ ← cpu_pct=2.5 │ SELECT FROM │ │ + │ cpu_temp=48 │ metric_samples│ │ + │<────────────────│ │ │ + │ │ │ │ + │ │ │ │ + ══════ Every 60s (autonomous loop) ══════ │ + │ │ │ │ + │ │ │ SSH exec │ + │ │ │─────────────────>│ + │ │ │ /opt/oikos/ │ + │ │ │ checks/ │ + │ │ │ cpu_check.sh │ + │ │ │ │ + │ │ │ {"health":"ok", │ + │ │ │ "metrics": │ + │ │ │ {"cpu_pct":2.5, │ + │ │ │ "cpu_temp":48}}│ + │ │ │<─────────────────│ + │ │ │ │ + │ │ │ INSERT │ + │ │ │ metric_samples │ + │ │ │ │ + │ │ │ UPSERT signal │ + │ │ │ (dedup) │ + │ │ │ │ +``` + +## Two Paths + +### Path A — Autonomous Collection (Scheduler) + +1. Operator creates a check via REST API: `POST /api/v1/checks` +2. Scheduler loads enabled checks every 30s from `check_defs` table +3. For `ssh-script` checks, scheduler SSHs to target host and runs `/opt/oikos/checks/