diff --git a/packages/backend/src/api.rs b/packages/backend/src/api.rs index 1ff86de..a29b256 100644 --- a/packages/backend/src/api.rs +++ b/packages/backend/src/api.rs @@ -1,5 +1,6 @@ use actix_web::web; +use crate::health; use crate::note; use crate::status; @@ -7,6 +8,7 @@ pub fn init(cfg: &mut web::ServiceConfig) { cfg.service( web::scope("/api") .service(note::init()) - .service(status::init()), + .service(status::init()) + .service(health::init()), ); } diff --git a/packages/backend/src/health/mod.rs b/packages/backend/src/health/mod.rs new file mode 100644 index 0000000..f5208e5 --- /dev/null +++ b/packages/backend/src/health/mod.rs @@ -0,0 +1,3 @@ +mod routes; + +pub use routes::*; diff --git a/packages/backend/src/health/routes.rs b/packages/backend/src/health/routes.rs new file mode 100644 index 0000000..5e985cc --- /dev/null +++ b/packages/backend/src/health/routes.rs @@ -0,0 +1,16 @@ +use actix_web::{get, web, HttpResponse, Responder, Scope}; + +use crate::store; + +#[get("/")] +async fn get_live() -> impl Responder { + if store::can_reach_redis() { + return HttpResponse::Ok(); + } else { + return HttpResponse::ServiceUnavailable(); + } +} + +pub fn init() -> Scope { + web::scope("/live").service(get_live) +} diff --git a/packages/backend/src/main.rs b/packages/backend/src/main.rs index 28262ce..54c79e7 100644 --- a/packages/backend/src/main.rs +++ b/packages/backend/src/main.rs @@ -1,8 +1,10 @@ use actix_web::{ middleware::{self, Logger}, - web, App, HttpServer, + web::{self}, + App, HttpServer, }; use dotenv::dotenv; +use log::error; #[macro_use] extern crate lazy_static; @@ -10,6 +12,7 @@ extern crate lazy_static; mod api; mod client; mod config; +mod health; mod note; mod size; mod status; @@ -20,6 +23,11 @@ async fn main() -> std::io::Result<()> { dotenv().ok(); env_logger::init_from_env(env_logger::Env::new().default_filter_or(config::VERBOSITY.as_str())); + if !store::can_reach_redis() { + error!("cannot reach redis"); + panic!("canont reach redis"); + } + return HttpServer::new(|| { App::new() .wrap(Logger::new("\"%r\" %s %b %T")) diff --git a/packages/backend/src/store.rs b/packages/backend/src/store.rs index f683132..d18d947 100644 --- a/packages/backend/src/store.rs +++ b/packages/backend/src/store.rs @@ -19,6 +19,14 @@ fn get_connection() -> Result { .map_err(|_| "Unable to connect to redis") } +pub fn can_reach_redis() -> bool { + let conn = get_connection(); + return match conn { + Ok(_) => true, + Err(_) => false, + }; +} + pub fn set(id: &String, note: &Note) -> Result<(), &'static str> { let serialized = serde_json::to_string(¬e.clone()).unwrap(); let mut conn = get_connection()?;