@@ -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 ( ) ;
@@ -411,4 +403,43 @@ mod tests {
411
403
assert_eq ! ( request. method, Some ( "GET" . into( ) ) ) ;
412
404
}
413
405
}
406
+
407
+ /// Ensures transaction name can be overridden in handler scope.
408
+ #[ actix_rt:: test]
409
+ async fn test_override_transaction_name ( ) {
410
+ let events = sentry:: test:: with_captured_events ( || {
411
+ block_on ( async {
412
+ let test_hub = Hub :: current ( ) ;
413
+
414
+ #[ get( "/test" ) ]
415
+ async fn original_transaction ( _req : HttpRequest ) -> Result < String , Error > {
416
+ // Override transaction name
417
+ Hub :: current ( )
418
+ . configure_scope ( |scope| scope. set_transaction ( Some ( "new_transaction" ) ) ) ;
419
+ Err ( io:: Error :: new ( io:: ErrorKind :: Other , "Test Error" ) . into ( ) )
420
+ }
421
+
422
+ let mut app = init_service (
423
+ App :: new ( )
424
+ . wrap ( Sentry :: builder ( ) . with_hub ( test_hub) . finish ( ) )
425
+ . service ( original_transaction) ,
426
+ )
427
+ . await ;
428
+
429
+ let req = TestRequest :: get ( ) . uri ( "/test" ) . to_request ( ) ;
430
+ let res = call_service ( & mut app, req) . await ;
431
+ assert ! ( res. status( ) . is_server_error( ) ) ;
432
+ } )
433
+ } ) ;
434
+
435
+ assert_eq ! ( events. len( ) , 1 ) ;
436
+ let event = events[ 0 ] . clone ( ) ;
437
+ let request = event. request . expect ( "Request should be set." ) ;
438
+ assert_eq ! ( event. transaction, Some ( "new_transaction" . into( ) ) ) ; // Transaction name is overridden by handler
439
+ assert_eq ! ( event. message, None ) ;
440
+ assert_eq ! ( event. exception. values[ 0 ] . ty, String :: from( "Custom" ) ) ;
441
+ assert_eq ! ( event. exception. values[ 0 ] . value, Some ( "Test Error" . into( ) ) ) ;
442
+ assert_eq ! ( event. level, Level :: Error ) ;
443
+ assert_eq ! ( request. method, Some ( "GET" . into( ) ) ) ;
444
+ }
414
445
}
0 commit comments