@@ -197,9 +197,8 @@ where
197197
198198 let ( tx, sentry_req) = sentry_request_from_http ( & req, with_pii) ;
199199 hub. configure_scope ( |scope| {
200- scope. add_event_processor ( Box :: new ( move |event| {
201- process_event ( event, tx. clone ( ) , & sentry_req)
202- } ) )
200+ scope. set_transaction ( tx. as_deref ( ) ) ;
201+ scope. add_event_processor ( Box :: new ( move |event| process_event ( event, & sentry_req) ) )
203202 } ) ;
204203
205204 let fut = self . service . call ( req) . bind_hub ( hub. clone ( ) ) ;
@@ -275,19 +274,12 @@ fn sentry_request_from_http(request: &ServiceRequest, with_pii: bool) -> (Option
275274}
276275
277276/// Add request data to a Sentry event
278- fn process_event (
279- mut event : Event < ' static > ,
280- transaction : Option < String > ,
281- request : & Request ,
282- ) -> Option < Event < ' static > > {
277+ fn process_event ( mut event : Event < ' static > , request : & Request ) -> Option < Event < ' static > > {
283278 // Request
284279 if event. request . is_none ( ) {
285280 event. request = Some ( request. clone ( ) ) ;
286281 }
287282
288- // Transaction
289- event. transaction = transaction;
290-
291283 // SDK
292284 if let Some ( sdk) = event. sdk . take ( ) {
293285 let mut sdk = sdk. into_owned ( ) ;
@@ -430,4 +422,40 @@ mod tests {
430422
431423 assert ! ( events. is_empty( ) ) ;
432424 }
425+
426+ /// Ensures transaction name can be overridden in handler scope.
427+ #[ actix_rt:: test]
428+ async fn test_override_transaction_name ( ) {
429+ let events = sentry:: test:: with_captured_events ( || {
430+ block_on ( async {
431+ #[ get( "/test" ) ]
432+ async fn original_transaction ( _req : HttpRequest ) -> Result < String , Error > {
433+ // Override transaction name
434+ sentry:: configure_scope ( |scope| scope. set_transaction ( Some ( "new_transaction" ) ) ) ;
435+ Err ( io:: Error :: new ( io:: ErrorKind :: Other , "Test Error" ) . into ( ) )
436+ }
437+
438+ let mut app = init_service (
439+ App :: new ( )
440+ . wrap ( Sentry :: builder ( ) . with_hub ( Hub :: current ( ) ) . finish ( ) )
441+ . service ( original_transaction) ,
442+ )
443+ . await ;
444+
445+ let req = TestRequest :: get ( ) . uri ( "/test" ) . to_request ( ) ;
446+ let res = call_service ( & mut app, req) . await ;
447+ assert ! ( res. status( ) . is_server_error( ) ) ;
448+ } )
449+ } ) ;
450+
451+ assert_eq ! ( events. len( ) , 1 ) ;
452+ let event = events[ 0 ] . clone ( ) ;
453+ let request = event. request . expect ( "Request should be set." ) ;
454+ assert_eq ! ( event. transaction, Some ( "new_transaction" . into( ) ) ) ; // Transaction name is overridden by handler
455+ assert_eq ! ( event. message, None ) ;
456+ assert_eq ! ( event. exception. values[ 0 ] . ty, String :: from( "Custom" ) ) ;
457+ assert_eq ! ( event. exception. values[ 0 ] . value, Some ( "Test Error" . into( ) ) ) ;
458+ assert_eq ! ( event. level, Level :: Error ) ;
459+ assert_eq ! ( request. method, Some ( "GET" . into( ) ) ) ;
460+ }
433461}
0 commit comments