summaryrefslogtreecommitdiffstats
path: root/src/api/health.rs
diff options
context:
space:
mode:
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")
+ }
+}