3434)
3535from opentelemetry .sdk .metrics import (
3636 Counter ,
37+ Exemplar ,
3738 Histogram ,
3839 ObservableCounter ,
3940 ObservableGauge ,
5859 ExplicitBucketHistogramAggregation ,
5960 ExponentialBucketHistogramAggregation ,
6061)
62+ from os import environ
63+ from typing import Dict
6164
6265_logger = logging .getLogger (__name__ )
6366
@@ -341,7 +344,7 @@ def _encode_metric(metric, pb2_metric):
341344 )
342345
343346
344- def _encode_exemplars (sdk_exemplars : list ) -> list :
347+ def _encode_exemplars (sdk_exemplars : list [ Exemplar ] ) -> list :
345348 """
346349 Converts a list of SDK Exemplars into a list of protobuf Exemplars.
347350
@@ -353,14 +356,26 @@ def _encode_exemplars(sdk_exemplars: list) -> list:
353356 """
354357 pb_exemplars = []
355358 for sdk_exemplar in sdk_exemplars :
356- pb_exemplar = pb2 .Exemplar (
357- time_unix_nano = sdk_exemplar .time_unix_nano ,
358- span_id = _encode_span_id (sdk_exemplar .span_id ),
359- trace_id = _encode_trace_id (sdk_exemplar .trace_id ),
360- filtered_attributes = _encode_attributes (
361- sdk_exemplar .filtered_attributes
362- ),
363- )
359+ if (
360+ sdk_exemplar .span_id is not None
361+ and sdk_exemplar .trace_id is not None
362+ ):
363+ pb_exemplar = pb2 .Exemplar (
364+ time_unix_nano = sdk_exemplar .time_unix_nano ,
365+ span_id = _encode_span_id (sdk_exemplar .span_id ),
366+ trace_id = _encode_trace_id (sdk_exemplar .trace_id ),
367+ filtered_attributes = _encode_attributes (
368+ sdk_exemplar .filtered_attributes
369+ ),
370+ )
371+ else :
372+ pb_exemplar = pb2 .Exemplar (
373+ time_unix_nano = sdk_exemplar .time_unix_nano ,
374+ filtered_attributes = _encode_attributes (
375+ sdk_exemplar .filtered_attributes
376+ ),
377+ )
378+
364379 # Assign the value based on its type in the SDK exemplar
365380 if isinstance (sdk_exemplar .value , float ):
366381 pb_exemplar .as_double = sdk_exemplar .value
0 commit comments