Skip to content

Commit da7a2c0

Browse files
committed
Deal with missing span and trace ids
1 parent 97f3c10 commit da7a2c0

File tree

1 file changed

+43
-36
lines changed
  • exporter/opentelemetry-exporter-otlp-proto-common/src/opentelemetry/exporter/otlp/proto/common/_internal/metrics_encoder

1 file changed

+43
-36
lines changed

exporter/opentelemetry-exporter-otlp-proto-common/src/opentelemetry/exporter/otlp/proto/common/_internal/metrics_encoder/__init__.py

Lines changed: 43 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -13,53 +13,48 @@
1313
# limitations under the License.
1414
import 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-
)
2916
from 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-
)
4021
from opentelemetry.proto.collector.metrics.v1.metrics_service_pb2 import (
4122
ExportMetricsServiceRequest,
4223
)
4324
from opentelemetry.proto.common.v1.common_pb2 import InstrumentationScope
4425
from 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
5326
from opentelemetry.proto.resource.v1.resource_pb2 import (
5427
Resource as PB2Resource,
5528
)
5629
from 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
)
5951
from 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

Comments
 (0)