@@ -45,19 +45,19 @@ struct State {
4545 rpc_apis : Arc < rpc_apis:: FullDependencies > ,
4646}
4747
48- fn handle_request ( req : Request < Body > , state : & Arc < Mutex < State > > ) -> Response < Body > {
48+ async fn handle_request ( req : Request < Body > , state : Arc < Mutex < State > > ) -> Response < Body > {
4949 let ( parts, _body) = req. into_parts ( ) ;
5050 match ( parts. method , parts. uri . path ( ) ) {
5151 ( Method :: GET , "/metrics" ) => {
5252 let start = Instant :: now ( ) ;
53- let mut reg = prometheus:: Registry :: new ( ) ;
5453
55- let state = state. lock ( ) ;
56-
57- state. rpc_apis . client . prometheus_metrics ( & mut reg) ;
58- state. rpc_apis . sync . prometheus_metrics ( & mut reg) ;
59-
60- drop ( state) ;
54+ let mut reg = tokio:: task:: spawn_blocking ( move || {
55+ let mut reg = prometheus:: Registry :: new ( ) ;
56+ let state = state. lock ( ) ;
57+ state. rpc_apis . client . prometheus_metrics ( & mut reg) ;
58+ state. rpc_apis . sync . prometheus_metrics ( & mut reg) ;
59+ reg
60+ } ) . await . expect ( "The prometheus collection has panicked" ) ;
6161
6262 let elapsed = start. elapsed ( ) ;
6363 let ms = ( elapsed. as_secs ( ) as i64 ) * 1000 + ( elapsed. subsec_millis ( ) as i64 ) ;
@@ -98,12 +98,12 @@ pub fn start_prometheus_metrics(conf: &MetricsConfiguration, deps: &rpc::Depende
9898 let state = Arc :: new ( Mutex :: new ( state) ) ;
9999
100100 deps. executor . spawn_std ( async move {
101- let make_service = make_service_fn ( move |_| {
102- let state = state. clone ( ) ;
103- async move {
104- Ok :: < _ , hyper:: Error > ( service_fn ( move |req| {
105- let response = handle_request ( req, & state) ;
106- async move { Ok :: < _ , hyper:: Error > ( response) }
101+ let make_service = make_service_fn ( move |_| {
102+ let state = state. clone ( ) ;
103+ async move {
104+ Ok :: < _ , hyper:: Error > ( service_fn ( move |req| {
105+ let response = handle_request ( req, state. clone ( ) ) ;
106+ async move { Ok :: < _ , hyper:: Error > ( response. await ) }
107107 } ) )
108108 }
109109 } ) ;
0 commit comments