use axum::extract::State;
use std::sync::Arc;
use tokio::sync::RwLock;
use crate::api::metrics::render::{MetricsRenderInputs, render_prometheus_exposition};
use crate::app_state::AppState;
pub type SharedState = Arc<RwLock<AppState>>;
pub async fn metrics_handler(State(state): State<SharedState>) -> String {
let state = state.read().await;
let inputs = MetricsRenderInputs {
gpu_info: &state.gpu_info,
process_info: &state.process_info,
cpu_info: &state.cpu_info,
memory_info: &state.memory_info,
storage_info: &state.storage_info,
runtime_environment: &state.runtime_environment,
chassis_info: &state.chassis_info,
vgpu_info: &state.vgpu_info,
mig_info: &state.mig_info,
energy_integrator: Some(state.energy.integrator()),
};
render_prometheus_exposition(&inputs)
}