@@ -30,6 +30,7 @@ use std::net::SocketAddr;
3030use std:: rc:: Rc ;
3131use std:: str:: FromStr ;
3232use std:: sync:: Arc ;
33+ use std:: time:: SystemTime ;
3334
3435use cubesql:: { telemetry:: ReportingLogger , CubeError } ;
3536
@@ -185,6 +186,8 @@ async fn handle_sql_query(
185186 stream_methods : WritableStreamMethods ,
186187 sql_query : & String ,
187188) -> Result < ( ) , CubeError > {
189+ let start_time = SystemTime :: now ( ) ;
190+
188191 let config = services
189192 . injector ( )
190193 . get_service_typed :: < dyn ConfigObj > ( )
@@ -222,7 +225,26 @@ async fn handle_sql_query(
222225 . state
223226 . set_auth_context ( Some ( native_auth_ctx. clone ( ) ) ) ;
224227
225- let connection_id = session. state . connection_id ;
228+ if let Some ( auth_context) = session. state . auth_context ( ) {
229+ session
230+ . session_manager
231+ . server
232+ . transport
233+ . log_load_state (
234+ None ,
235+ auth_context,
236+ session. state . get_load_request_meta ( "sql" ) ,
237+ "Load Request" . to_string ( ) ,
238+ serde_json:: json!( {
239+ "query" : {
240+ "sql" : sql_query,
241+ }
242+ } ) ,
243+ )
244+ . await ?;
245+ }
246+
247+ let session_clone = Arc :: clone ( & session) ;
226248
227249 let execute = || async move {
228250 // todo: can we use compiler_cache?
@@ -310,8 +332,56 @@ async fn handle_sql_query(
310332 } ;
311333
312334 let result = execute ( ) . await ;
335+ let duration = start_time. elapsed ( ) . unwrap ( ) . as_millis ( ) as u64 ;
336+
337+ match & result {
338+ Ok ( _) => {
339+ session_clone
340+ . session_manager
341+ . server
342+ . transport
343+ . log_load_state (
344+ None ,
345+ session_clone. state . auth_context ( ) . unwrap ( ) ,
346+ session_clone. state . get_load_request_meta ( "sql" ) ,
347+ "Load Request Success" . to_string ( ) ,
348+ serde_json:: json!( {
349+ "query" : {
350+ "sql" : sql_query,
351+ } ,
352+ "apiType" : "sql" ,
353+ "duration" : duration,
354+ "isDataQuery" : true
355+ } ) ,
356+ )
357+ . await ?;
358+ }
359+ Err ( err) => {
360+ session_clone
361+ . session_manager
362+ . server
363+ . transport
364+ . log_load_state (
365+ None ,
366+ session_clone. state . auth_context ( ) . unwrap ( ) ,
367+ session_clone. state . get_load_request_meta ( "sql" ) ,
368+ "Cube SQL Error" . to_string ( ) ,
369+ serde_json:: json!( {
370+ "query" : {
371+ "sql" : sql_query
372+ } ,
373+ "apiType" : "sql" ,
374+ "duration" : duration,
375+ "error" : err. message,
376+ } ) ,
377+ )
378+ . await ?;
379+ }
380+ }
313381
314- session_manager. drop_session ( connection_id) . await ;
382+ session_manager
383+ . drop_session ( session_clone. state . connection_id )
384+ . await ;
315385
316386 result
317387}
0 commit comments