Skip to content

Commit 80bd271

Browse files
committed
Deal with missing span and trace ids
1 parent 06809f4 commit 80bd271

File tree

1 file changed

+24
-9
lines changed
  • exporter/opentelemetry-exporter-otlp-proto-common/src/opentelemetry/exporter/otlp/proto/common/_internal/metrics_encoder

1 file changed

+24
-9
lines changed

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

Lines changed: 24 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
)
3535
from opentelemetry.sdk.metrics import (
3636
Counter,
37+
Exemplar,
3738
Histogram,
3839
ObservableCounter,
3940
ObservableGauge,
@@ -58,6 +59,8 @@
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

Comments
 (0)