@@ -2,6 +2,7 @@ use apollo_router_core::prelude::graphql::*;
2
2
use derivative:: Derivative ;
3
3
use futures:: prelude:: * ;
4
4
use std:: sync:: Arc ;
5
+ use tracing:: { Instrument , Span } ;
5
6
use tracing_futures:: WithSubscriber ;
6
7
7
8
/// The default router of Apollo, suitable for most use cases.
@@ -88,6 +89,7 @@ pub struct ApolloPreparedQuery {
88
89
impl PreparedQuery for ApolloPreparedQuery {
89
90
#[ tracing:: instrument( level = "debug" ) ]
90
91
async fn execute ( self , request : Arc < Request > ) -> ResponseStream {
92
+ let span = Span :: current ( ) ;
91
93
stream:: once (
92
94
async move {
93
95
let response_task = self
@@ -98,13 +100,17 @@ impl PreparedQuery for ApolloPreparedQuery {
98
100
Arc :: clone ( & request) ,
99
101
Arc :: clone ( & self . service_registry ) ,
100
102
Arc :: clone ( & self . schema ) ,
101
- ) ;
102
- let query_task = self . query_cache . get_query ( & request. query ) ;
103
+ )
104
+ . instrument ( tracing:: info_span!( parent: & span, "execution" ) ) ;
105
+ let query_task = self
106
+ . query_cache
107
+ . get_query ( & request. query )
108
+ . instrument ( tracing:: info_span!( parent: & span, "query_parsing" ) ) ;
103
109
104
110
let ( mut response, query) = tokio:: join!( response_task, query_task) ;
105
111
106
112
if let Some ( query) = query {
107
- tracing:: debug_span!( "format_response" ) . in_scope ( || {
113
+ tracing:: debug_span!( parent : & span , "format_response" ) . in_scope ( || {
108
114
query. format_response ( & mut response, request. operation_name . as_deref ( ) )
109
115
} ) ;
110
116
}
0 commit comments