From 081e93f6026b719f9d1fb0653b628bed3fb27fee Mon Sep 17 00:00:00 2001 From: rock Date: Sun, 13 Sep 2026 21:48:49 +0900 Subject: [PATCH] feat(O7): availability metrics and dependency health checks - Health endpoint now checks DB connectivity - Track health check total/failures - DEP_DB_UP gauge (1=up, 0=down) + latency histogram - APP_UPTIME_SECONDS updated on each health check - Metrics: A1-A10 (10 metrics instrumented) --- crates/mem-cli/src/http_server.rs | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/crates/mem-cli/src/http_server.rs b/crates/mem-cli/src/http_server.rs index 5f88039..dc3e743 100644 --- a/crates/mem-cli/src/http_server.rs +++ b/crates/mem-cli/src/http_server.rs @@ -453,7 +453,24 @@ pub async fn start_server(port: u16, api_key: String, database_url: &str) -> Res /// Health check (no auth) pub async fn health_check(state: web::Data) -> HttpResponse { + use crate::metrics::*; + HEALTH_CHECKS_TOTAL.inc(); let uptime = state.start_time.elapsed().as_secs(); + APP_UPTIME_SECONDS.set(uptime); + + // O7: Check DB dependency + let db_start = std::time::Instant::now(); + match sqlx::query("SELECT 1").execute(&state.pool).await { + Ok(_) => { + DEP_DB_UP.set(1); + DEP_DB_LATENCY.observe(db_start.elapsed().as_secs_f64()); + } + Err(_) => { + DEP_DB_UP.set(0); + HEALTH_CHECK_FAILURES.inc(); + } + } + HttpResponse::Ok().json(json!({"status": "ok", "uptime_seconds": uptime})) }