bindcar/
middleware.rs

1// Copyright (c) 2025 Erick Bourgeois, firestoned
2// SPDX-License-Identifier: MIT
3
4//! Middleware for metrics collection
5
6use axum::{extract::Request, middleware::Next, response::Response};
7use std::time::Instant;
8
9use crate::metrics;
10
11/// Middleware to track HTTP request metrics
12pub async fn track_metrics(req: Request, next: Next) -> Response {
13    let start = Instant::now();
14    let method = req.method().to_string();
15    let path = req.uri().path().to_string();
16
17    // Process the request
18    let response = next.run(req).await;
19
20    // Record metrics
21    let duration = start.elapsed().as_secs_f64();
22    let status = response.status().as_u16();
23
24    metrics::record_http_request(&method, &path, status, duration);
25
26    response
27}