# Contrato — Watchman status snapshot (Spec 035) **Ficheiro:** `/var/lib/ligbox-watchman/status.json` **Actualização:** a cada ciclo completo do scheduler (máx. 30 s para tier critical) --- ## Schema JSON ```json { "watchman_version": "1.0.0", "generated_at": "2026-06-22T11:30:00+00:00", "hostname": "ligbox-ops", "summary": { "total": 24, "ok": 22, "degraded": 2, "open_incidents": 1 }, "last_alert_at": "2026-06-22T11:25:10+00:00", "services": [ { "id": "vm122-desk-ui", "vm": "122", "title": "Desk Frontend", "tier": "critical", "ok": false, "status": "down", "consecutive_failures": 3, "last_ok_at": "2026-06-21T16:47:00+00:00", "last_check_at": "2026-06-22T11:30:00+00:00", "detail": "Connection refused", "http_status": null, "incident_open": true } ] } ``` --- ## Campos | Campo | Tipo | Descrição | |-------|------|-----------| | `ok` | bool | Resultado último probe | | `status` | string | `online` \| `down` \| `check` | | `consecutive_failures` | int | Falhas seguidas (reset em OK) | | `incident_open` | bool | Alerta DOWN enviado, ainda não RESOLVED | | `detail` | string | Erro ou HTTP status humanizado | --- ## Consumo Desk (Fase 2) `GET /api/v1/watchman/status` lê este ficheiro (ou cache 5 s) — **sem auth pública**; RBAC `super_admin`, `ops_lead`, `technician`, `noc`.