From 29d778bbc9d47df7c7e7d08604a6e8ceba503023 Mon Sep 17 00:00:00 2001 From: Aram Peres Date: Wed, 21 Oct 2020 17:59:44 -0400 Subject: [PATCH 1/2] fix: scope transaction name can be overriden in sentry-actix --- sentry-actix/src/lib.rs | 51 ++++++++++++++++++++++++++++++++--------- 1 file changed, 40 insertions(+), 11 deletions(-) diff --git a/sentry-actix/src/lib.rs b/sentry-actix/src/lib.rs index b64157209..e612dd448 100644 --- a/sentry-actix/src/lib.rs +++ b/sentry-actix/src/lib.rs @@ -197,9 +197,8 @@ where let (tx, sentry_req) = sentry_request_from_http(&req, with_pii); hub.configure_scope(|scope| { - scope.add_event_processor(Box::new(move |event| { - process_event(event, tx.clone(), &sentry_req) - })) + scope.set_transaction(tx.as_deref()); + scope.add_event_processor(Box::new(move |event| process_event(event, &sentry_req))) }); 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 } /// Add request data to a Sentry event -fn process_event( - mut event: Event<'static>, - transaction: Option, - request: &Request, -) -> Option> { +fn process_event(mut event: Event<'static>, request: &Request) -> Option> { // Request if event.request.is_none() { event.request = Some(request.clone()); } - // Transaction - event.transaction = transaction; - // SDK if let Some(sdk) = event.sdk.take() { let mut sdk = sdk.into_owned(); @@ -411,4 +403,41 @@ mod tests { assert_eq!(request.method, Some("GET".into())); } } + + /// Ensures transaction name can be overridden in handler scope. + #[actix_rt::test] + async fn test_override_transaction_name() { + let events = sentry::test::with_captured_events(|| { + block_on(async { + #[get("/test")] + async fn original_transaction(_req: HttpRequest) -> Result { + // Override transaction name + Hub::current() + .configure_scope(|scope| scope.set_transaction(Some("new_transaction"))); + Err(io::Error::new(io::ErrorKind::Other, "Test Error").into()) + } + + let mut app = init_service( + App::new() + .wrap(Sentry::builder().with_hub(Hub::current()).finish()) + .service(original_transaction), + ) + .await; + + let req = TestRequest::get().uri("/test").to_request(); + let res = call_service(&mut app, req).await; + assert!(res.status().is_server_error()); + }) + }); + + assert_eq!(events.len(), 1); + let event = events[0].clone(); + let request = event.request.expect("Request should be set."); + assert_eq!(event.transaction, Some("new_transaction".into())); // Transaction name is overridden by handler + assert_eq!(event.message, None); + assert_eq!(event.exception.values[0].ty, String::from("Custom")); + assert_eq!(event.exception.values[0].value, Some("Test Error".into())); + assert_eq!(event.level, Level::Error); + assert_eq!(request.method, Some("GET".into())); + } } From 97931ce904910d755c7e0af527dab9aec8352e72 Mon Sep 17 00:00:00 2001 From: Aram Peres Date: Thu, 22 Oct 2020 10:01:44 -0400 Subject: [PATCH 2/2] Update sentry-actix/src/lib.rs Co-authored-by: Arpad Borsos --- sentry-actix/src/lib.rs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/sentry-actix/src/lib.rs b/sentry-actix/src/lib.rs index e612dd448..720ee540d 100644 --- a/sentry-actix/src/lib.rs +++ b/sentry-actix/src/lib.rs @@ -412,8 +412,7 @@ mod tests { #[get("/test")] async fn original_transaction(_req: HttpRequest) -> Result { // Override transaction name - Hub::current() - .configure_scope(|scope| scope.set_transaction(Some("new_transaction"))); + sentry::configure_scope(|scope| scope.set_transaction(Some("new_transaction"))); Err(io::Error::new(io::ErrorKind::Other, "Test Error").into()) }