summaryrefslogtreecommitdiffstats
path: root/src/api/health.rs
diff options
context:
space:
mode:
authortv <tv@krebsco.de>2026-10-26 20:34:51 +0100
committertv <tv@krebsco.de>2026-10-26 20:34:51 +0100
commit75c1d950314fb7fa8b88bae957e6083bb1091001 (patch)
treea81e8fa40e44f0378d2af43787a662c0bc2c2933 /src/api/health.rs
parentc7d6d626f7d9cad8c99741dab48559610c32ba7b (diff)
add unauthenticated /health and /ready endpoints
Diffstat (limited to 'src/api/health.rs')
-rw-r--r--src/api/health.rs20
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")
+ }
+}