Skip to main content

platform_http/
health.rs

1use axum::Json;
2use axum::extract::State;
3use platform_core::{AppContext, HealthStatus};
4use serde::Serialize;
5
6#[derive(Debug, Serialize)]
7pub struct HealthResponse {
8    pub status: HealthStatus,
9}
10
11pub async fn livez() -> Json<HealthResponse> {
12    Json(HealthResponse {
13        status: HealthStatus::Healthy,
14    })
15}
16
17pub async fn readyz(State(ctx): State<AppContext>) -> Json<HealthResponse> {
18    let reports = ctx.health.check_all().await;
19    let status = if reports
20        .iter()
21        .any(|report| report.status == HealthStatus::Unhealthy)
22    {
23        HealthStatus::Unhealthy
24    } else {
25        HealthStatus::Healthy
26    };
27
28    Json(HealthResponse { status })
29}