@@ -24,13 +24,18 @@ use cb_common::{
24
24
constants:: COMMIT_BOOST_VERSION ,
25
25
types:: { Jwt , ModuleId } ,
26
26
} ;
27
+ use cb_metrics:: provider:: MetricsProvider ;
27
28
use eyre:: { Context , Result } ;
28
29
use headers:: { authorization:: Bearer , Authorization } ;
29
30
use tokio:: { net:: TcpListener , sync:: RwLock } ;
30
31
use tracing:: { debug, error, info, warn} ;
31
32
use uuid:: Uuid ;
32
33
33
- use crate :: { error:: SignerModuleError , manager:: SigningManager } ;
34
+ use crate :: {
35
+ error:: SignerModuleError ,
36
+ manager:: SigningManager ,
37
+ metrics:: { uri_to_tag, SIGNER_METRICS_REGISTRY , SIGNER_STATUS } ,
38
+ } ;
34
39
35
40
/// Implements the Signer API and provides a service for signing requests
36
41
pub struct SigningService ;
@@ -72,13 +77,15 @@ impl SigningService {
72
77
info ! ( version = COMMIT_BOOST_VERSION , modules =? module_ids, port =? config. server_port, loaded_consensus, loaded_proxies, "Starting signing service" ) ;
73
78
74
79
let state = SigningState { manager : RwLock :: new ( manager) . into ( ) , jwts : config. jwts . into ( ) } ;
80
+ SigningService :: init_metrics ( ) ?;
75
81
76
82
let app = axum:: Router :: new ( )
77
83
. route ( REQUEST_SIGNATURE_PATH , post ( handle_request_signature) )
78
84
. route ( GET_PUBKEYS_PATH , get ( handle_get_pubkeys) )
79
85
. route ( GENERATE_PROXY_KEY_PATH , post ( handle_generate_proxy) )
80
86
. with_state ( state. clone ( ) )
81
- . route_layer ( middleware:: from_fn_with_state ( state. clone ( ) , jwt_auth) ) ;
87
+ . route_layer ( middleware:: from_fn_with_state ( state. clone ( ) , jwt_auth) )
88
+ . route_layer ( middleware:: from_fn ( log_request) ) ;
82
89
let status_router = axum:: Router :: new ( ) . route ( STATUS_PATH , get ( handle_status) ) ;
83
90
84
91
let address = SocketAddr :: from ( ( [ 0 , 0 , 0 , 0 ] , config. server_port ) ) ;
@@ -88,6 +95,10 @@ impl SigningService {
88
95
. await
89
96
. wrap_err ( "signer server exited" )
90
97
}
98
+
99
+ fn init_metrics ( ) -> Result < ( ) > {
100
+ MetricsProvider :: load_and_run ( SIGNER_METRICS_REGISTRY . clone ( ) )
101
+ }
91
102
}
92
103
93
104
/// Authentication middleware layer
@@ -109,6 +120,14 @@ async fn jwt_auth(
109
120
Ok ( next. run ( req) . await )
110
121
}
111
122
123
+ /// Requests logging middleware layer
124
+ async fn log_request ( req : Request , next : Next ) -> Result < Response , SignerModuleError > {
125
+ let url = & req. uri ( ) . clone ( ) ;
126
+ let response = next. run ( req) . await ;
127
+ SIGNER_STATUS . with_label_values ( & [ response. status ( ) . as_str ( ) , uri_to_tag ( url) ] ) . inc ( ) ;
128
+ Ok ( response)
129
+ }
130
+
112
131
/// Status endpoint for the Signer API
113
132
async fn handle_status ( ) -> Result < impl IntoResponse , SignerModuleError > {
114
133
Ok ( ( StatusCode :: OK , "OK" ) )
0 commit comments