use axum::{ Router, body::Body, extract::{Path, State}, response::Response, routing::get, }; use sessionhash::RequestContext; use crate::{RuntimeError, fs, state::SplormState}; pub fn routes() -> Router { Router::new().route("/stats/now/{name}", get(stats)) } async fn stats( Path(name): Path, State(state): State, ctx: RequestContext, ) -> Result { tracing::trace!("{ctx} GET /api/stats/{name}"); let graphs = { let mut connector = state.gatherer_thread().await; connector.regular_graphs().await }; let file_path = match name.as_str() { "current_hostmeminfo.gif" => graphs.meminfo, "current_hostnetinfo.gif" => graphs.meminfo, "current_hostcpuinfo.gif" => graphs.cpuinfo, _ => return Err(RuntimeError::generic_404()), }; tracing::trace!("graph {name} system_path={file_path}"); let file = fs::unsafe_read_file(file_path).await?; Response::builder() .header("content-type", "image/gif") .status(200) .body(Body::from(file)) .map_err(|_| RuntimeError::Unknown) }