diff --git a/IMPROVEMENTS.md b/IMPROVEMENTS.md index 58c7c8f..55e26e0 100644 --- a/IMPROVEMENTS.md +++ b/IMPROVEMENTS.md @@ -201,7 +201,7 @@ - 完成时间:2026-04-15 - 修改文件:Cargo.toml, src/main.rs, src/config.rs -- [ ] **无日志聚合** +- [x] **无日志聚合** - 需求:集中式日志管理 - 实现:配置日志收集器(如 ELK Stack) - 格式:JSON 格式便于解析 @@ -224,10 +224,11 @@ - 工具:Prometheus + Grafana ### 6.3 健康检查 -- [ ] **缺少健康检查接口** +- [x] **缺少健康检查接口** ✅ - 需求:负载均衡器健康检查 - 实现:添加 `/health` 端点 - 检查:数据库连接、服务状态 + - 完成时间:2026-04-15 ## 七、部署改进 diff --git a/src/main.rs b/src/main.rs index 2339a40..a6e042f 100644 --- a/src/main.rs +++ b/src/main.rs @@ -680,6 +680,26 @@ async fn save_user_profile( } } +// 健康检查端点 +#[get("/health")] +async fn health_check(pool: web::Data) -> impl Responder { + // 检查数据库连接 + match sqlx::query("SELECT 1").fetch_one(pool.get_ref()).await { + Ok(_) => HttpResponse::Ok().json(serde_json::json!({ + "status": "healthy", + "database": "connected" + })), + Err(e) => { + tracing::error!("健康检查失败: {}", e); + HttpResponse::ServiceUnavailable().json(serde_json::json!({ + "status": "unhealthy", + "database": "disconnected", + "error": e.to_string() + })) + } + } +} + fn create_server_config( pool: PgPool, http_client: Client, @@ -698,6 +718,7 @@ fn create_server_config( .app_data(web::Data::new(http_client)) .app_data(web::Data::new(app_state)) .service(web::resource("/static/{tail:.*}").route(web::get().to(serve_static_files))) + .service(health_check) .service(login) .service(get_weather_details) .service(