From 30316adbc563a6f034e3671ef7d256c1d1dc75b8 Mon Sep 17 00:00:00 2001 From: Brandon Thomas Date: Sun, 24 Mar 2024 17:26:38 -0400 Subject: [PATCH] status endpoint for dummy app (for health checks) --- .../endpoints/dummy_health_check_handler.rs | 35 +++++++++++++++ .../web/dummy_service/src/endpoints/mod.rs | 2 + .../src/endpoints/simple_handler.rs | 9 ++++ .../service/web/dummy_service/src/handlers.rs | 0 crates/service/web/dummy_service/src/main.rs | 45 +++++++++++-------- 5 files changed, 72 insertions(+), 19 deletions(-) create mode 100644 crates/service/web/dummy_service/src/endpoints/dummy_health_check_handler.rs create mode 100644 crates/service/web/dummy_service/src/endpoints/mod.rs create mode 100644 crates/service/web/dummy_service/src/endpoints/simple_handler.rs delete mode 100644 crates/service/web/dummy_service/src/handlers.rs diff --git a/crates/service/web/dummy_service/src/endpoints/dummy_health_check_handler.rs b/crates/service/web/dummy_service/src/endpoints/dummy_health_check_handler.rs new file mode 100644 index 0000000000..5145802765 --- /dev/null +++ b/crates/service/web/dummy_service/src/endpoints/dummy_health_check_handler.rs @@ -0,0 +1,35 @@ +use actix_web::HttpResponse; +use chrono::{NaiveDateTime, Utc}; +use serde_derive::Serialize; + +#[derive(Serialize)] +pub struct HealthCheckResponse { + pub success: bool, + pub is_healthy: bool, + pub last_db_time: Option, + pub healthy_check_consecutive_count: Option, + pub unhealthy_check_consecutive_count: Option, + pub server_build_sha: String, + pub server_hostname: String, +} + +pub async fn dummy_health_check_handler() -> HttpResponse { + let response = HealthCheckResponse { + success: true, + is_healthy: true, + last_db_time: Some(Utc::now().naive_utc()), + healthy_check_consecutive_count: Some(1_234), + unhealthy_check_consecutive_count: None, + server_build_sha: "aabbcc".to_string(), + server_hostname: "hostname".to_string(), + }; + + match serde_json::to_string(&response) { + Ok(body) => HttpResponse::Ok() + .content_type("application/json") + .body(body), + Err(_err) => HttpResponse::Ok() + .content_type("application/json") + .body("{\"success\": false}"), + } +} diff --git a/crates/service/web/dummy_service/src/endpoints/mod.rs b/crates/service/web/dummy_service/src/endpoints/mod.rs new file mode 100644 index 0000000000..5d14da7195 --- /dev/null +++ b/crates/service/web/dummy_service/src/endpoints/mod.rs @@ -0,0 +1,2 @@ +pub mod dummy_health_check_handler; +pub mod simple_handler; \ No newline at end of file diff --git a/crates/service/web/dummy_service/src/endpoints/simple_handler.rs b/crates/service/web/dummy_service/src/endpoints/simple_handler.rs new file mode 100644 index 0000000000..76d3e66fe7 --- /dev/null +++ b/crates/service/web/dummy_service/src/endpoints/simple_handler.rs @@ -0,0 +1,9 @@ +use actix_http::StatusCode; +use actix_web::HttpResponse; + +pub async fn simple_handler() -> HttpResponse { + HttpResponse::build(StatusCode::OK) + .content_type("application/json; charset=utf-8") + .body("{\"success\": true}") +} + diff --git a/crates/service/web/dummy_service/src/handlers.rs b/crates/service/web/dummy_service/src/handlers.rs deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/crates/service/web/dummy_service/src/main.rs b/crates/service/web/dummy_service/src/main.rs index 172407e268..eeb0e409b8 100644 --- a/crates/service/web/dummy_service/src/main.rs +++ b/crates/service/web/dummy_service/src/main.rs @@ -1,16 +1,20 @@ //! This service is meant to help with debugging. -use actix_http::StatusCode; -use actix_web::{App, HttpResponse, HttpServer, web}; +use actix_http::body::MessageBody; +use actix_service::ServiceFactory; +use actix_web::{App, Error, HttpServer, web}; +use actix_web::dev::{ServiceRequest, ServiceResponse}; use actix_web::middleware::{Compress, DefaultHeaders, Logger}; use actix_helpers::route_builder::RouteBuilder; use errors::AnyhowResult; +use crate::endpoints::dummy_health_check_handler::dummy_health_check_handler; +use crate::endpoints::simple_handler::simple_handler; use crate::env_args::env_args; +pub mod endpoints; pub mod env_args; -pub mod handlers; pub const DEFAULT_RUST_LOG: &str = concat!( "debug,", @@ -43,11 +47,7 @@ async fn main() -> AnyhowResult<()> { .header("X-Backend-Hostname", &server_hostname)) .wrap(Compress::default()); - RouteBuilder::from_app(app) - .add_get("/", simple_handler) - .add_get("/_status", simple_handler) - .into_app() - .default_service(web::route().to(simple_handler)) + build_routes(app) }) .bind(&env_args.bind_address)? .workers(env_args.num_workers) @@ -60,11 +60,7 @@ async fn main() -> AnyhowResult<()> { .wrap(DefaultHeaders::new() .header("X-Backend-Hostname", &server_hostname)); - RouteBuilder::from_app(app) - .add_get("/", simple_handler) - .add_get("/_status", simple_handler) - .into_app() - .default_service(web::route().to(simple_handler)) + build_routes(app) }) .bind(&env_args.bind_address)? .workers(env_args.num_workers) @@ -75,9 +71,20 @@ async fn main() -> AnyhowResult<()> { Ok(()) } -pub async fn simple_handler() -> HttpResponse { - HttpResponse::build(StatusCode::OK) - .content_type("application/json; charset=utf-8") - .body("{\"success\": true}") -} - +fn build_routes (app: App) -> App + where + B: MessageBody, + T: ServiceFactory< + ServiceRequest, + Config = (), + Response = ServiceResponse, + Error = Error, + InitError = (), + >, +{ + RouteBuilder::from_app(app) + .add_get("/", simple_handler) + .add_get("/_status", dummy_health_check_handler) + .into_app() + .default_service(web::route().to(simple_handler)) +} \ No newline at end of file