@@ -197,9 +197,8 @@ where
197
197
198
198
let ( tx, sentry_req) = sentry_request_from_http ( & req, with_pii) ;
199
199
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) ) )
203
202
} ) ;
204
203
205
204
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
275
274
}
276
275
277
276
/// 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 > > {
283
278
// Request
284
279
if event. request . is_none ( ) {
285
280
event. request = Some ( request. clone ( ) ) ;
286
281
}
287
282
288
- // Transaction
289
- event. transaction = transaction;
290
-
291
283
// SDK
292
284
if let Some ( sdk) = event. sdk . take ( ) {
293
285
let mut sdk = sdk. into_owned ( ) ;
@@ -430,4 +422,40 @@ mod tests {
430
422
431
423
assert ! ( events. is_empty( ) ) ;
432
424
}
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
+ }
433
461
}
0 commit comments