Health Dependencies
GET/health/dependencies
Safe, dependency/posture diagnostic for #1050.
Always returns 200 (even when a dependency is down) so operators can
parse the body's status field (ok/degraded/failing)
instead of reasoning about HTTP status. Same convention as
/health/graph and /health/steward (also always 200 with state
in the body) — health problems should be visible in the payload, not
hidden behind a 503 the alerting SLO treats as "process down".
No downstream I/O occurs here: every check is a synchronous runtime-state derivation or a read of an already-collected cached sample. A health request must not form a thundering herd against a degraded DB, Redis, or Kafka dependency.
M-HLTH E-HLTH.3 (#1050) landed the collector this docstring used to
promise. Measured per-dependency state (status, latency_ms,
last_success_at, age_seconds, error_class) now comes from
halo_api.services.dependency_health's background probe cycle -- the
health.dependency_probe scheduler job -- so the numbers are real
measurements, while the request path still does zero I/O. Staleness is
reported honestly (age_seconds/stale) rather than hidden: a
reading the collector could not refresh says so, instead of a fresh-
looking value that is actually minutes old.
Component shape: status (one of ok/degraded/failing) plus
allowlisted posture/measurement fields. Never includes connection
strings, secrets, tenant data, or raw exception messages -- failures are
reported as an exception TYPE name only (error_class), because driver
error messages routinely embed host, port, user and database name.
Responses
- 200
- 401
- 403
- 429
- 500
Successful Response
Response Headers
Current tenant quota state (draft-ietf-httpapi-ratelimit-headers structured field): "tenant";r=<remaining>;t=<seconds-to-reset>. Emitted on every response when per-tenant rate limiting is enabled (ARMOR_TENANT_RATE_LIMIT_PER_MIN > 0; off by default).
The quota policy the RateLimit header reports against: "tenant";q=<limit>;w=<window-seconds>.
Request correlation id — present on every response; quote it when reporting an issue. Error bodies carry the same value as correlation_id.
Missing or invalid credential.
Response Headers
Current tenant quota state (draft-ietf-httpapi-ratelimit-headers structured field): "tenant";r=<remaining>;t=<seconds-to-reset>. Emitted on every response when per-tenant rate limiting is enabled (ARMOR_TENANT_RATE_LIMIT_PER_MIN > 0; off by default).
The quota policy the RateLimit header reports against: "tenant";q=<limit>;w=<window-seconds>.
Request correlation id — present on every response; quote it when reporting an issue. Error bodies carry the same value as correlation_id.
Authenticated but not permitted.
Response Headers
Current tenant quota state (draft-ietf-httpapi-ratelimit-headers structured field): "tenant";r=<remaining>;t=<seconds-to-reset>. Emitted on every response when per-tenant rate limiting is enabled (ARMOR_TENANT_RATE_LIMIT_PER_MIN > 0; off by default).
The quota policy the RateLimit header reports against: "tenant";q=<limit>;w=<window-seconds>.
Request correlation id — present on every response; quote it when reporting an issue. Error bodies carry the same value as correlation_id.
Rate limit exceeded.
Response Headers
Current tenant quota state (draft-ietf-httpapi-ratelimit-headers structured field): "tenant";r=<remaining>;t=<seconds-to-reset>. Emitted on every response when per-tenant rate limiting is enabled (ARMOR_TENANT_RATE_LIMIT_PER_MIN > 0; off by default).
The quota policy the RateLimit header reports against: "tenant";q=<limit>;w=<window-seconds>.
Seconds to wait before retrying (on 429 responses).
Request correlation id — present on every response; quote it when reporting an issue. Error bodies carry the same value as correlation_id.
Unhandled server error.
Response Headers
Current tenant quota state (draft-ietf-httpapi-ratelimit-headers structured field): "tenant";r=<remaining>;t=<seconds-to-reset>. Emitted on every response when per-tenant rate limiting is enabled (ARMOR_TENANT_RATE_LIMIT_PER_MIN > 0; off by default).
The quota policy the RateLimit header reports against: "tenant";q=<limit>;w=<window-seconds>.
Request correlation id — present on every response; quote it when reporting an issue. Error bodies carry the same value as correlation_id.
Optional comments unlock after a short time on this docs site.
Ask the docs
Tier-scoped answers from this portal corpus (extractive; no external LLM).
Comments
Loading comments…
Suggest an edit
Propose a correction. Staff review every suggestion and open a draft PR; nothing publishes without CI.