Health & Readiness Checks
Dagy separates a cheap **liveness** signal from a real **readiness** probe (`src/dagy_api/sla.py`), so load balancers stay fast while operators can still actively verify dependencies.
/health — liveness (unauthenticated)
Configuration-only, no network calls. It reports each dependency as
healthy when configured or unconfigured when not — it never proves the
dependency is reachable, so it cannot be knocked over by a downstream outage.
Suitable for frequent load-balancer polling.
/health/detailed — readiness (authenticated)
Actively probes each dependency with a ~2s per-dependency latency budget and returns measured latency:
| Component | Probe |
|---|---|
dynamodb | describe_table on the configured flows table |
s3 | head_bucket on the artifacts bucket |
sqs | get_queue_attributes on the events queue |
Each probe uses a botocore config with max_attempts=0 and the latency budget
as connect/read timeout, so a slow dependency is reported (as degraded) rather
than making the probe hang.
Status roll-up
| Component status | Effect on overall |
|---|---|
healthy | no change |
unconfigured | informational — does not degrade overall |
degraded (e.g. over the 2s budget) | overall → degraded |
unhealthy (probe error) | overall → unhealthy |
Treating unconfigured as informational means an operator running without S3
configured does not see a false-red health check.