Skip to content

Commit bb3b777

Browse files
authored
fix: Scope transaction name can be overriden in sentry-actix (#287)
1 parent c2ed552 commit bb3b777

File tree

1 file changed

+39
-11
lines changed

1 file changed

+39
-11
lines changed

sentry-actix/src/lib.rs

Lines changed: 39 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();
@@ -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

Comments
 (0)