diff --git a/sentry_sdk/integrations/starlette.py b/sentry_sdk/integrations/starlette.py index 0705da3a4c..3cbf3f98c3 100644 --- a/sentry_sdk/integrations/starlette.py +++ b/sentry_sdk/integrations/starlette.py @@ -144,19 +144,23 @@ def _enable_span_for_middleware(middleware_class): async def _create_span_call(app, scope, receive, send, **kwargs): # type: (Any, Dict[str, Any], Callable[[], Awaitable[Dict[str, Any]]], Callable[[Dict[str, Any]], Awaitable[None]], Any) -> None integration = sentry_sdk.get_client().get_integration(StarletteIntegration) - if integration is None or not integration.middleware_spans: + if integration is None: return await old_call(app, scope, receive, send, **kwargs) - middleware_name = app.__class__.__name__ - # Update transaction name with middleware name name, source = _get_transaction_from_middleware(app, scope, integration) + if name is not None: sentry_sdk.get_current_scope().set_transaction_name( name, source=source, ) + if not integration.middleware_spans: + return await old_call(app, scope, receive, send, **kwargs) + + middleware_name = app.__class__.__name__ + with sentry_sdk.start_span( op=OP.MIDDLEWARE_STARLETTE, name=middleware_name, diff --git a/tests/integrations/fastapi/test_fastapi.py b/tests/integrations/fastapi/test_fastapi.py index a69978ded4..005189f00c 100644 --- a/tests/integrations/fastapi/test_fastapi.py +++ b/tests/integrations/fastapi/test_fastapi.py @@ -469,6 +469,7 @@ def dummy_traces_sampler(sampling_context): client.get(request_url) +@pytest.mark.parametrize("middleware_spans", [False, True]) @pytest.mark.parametrize( "request_url,transaction_style,expected_transaction_name,expected_transaction_source", [ @@ -488,6 +489,7 @@ def dummy_traces_sampler(sampling_context): ) def test_transaction_name_in_middleware( sentry_init, + middleware_spans, request_url, transaction_style, expected_transaction_name, @@ -500,8 +502,12 @@ def test_transaction_name_in_middleware( sentry_init( auto_enabling_integrations=False, # Make sure that httpx integration is not added, because it adds tracing information to the starlette test clients request. integrations=[ - StarletteIntegration(transaction_style=transaction_style), - FastApiIntegration(transaction_style=transaction_style), + StarletteIntegration( + transaction_style=transaction_style, middleware_spans=middleware_spans + ), + FastApiIntegration( + transaction_style=transaction_style, middleware_spans=middleware_spans + ), ], traces_sample_rate=1.0, ) diff --git a/tests/integrations/starlette/test_starlette.py b/tests/integrations/starlette/test_starlette.py index bc445bf8f2..b3bf20fa26 100644 --- a/tests/integrations/starlette/test_starlette.py +++ b/tests/integrations/starlette/test_starlette.py @@ -1099,6 +1099,7 @@ def dummy_traces_sampler(sampling_context): client.get(request_url) +@pytest.mark.parametrize("middleware_spans", [False, True]) @pytest.mark.parametrize( "request_url,transaction_style,expected_transaction_name,expected_transaction_source", [ @@ -1118,6 +1119,7 @@ def dummy_traces_sampler(sampling_context): ) def test_transaction_name_in_middleware( sentry_init, + middleware_spans, request_url, transaction_style, expected_transaction_name, @@ -1130,7 +1132,9 @@ def test_transaction_name_in_middleware( sentry_init( auto_enabling_integrations=False, # Make sure that httpx integration is not added, because it adds tracing information to the starlette test clients request. integrations=[ - StarletteIntegration(transaction_style=transaction_style), + StarletteIntegration( + transaction_style=transaction_style, middleware_spans=middleware_spans + ), ], traces_sample_rate=1.0, )