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}