Quanamo — health

quanamo-health is the live health dashboard for odin — Quanamo's single all-in-one production server. CPU, memory, disk, supervisor status, Horizon, PostgreSQL, MySQL, Redis, per-app HTTP probes, scheduler cron, reboot flag.


Server

HostnameIPSSH
odin204.168.242.59ssh -i ~/.ssh/id_ed25519_waygou [email protected]

Probe shape

For odin, in one SSH round-trip:

MetricNotes
CPU1-min load average as % of nproc
Memoryfree % used
Diskroot partition % used
SupervisorOK (N/N) / DEGRADED (N/M) / N/A
Horizonadmin's supervisor unit state
PostgreSQLpg_isready → admin + feedz health
MySQLProbed via the kanban app's Laravel PDO, NOT mysqladmin ping — the latter has no password handy and would always return "Access denied" → false DOWN
Redisredis-cli -a quanamo_redis_2026 ping
admin.quanamo.comlocalhost curl via Host header
feedz.quanamo.comlocalhost curl via Host header
kanban.quanamo.comlocalhost curl via Host header
Scheduler cron/etc/cron.d/quanamo-scheduler exists?
Reboot/var/run/reboot-required

If SSH times out → UNREACHABLE across the board.


Alert thresholds

  • CPU > 80% / Memory > 85% / Disk > 85% → WARNING
  • Supervisor DEGRADED or FATAL → ALERT
  • Horizon not RUNNING → ALERT
  • PostgreSQL DOWN → ALERT (admin/feedz impacted)
  • MySQL DOWN → ALERT (kanban impacted)
  • Redis DOWN → ALERT
  • admin not 302 → ALERT (admin redirects to /login)
  • feedz not 401 → ALERT (feedz requires auth)
  • kanban not 302 → ALERT
  • /var/run/reboot-required present → INFO
  • UNREACHABLE → ALERT

If nothing is off: All healthy.


Optional deep checks

When Bruno asks for a deep health check, the command additionally tests:

  • AI connectivity: php artisan ai:chat "Say OK" from admin
  • kanban DB binding: php artisan tinker --execute "echo 'DB: ' . DB::connection()->getDatabaseName();" from kanban