@@ -9,6 +9,7 @@ use axum::response::Response;
9
9
use axum:: routing:: get;
10
10
use axum:: { BoxError , Router } ;
11
11
use axum_client_ip:: SecureClientIpSource ;
12
+ use axum_prometheus:: PrometheusMetricLayer ;
12
13
use hyper:: { Request , StatusCode } ;
13
14
use torrust_tracker_configuration:: DEFAULT_TIMEOUT ;
14
15
use tower:: timeout:: TimeoutLayer ;
@@ -30,6 +31,8 @@ use crate::servers::http::HTTP_TRACKER_LOG_TARGET;
30
31
#[ allow( clippy:: needless_pass_by_value) ]
31
32
#[ instrument( skip( tracker, server_socket_addr) ) ]
32
33
pub fn router ( tracker : Arc < Tracker > , server_socket_addr : SocketAddr ) -> Router {
34
+ let ( prometheus_layer, metric_handle) = PrometheusMetricLayer :: pair ( ) ;
35
+
33
36
Router :: new ( )
34
37
// Health check
35
38
. route ( "/health_check" , get ( health_check:: handler) )
@@ -39,6 +42,8 @@ pub fn router(tracker: Arc<Tracker>, server_socket_addr: SocketAddr) -> Router {
39
42
// Scrape request
40
43
. route ( "/scrape" , get ( scrape:: handle_without_key) . with_state ( tracker. clone ( ) ) )
41
44
. route ( "/scrape/:key" , get ( scrape:: handle_with_key) . with_state ( tracker) )
45
+ . route ( "/metrics" , get ( || async move { metric_handle. render ( ) } ) )
46
+ . layer ( prometheus_layer)
42
47
// Add extension to get the client IP from the connection info
43
48
. layer ( SecureClientIpSource :: ConnectInfo . into_extension ( ) )
44
49
. layer ( CompressionLayer :: new ( ) )
0 commit comments