diff --git a/sentry_sdk/integrations/falcon.py b/sentry_sdk/integrations/falcon.py index 00a53c9236..b00de63cda 100644 --- a/sentry_sdk/integrations/falcon.py +++ b/sentry_sdk/integrations/falcon.py @@ -104,6 +104,21 @@ def process_request( scope._name = "falcon" scope.add_event_processor(_make_request_event_processor(req, integration)) + def process_resource( + self, req: "Any", resp: "Any", resource: "Any", params: "Any" + ) -> None: + integration = sentry_sdk.get_client().get_integration(FalconIntegration) + if integration is None: + return + + name_for_style = { + "uri_template": req.uri_template, + "path": req.path, + } + name = name_for_style[integration.transaction_style] + source = SOURCE_FOR_STYLE[integration.transaction_style] + sentry_sdk.set_transaction_name(name, source) + TRANSACTION_STYLE_VALUES = ("uri_template", "path") diff --git a/tests/integrations/falcon/test_falcon.py b/tests/integrations/falcon/test_falcon.py index 75ad903a04..31c5f5d8b4 100644 --- a/tests/integrations/falcon/test_falcon.py +++ b/tests/integrations/falcon/test_falcon.py @@ -121,24 +121,36 @@ def test_transaction_style( integration = FalconIntegration(transaction_style=transaction_style) sentry_init( integrations=[integration], + traces_sample_rate=1.0, _experiments={"trace_lifecycle": "stream" if span_streaming else "static"}, ) client = make_client() if span_streaming: items = capture_items("event") + items = capture_items("event", "span") response = client.simulate_get(url) assert response.status == falcon.HTTP_200 - (event,) = (item.payload for item in items) + (event,) = (item.payload for item in items if item.type == "event") + + sentry_sdk.flush() + spans = [item.payload for item in items if item.type == "span"] + spans = [span for span in spans if span["name"] == expected_transaction] + assert len(spans) == 1 + assert spans[0]["attributes"]["sentry.span.source"] == expected_source else: events = capture_events() response = client.simulate_get(url) assert response.status == falcon.HTTP_200 - (event,) = events + (event, transaction) = events + + assert transaction["transaction"] == expected_transaction + assert transaction["transaction_info"] == {"source": expected_source} + assert event["transaction"] == expected_transaction assert event["transaction_info"] == {"source": expected_source}