3737import sentry_sdk
3838from sentry_sdk .integrations import Integration
3939from sentry_sdk .scope import should_send_default_pii
40- from sentry_sdk .tracing import Span as SentrySpan
40+ from sentry_sdk .tracing import POTelSpan as SentrySpan
4141from sentry_sdk .utils import SENSITIVE_DATA_SUBSTITUTE
4242
43- TraceState = Optional [Tuple [Optional [SentrySpan ], SentrySpan ]]
44-
4543
4644class RustTracingLevel (Enum ):
4745 Trace : str = "TRACE"
@@ -171,7 +169,7 @@ def _include_tracing_fields(self) -> bool:
171169 else self .include_tracing_fields
172170 )
173171
174- def on_event (self , event : str , _span_state : TraceState ) -> None :
172+ def on_event (self , event : str , _span_state : Optional [ SentrySpan ] ) -> None :
175173 deserialized_event = json .loads (event )
176174 metadata = deserialized_event .get ("metadata" , {})
177175
@@ -185,7 +183,7 @@ def on_event(self, event: str, _span_state: TraceState) -> None:
185183 elif event_type == EventTypeMapping .Event :
186184 process_event (deserialized_event )
187185
188- def on_new_span (self , attrs : str , span_id : str ) -> TraceState :
186+ def on_new_span (self , attrs : str , span_id : str ) -> Optional [ SentrySpan ] :
189187 attrs = json .loads (attrs )
190188 metadata = attrs .get ("metadata" , {})
191189
@@ -205,48 +203,35 @@ def on_new_span(self, attrs: str, span_id: str) -> TraceState:
205203 else :
206204 sentry_span_name = "<unknown>"
207205
208- kwargs = {
209- "op" : "function" ,
210- "name" : sentry_span_name ,
211- "origin" : self .origin ,
212- }
213-
214- scope = sentry_sdk .get_current_scope ()
215- parent_sentry_span = scope .span
216- if parent_sentry_span :
217- sentry_span = parent_sentry_span .start_child (** kwargs )
218- else :
219- sentry_span = scope .start_span (** kwargs )
206+ span = sentry_sdk .start_span (
207+ op = "function" ,
208+ name = sentry_span_name ,
209+ origin = self .origin ,
210+ only_if_parent = True ,
211+ )
212+ span .__enter__ ()
220213
221214 fields = metadata .get ("fields" , [])
222215 for field in fields :
223216 if self ._include_tracing_fields ():
224- sentry_span .set_data (field , attrs .get (field ))
225- else :
226- sentry_span .set_data (field , SENSITIVE_DATA_SUBSTITUTE )
227-
228- scope .span = sentry_span
229- return (parent_sentry_span , sentry_span )
230-
231- def on_close (self , span_id : str , span_state : TraceState ) -> None :
232- if span_state is None :
233- return
234-
235- parent_sentry_span , sentry_span = span_state
236- sentry_span .finish ()
237- sentry_sdk .get_current_scope ().span = parent_sentry_span
238-
239- def on_record (self , span_id : str , values : str , span_state : TraceState ) -> None :
240- if span_state is None :
241- return
242- _parent_sentry_span , sentry_span = span_state
243-
244- deserialized_values = json .loads (values )
245- for key , value in deserialized_values .items ():
246- if self ._include_tracing_fields ():
247- sentry_span .set_data (key , value )
217+ span .set_data (field , attrs .get (field ))
248218 else :
249- sentry_span .set_data (key , SENSITIVE_DATA_SUBSTITUTE )
219+ span .set_data (field , SENSITIVE_DATA_SUBSTITUTE )
220+
221+ return span
222+
223+ def on_close (self , span_id : str , span : Optional [SentrySpan ]) -> None :
224+ if span is not None :
225+ span .__exit__ (None , None , None )
226+
227+ def on_record (self , span_id : str , values : str , span : Optional [SentrySpan ]) -> None :
228+ if span is not None :
229+ deserialized_values = json .loads (values )
230+ for key , value in deserialized_values .items ():
231+ if self ._include_tracing_fields ():
232+ span .set_data (key , value )
233+ else :
234+ span .set_data (key , SENSITIVE_DATA_SUBSTITUTE )
250235
251236
252237class RustTracingIntegration (Integration ):
0 commit comments