@@ -175,8 +175,24 @@ def __init__(
175
175
self ._disable_xray_trace_batching ()
176
176
177
177
def set_attribute (self , key : str , value : Union [str , numbers .Number , bool ]):
178
+ """Set attribute on current active trace entity with a key-value pair.
179
+
180
+ Parameters
181
+ ----------
182
+ key : str
183
+ attribute key
184
+ value : Union[str, numbers.Number, bool]
185
+ Value for attribute
186
+
187
+ Example
188
+ -------
189
+ Set attribute for a pseudo service named payment
190
+
191
+ tracer = Tracer(service="payment")
192
+ tracer.set_attribute("PaymentStatus", "CONFIRMED")
193
+ """
178
194
if self .disabled :
179
- logger .debug ("Tracing has been disabled, aborting put_annotation " )
195
+ logger .debug ("Tracing has been disabled, aborting set_attribute " )
180
196
return
181
197
182
198
logger .debug (f"setting attribute on key '{ key } ' with '{ value } '" )
@@ -206,10 +222,10 @@ def put_annotation(self, key: str, value: Union[str, numbers.Number, bool]):
206
222
207
223
logger .debug (f"Annotating on key '{ key } ' with '{ value } '" )
208
224
209
- if not self ._is_custom_provider ():
210
- self .provider .put_annotation (key = key , value = value ) # type: ignore
211
- else :
225
+ if self ._is_custom_provider ():
212
226
self .provider .set_attribute (key = key , value = value )
227
+ else :
228
+ self .provider .put_annotation (key = key , value = value ) # type: ignore
213
229
214
230
def put_metadata (self , key : str , value : Any , namespace : Optional [str ] = None ):
215
231
"""Adds metadata to existing segment or subsegment
@@ -237,10 +253,10 @@ def put_metadata(self, key: str, value: Any, namespace: Optional[str] = None):
237
253
238
254
namespace = namespace or self .service
239
255
logger .debug (f"Adding metadata on key '{ key } ' with '{ value } ' at namespace '{ namespace } '" )
240
- if not self ._is_custom_provider ():
241
- self .provider .put_metadata (key = key , value = value , namespace = namespace ) # type: ignore
242
- else :
256
+ if self ._is_custom_provider ():
243
257
self .provider .set_attribute (key = f"{ namespace } .{ key } " , value = value )
258
+ else :
259
+ self .provider .put_metadata (key = key , value = value , namespace = namespace ) # type: ignore
244
260
245
261
def patch (self , modules : Optional [Sequence [str ]] = None ):
246
262
"""Patch modules for instrumentation.
@@ -348,19 +364,19 @@ def decorate(event, context, **kwargs):
348
364
finally :
349
365
global is_cold_start
350
366
logger .debug ("Annotating cold start" )
351
- if not self ._is_custom_provider ():
352
- subsegment .put_annotation (key = "ColdStart" , value = is_cold_start )
353
- else :
367
+ if self ._is_custom_provider ():
354
368
subsegment .set_attribute (key = "ColdStart" , value = is_cold_start )
369
+ else :
370
+ subsegment .put_annotation (key = "ColdStart" , value = is_cold_start )
355
371
356
372
if is_cold_start :
357
373
is_cold_start = False
358
374
359
375
if self .service :
360
- if not self ._is_custom_provider ():
361
- subsegment .put_annotation (key = "Service" , value = self .service )
362
- else :
376
+ if self ._is_custom_provider ():
363
377
subsegment .set_attribute (key = "Service" , value = self .service )
378
+ else :
379
+ subsegment .put_annotation (key = "Service" , value = self .service )
364
380
365
381
return response
366
382
@@ -739,10 +755,10 @@ def _add_response_as_metadata(
739
755
"""
740
756
if data is None or not capture_response or subsegment is None :
741
757
return
742
- if not self ._is_custom_provider ():
743
- subsegment .put_metadata (key = f"{ method_name } response" , value = data , namespace = self .service ) # type: ignore
744
- else :
758
+ if self ._is_custom_provider ():
745
759
subsegment .set_attribute (key = f"{ method_name } response" , value = data , namespace = self .service )
760
+ else :
761
+ subsegment .put_metadata (key = f"{ method_name } response" , value = data , namespace = self .service ) # type: ignore
746
762
747
763
def _add_full_exception_as_metadata (
748
764
self ,
@@ -767,14 +783,14 @@ def _add_full_exception_as_metadata(
767
783
if not capture_error :
768
784
return
769
785
770
- if not self ._is_custom_provider ():
771
- subsegment .put_metadata (key = f"{ method_name } error" , value = error , namespace = self .service ) # type: ignore
772
- else :
786
+ if self ._is_custom_provider ():
773
787
subsegment .set_attribute (
774
788
key = f"{ self .service } .{ method_name } error" ,
775
789
value = str (error ),
776
790
namespace = self .service ,
777
791
)
792
+ else :
793
+ subsegment .put_metadata (key = f"{ method_name } error" , value = error , namespace = self .service ) # type: ignore
778
794
779
795
@staticmethod
780
796
def _disable_tracer_provider ():
@@ -858,6 +874,7 @@ def _is_xray_provider(self):
858
874
return isinstance (self .provider , XrayProvider )
859
875
860
876
def _is_custom_provider (self ):
877
+ # check if provider is not default xray_provider. Avoid test conflits
861
878
return not self ._is_xray_provider () and isinstance (self .provider , BaseProvider )
862
879
863
880
def ignore_endpoint (self , hostname : Optional [str ] = None , urls : Optional [List [str ]] = None ):
0 commit comments