| 1234567891011121314151617181920212223242526272829303132333435363738394041 | #[cfg(feature = "prometheus")]use std::time::Instant;#[cfg(feature = "prometheus")]use axum::body::Body;#[cfg(feature = "prometheus")]use axum::extract::MatchedPath;#[cfg(feature = "prometheus")]use axum::http::Request;#[cfg(feature = "prometheus")]use axum::middleware::Next;#[cfg(feature = "prometheus")]use axum::response::Response;#[cfg(feature = "prometheus")]use cdk_prometheus::global;/// Global metrics middleware that uses the singleton instance./// This version doesn't require access to MintState and can be used in any Axum application.#[cfg(feature = "prometheus")]pub async fn global_metrics_middleware(    matched_path: Option<MatchedPath>,    req: Request<Body>,    next: Next,) -> Response {    let start_time = Instant::now();    let response = next.run(req).await;    let endpoint_path = matched_path        .map(|mp| mp.as_str().to_string())        .unwrap_or_default();    let status_code = response.status().as_u16().to_string();    let request_duration = start_time.elapsed().as_secs_f64();    // Always use global metrics    global::record_http_request(&endpoint_path, &status_code);    global::record_http_request_duration(request_duration, &endpoint_path);    response}
 |