diff options
| author | tv <tv@krebsco.de> | 2026-10-26 20:34:51 +0100 |
|---|---|---|
| committer | tv <tv@krebsco.de> | 2026-10-26 20:34:51 +0100 |
| commit | 75c1d950314fb7fa8b88bae957e6083bb1091001 (patch) | |
| tree | a81e8fa40e44f0378d2af43787a662c0bc2c2933 /src/api/health.rs | |
| parent | c7d6d626f7d9cad8c99741dab48559610c32ba7b (diff) | |
add unauthenticated /health and /ready endpoints
Diffstat (limited to 'src/api/health.rs')
| -rw-r--r-- | src/api/health.rs | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/src/api/health.rs b/src/api/health.rs new file mode 100644 index 0000000..b1e4523 --- /dev/null +++ b/src/api/health.rs @@ -0,0 +1,20 @@ +//! `GET /health` and `GET /ready`: unauthenticated, for supervisors and load balancers. +//! They say whether the node is up and whether it serves the store, nothing more. + +use axum::{extract::State, http::StatusCode}; + +use crate::state::AppState; + +/// The HTTP API is up. +pub(crate) async fn health() -> &'static str { + "ok\n" +} + +/// The node serves reads and writes: ready, not joining or rejoining. +pub(crate) async fn ready(State(state): State<AppState>) -> (StatusCode, &'static str) { + if state.is_ready().await { + (StatusCode::OK, "ready\n") + } else { + (StatusCode::SERVICE_UNAVAILABLE, "not ready\n") + } +} |
