11from copy import deepcopy
22
33import sentry_sdk
4- from sentry_sdk .consts import OP
4+ from sentry_sdk .consts import OP , SPANDATA
55from sentry_sdk .integrations import DidNotEnable , Integration
66from sentry_sdk .integrations .asgi import SentryAsgiMiddleware
77from sentry_sdk .scope import should_send_default_pii
88from sentry_sdk .tracing import SOURCE_FOR_STYLE , TransactionSource
9+ from sentry_sdk .tracing_utils import has_span_streaming_enabled
910from sentry_sdk .utils import (
1011 ensure_integration_enabled ,
1112 event_from_exception ,
@@ -141,29 +142,47 @@ async def _create_span_call(
141142 receive : "Receive" ,
142143 send : "Send" ,
143144 ) -> None :
144- if sentry_sdk .get_client ().get_integration (StarliteIntegration ) is None :
145+ client = sentry_sdk .get_client ()
146+ if client .get_integration (StarliteIntegration ) is None :
145147 return await old_call (self , scope , receive , send )
146148
147149 middleware_name = self .__class__ .__name__
148- with sentry_sdk .start_span (
149- op = OP .MIDDLEWARE_STARLITE ,
150- name = middleware_name ,
151- origin = StarliteIntegration .origin ,
150+ is_span_streaming_enabled = has_span_streaming_enabled (client .options )
151+
152+ def _start_middleware_span (op : str , name : str ) -> "Any" :
153+ if is_span_streaming_enabled :
154+ return sentry_sdk .traces .start_span (
155+ name = name ,
156+ attributes = {
157+ "sentry.op" : op ,
158+ "sentry.origin" : StarliteIntegration .origin ,
159+ SPANDATA .MIDDLEWARE_NAME : middleware_name ,
160+ },
161+ )
162+ return sentry_sdk .start_span (
163+ op = op ,
164+ name = name ,
165+ origin = StarliteIntegration .origin ,
166+ )
167+
168+ with _start_middleware_span (
169+ op = OP .MIDDLEWARE_STARLITE , name = middleware_name
152170 ) as middleware_span :
153- middleware_span .set_tag ("starlite.middleware_name" , middleware_name )
171+ if not is_span_streaming_enabled :
172+ middleware_span .set_tag ("starlite.middleware_name" , middleware_name )
154173
155174 # Creating spans for the "receive" callback
156175 async def _sentry_receive (
157176 * args : "Any" , ** kwargs : "Any"
158177 ) -> "Union[HTTPReceiveMessage, WebSocketReceiveMessage]" :
159178 if sentry_sdk .get_client ().get_integration (StarliteIntegration ) is None :
160179 return await receive (* args , ** kwargs )
161- with sentry_sdk . start_span (
180+ with _start_middleware_span (
162181 op = OP .MIDDLEWARE_STARLITE_RECEIVE ,
163182 name = getattr (receive , "__qualname__" , str (receive )),
164- origin = StarliteIntegration .origin ,
165183 ) as span :
166- span .set_tag ("starlite.middleware_name" , middleware_name )
184+ if not is_span_streaming_enabled :
185+ span .set_tag ("starlite.middleware_name" , middleware_name )
167186 return await receive (* args , ** kwargs )
168187
169188 receive_name = getattr (receive , "__name__" , str (receive ))
@@ -174,12 +193,12 @@ async def _sentry_receive(
174193 async def _sentry_send (message : "Message" ) -> None :
175194 if sentry_sdk .get_client ().get_integration (StarliteIntegration ) is None :
176195 return await send (message )
177- with sentry_sdk . start_span (
196+ with _start_middleware_span (
178197 op = OP .MIDDLEWARE_STARLITE_SEND ,
179198 name = getattr (send , "__qualname__" , str (send )),
180- origin = StarliteIntegration .origin ,
181199 ) as span :
182- span .set_tag ("starlite.middleware_name" , middleware_name )
200+ if not is_span_streaming_enabled :
201+ span .set_tag ("starlite.middleware_name" , middleware_name )
183202 return await send (message )
184203
185204 send_name = getattr (send , "__name__" , str (send ))
0 commit comments