From b94f8e694bf01f5dba9ce2c01f589463a3dfbc69 Mon Sep 17 00:00:00 2001 From: Toby Vincent Date: Wed, 9 Oct 2024 18:23:58 -0500 Subject: feat!: rewrite to use traits and streams --- src/api.rs | 57 +++++---------------------------------------------------- 1 file changed, 5 insertions(+), 52 deletions(-) (limited to 'src/api.rs') diff --git a/src/api.rs b/src/api.rs index 5a8deb6..bab2043 100644 --- a/src/api.rs +++ b/src/api.rs @@ -1,57 +1,10 @@ -use std::collections::HashMap; - -use axum::{extract::State, response::IntoResponse, Json}; -use serde::{Deserialize, Serialize}; - -use crate::{service::ServiceHandles, Status}; +use crate::AppState; pub mod services; +pub mod sse; -pub fn router() -> axum::Router { - use axum::routing::get; - +pub fn router() -> axum::Router { axum::Router::new() - .route("/healthcheck", get(healthcheck)) - .merge(services::router()) -} - -#[derive(Debug, Clone, Default, Serialize, Deserialize)] -pub struct Health { - #[serde(flatten)] - pub status: Status, - pub checks: HashMap, -} - -impl From for Health { - fn from(value: T) -> Self { - Health { - status: value.into(), - ..Default::default() - } - } -} - -impl IntoResponse for Health { - fn into_response(self) -> axum::response::Response { - Json(self).into_response() - } -} - -pub async fn healthcheck(State(services): State) -> Health { - let checks = services - .iter() - .map(|(name, srv)| (name.clone(), srv.status())) - .collect::>(); - - let status = match checks - .values() - .filter(|s| !matches!(s, Status::Ok)) - .count() - { - 0 => Status::Ok, - 1 => Status::Error(Some("1 issue detected".to_string())), - n => Status::Error(Some(format!("{n} issues detected"))), - }; - - Health { status, checks } + .nest("/sse", sse::router()) + .nest("/status", services::router()) } -- cgit v1.2.3-70-g09d2