1313# limitations under the License.
1414import logging
1515
16- from opentelemetry .sdk .metrics .export import (
17- MetricExporter ,
18- )
19- from opentelemetry .sdk .metrics .view import Aggregation
20- from os import environ
21- from opentelemetry .sdk .metrics import (
22- Counter ,
23- Histogram ,
24- ObservableCounter ,
25- ObservableGauge ,
26- ObservableUpDownCounter ,
27- UpDownCounter ,
28- )
2916from opentelemetry .exporter .otlp .proto .common ._internal import (
3017 _encode_attributes ,
3118 _encode_span_id ,
3219 _encode_trace_id ,
3320)
34- from opentelemetry .sdk .environment_variables import (
35- OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE ,
36- )
37- from opentelemetry .sdk .metrics .export import (
38- AggregationTemporality ,
39- )
4021from opentelemetry .proto .collector .metrics .v1 .metrics_service_pb2 import (
4122 ExportMetricsServiceRequest ,
4223)
4324from opentelemetry .proto .common .v1 .common_pb2 import InstrumentationScope
4425from opentelemetry .proto .metrics .v1 import metrics_pb2 as pb2
45- from opentelemetry .sdk .metrics .export import (
46- MetricsData ,
47- Gauge ,
48- Histogram as HistogramType ,
49- Sum ,
50- ExponentialHistogram as ExponentialHistogramType ,
51- )
52- from typing import Dict
5326from opentelemetry .proto .resource .v1 .resource_pb2 import (
5427 Resource as PB2Resource ,
5528)
5629from opentelemetry .sdk .environment_variables import (
5730 OTEL_EXPORTER_OTLP_METRICS_DEFAULT_HISTOGRAM_AGGREGATION ,
31+ OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE ,
32+ )
33+ from opentelemetry .sdk .metrics import (
34+ Counter ,
35+ Exemplar ,
36+ Histogram ,
37+ ObservableCounter ,
38+ ObservableGauge ,
39+ ObservableUpDownCounter ,
40+ UpDownCounter ,
41+ )
42+ from opentelemetry .sdk .metrics .export import (
43+ AggregationTemporality ,
44+ ExponentialHistogram as ExponentialHistogramType ,
45+ Gauge ,
46+ Histogram as HistogramType ,
47+ MetricsData ,
48+ MetricExporter ,
49+ Sum ,
5850)
5951from opentelemetry .sdk .metrics .view import (
52+ Aggregation ,
6053 ExponentialBucketHistogramAggregation ,
6154 ExplicitBucketHistogramAggregation ,
6255)
56+ from os import environ
57+ from typing import Dict
6358
6459_logger = logging .getLogger (__name__ )
6560
@@ -350,7 +345,7 @@ def _encode_metric(metric, pb2_metric):
350345 )
351346
352347
353- def _encode_exemplars (sdk_exemplars : list ) -> list :
348+ def _encode_exemplars (sdk_exemplars : list [ Exemplar ] ) -> list :
354349 """
355350 Converts a list of SDK Exemplars into a list of protobuf Exemplars.
356351
@@ -362,14 +357,26 @@ def _encode_exemplars(sdk_exemplars: list) -> list:
362357 """
363358 pb_exemplars = []
364359 for sdk_exemplar in sdk_exemplars :
365- pb_exemplar = pb2 .Exemplar (
366- time_unix_nano = sdk_exemplar .time_unix_nano ,
367- span_id = _encode_span_id (sdk_exemplar .span_id ),
368- trace_id = _encode_trace_id (sdk_exemplar .trace_id ),
369- filtered_attributes = _encode_attributes (
370- sdk_exemplar .filtered_attributes
371- ),
372- )
360+ if (
361+ sdk_exemplar .span_id is not None
362+ and sdk_exemplar .trace_id is not None
363+ ):
364+ pb_exemplar = pb2 .Exemplar (
365+ time_unix_nano = sdk_exemplar .time_unix_nano ,
366+ span_id = _encode_span_id (sdk_exemplar .span_id ),
367+ trace_id = _encode_trace_id (sdk_exemplar .trace_id ),
368+ filtered_attributes = _encode_attributes (
369+ sdk_exemplar .filtered_attributes
370+ ),
371+ )
372+ else :
373+ pb_exemplar = pb2 .Exemplar (
374+ time_unix_nano = sdk_exemplar .time_unix_nano ,
375+ filtered_attributes = _encode_attributes (
376+ sdk_exemplar .filtered_attributes
377+ ),
378+ )
379+
373380 # Assign the value based on its type in the SDK exemplar
374381 if isinstance (sdk_exemplar .value , float ):
375382 pb_exemplar .as_double = sdk_exemplar .value
0 commit comments