What the status page shows
The status page displays the current state of four monitored services:| Service | What it checks | Warn threshold |
|---|---|---|
| Database | Supabase connectivity and query latency | Query failure |
| AIS positions | Freshness of the most recent AIS position report | Older than 60 minutes |
| Data pipeline | Recency of the last completed ingestion job | Older than 2 hours |
| Visit pipeline | Recency of the last departed vessel visit update | Older than 3 hours |
- Operational — the service is healthy and data is fresh.
- Degraded — the service is responding but data is stale beyond its expected threshold.
- Down — the service failed its health check.
24-hour history
Below the current status, the page displays a visual timeline of health check results from the last 24 hours. Each colored bar represents a single check — green for operational, amber for degraded, and red for down. This makes it easy to spot intermittent issues or identify when a disruption started and resolved.How checks run
Health checks run automatically every 5 minutes. Each check records the service status, response latency, and any error details to theservice_uptime table. The status page reads from this table to render the current and historical view.
If a service fails three or more consecutive health checks, Overwatch logs an alert to the ingestion log so operators are notified.
Health API endpoint
You can also query service health programmatically:200with"status": "healthy"when all checks pass.200with"status": "degraded"when some checks return warnings but none have failed.503with"status": "unhealthy"when any check has failed.
Worker heartbeats
In addition to the platform-level service checks above, long-running ingestion workers report periodic heartbeats so you can verify that each worker is alive and processing data. Heartbeats are visible on the cockpit Workers view alongside the headline status page.| Worker | Beat interval | Reported metadata |
|---|---|---|
overwatch-ais-ingest | 60 seconds | Positions ingested, vessels upserted, buffer size, circuit-breaker state |
overwatch-equasis-direct | Per enrichment cycle | Account in use, vessels enriched, vessels failed |
overwatch-equasis-vpn | Per enrichment cycle | Account in use, vessels enriched, vessels failed |
overwatch-scraper | 60 seconds | Jobs completed, jobs failed |