use axum::Json;
use axum::extract::State;
use axum::http::StatusCode;
use axum::response::IntoResponse;
use serde_json::{Value, json};
use crate::state::AppState;
pub async fn health(State(state): State<AppState>) -> Json<Value> {
let jobs = state.crawl_jobs.read().await;
Json(json!({
"status": "ok",
"version": env!("CARGO_PKG_VERSION"),
"active_crawl_jobs": jobs.len(),
}))
}
pub async fn ready(State(state): State<AppState>) -> impl IntoResponse {
let renderer_health = state.renderer.check_health().await;
let all_ok = renderer_health.values().all(|v| *v);
let body = json!({
"status": if all_ok { "ready" } else { "degraded" },
"version": env!("CARGO_PKG_VERSION"),
"renderers": renderer_health,
});
let status = if all_ok {
StatusCode::OK
} else {
StatusCode::SERVICE_UNAVAILABLE
};
(status, Json::<Value>(body))
}