Skip to content

Commit 499fd12

Browse files
committed
fix: scope transaction name can be overriden in sentry-actix
1 parent bbd78fb commit 499fd12

File tree

1 file changed

+42
-11
lines changed

1 file changed

+42
-11
lines changed

sentry-actix/src/lib.rs

Lines changed: 42 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -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();
@@ -411,4 +403,43 @@ mod tests {
411403
assert_eq!(request.method, Some("GET".into()));
412404
}
413405
}
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+
}
414445
}

0 commit comments

Comments
 (0)