@@ -62,6 +62,7 @@ impl<'a> RpcServiceT<'a> for RpcMiddleware {
62
62
fn call ( & self , mut request : jsonrpsee:: types:: Request < ' a > ) -> Self :: Future {
63
63
// track request
64
64
let span = info_span ! (
65
+ parent: None ,
65
66
"rpc::request" ,
66
67
cid = %new_cid( ) ,
67
68
rpc_client = field:: Empty ,
@@ -159,18 +160,17 @@ impl<'a> Future for RpcResponse<'a> {
159
160
fn poll ( self : std:: pin:: Pin < & mut Self > , cx : & mut std:: task:: Context < ' _ > ) -> std:: task:: Poll < Self :: Output > {
160
161
// poll future
161
162
let resp = self . project ( ) ;
162
- let response = resp. future_response . poll ( cx) ;
163
+ let mut response = resp. future_response . poll ( cx) ;
163
164
164
- // when ready, track response
165
- if let Poll :: Ready ( response) = & response {
165
+ // when ready, track response before returning
166
+ if let Poll :: Ready ( response) = & mut response {
166
167
let elapsed = resp. start . elapsed ( ) ;
167
- let _middleware_enter = response. extensions ( ) . enter_middleware_span ( ) ;
168
+ let middleware_enter = response. extensions ( ) . enter_middleware_span ( ) ;
168
169
169
- // trace response
170
+ // extract response data
170
171
let response_success = response. is_success ( ) ;
171
172
let response_result: JsonValue = from_json_str ( response. as_result ( ) ) ;
172
173
173
- #[ cfg_attr( not( feature = "metrics" ) , allow( unused_variables) ) ]
174
174
let ( level, error_code) = match response_result
175
175
. get ( "error" )
176
176
. and_then ( |v| v. get ( "code" ) )
@@ -183,6 +183,7 @@ impl<'a> Future for RpcResponse<'a> {
183
183
None => ( Level :: INFO , 0 ) ,
184
184
} ;
185
185
186
+ // track event
186
187
event_with ! (
187
188
level,
188
189
rpc_client = %resp. client,
@@ -199,7 +200,7 @@ impl<'a> Future for RpcResponse<'a> {
199
200
"rpc response"
200
201
) ;
201
202
202
- // metrify response
203
+ // track metrics
203
204
#[ cfg( feature = "metrics" ) ]
204
205
{
205
206
let rpc_result = match response_result. get ( "result" ) {
@@ -219,6 +220,10 @@ impl<'a> Future for RpcResponse<'a> {
219
220
response. is_success ( ) ,
220
221
) ;
221
222
}
223
+
224
+ // drop span because maybe jsonrpsee is keeping it alive
225
+ drop ( middleware_enter) ;
226
+ response. extensions_mut ( ) . remove :: < Span > ( ) ;
222
227
}
223
228
224
229
response
0 commit comments