Skip to content

Commit 351730c

Browse files
committed
update otlp exporter to export exemplars
1 parent 70f8bef commit 351730c

File tree

1 file changed

+35
-0
lines changed
  • exporter/opentelemetry-exporter-otlp-proto-common/src/opentelemetry/exporter/otlp/proto/common/_internal/metrics_encoder

1 file changed

+35
-0
lines changed

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

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,8 @@
2828
)
2929
from opentelemetry.exporter.otlp.proto.common._internal import (
3030
_encode_attributes,
31+
_encode_span_id,
32+
_encode_trace_id,
3133
)
3234
from opentelemetry.sdk.environment_variables import (
3335
OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE,
@@ -216,6 +218,7 @@ def encode_metrics(data: MetricsData) -> ExportMetricsServiceRequest:
216218
data_point.attributes
217219
),
218220
time_unix_nano=data_point.time_unix_nano,
221+
exemplars=encode_exemplars(data_point.exemplars),
219222
)
220223
if isinstance(data_point.value, int):
221224
pt.as_int = data_point.value
@@ -233,6 +236,7 @@ def encode_metrics(data: MetricsData) -> ExportMetricsServiceRequest:
233236
start_time_unix_nano=(
234237
data_point.start_time_unix_nano
235238
),
239+
exemplars=encode_exemplars(data_point.exemplars),
236240
count=data_point.count,
237241
sum=data_point.sum,
238242
bucket_counts=data_point.bucket_counts,
@@ -255,6 +259,7 @@ def encode_metrics(data: MetricsData) -> ExportMetricsServiceRequest:
255259
data_point.start_time_unix_nano
256260
),
257261
time_unix_nano=data_point.time_unix_nano,
262+
exemplars=encode_exemplars(data_point.exemplars),
258263
)
259264
if isinstance(data_point.value, int):
260265
pt.as_int = data_point.value
@@ -296,6 +301,7 @@ def encode_metrics(data: MetricsData) -> ExportMetricsServiceRequest:
296301
start_time_unix_nano=(
297302
data_point.start_time_unix_nano
298303
),
304+
exemplars=encode_exemplars(data_point.exemplars),
299305
count=data_point.count,
300306
sum=data_point.sum,
301307
scale=data_point.scale,
@@ -336,3 +342,32 @@ def encode_metrics(data: MetricsData) -> ExportMetricsServiceRequest:
336342
)
337343
resource_metrics = resource_data
338344
return ExportMetricsServiceRequest(resource_metrics=resource_metrics)
345+
346+
def encode_exemplars(sdk_exemplars: list) -> list:
347+
"""
348+
Converts a list of SDK Exemplars into a list of protobuf Exemplars.
349+
350+
Args:
351+
sdk_exemplars (list): The list of exemplars from the OpenTelemetry SDK.
352+
353+
Returns:
354+
list: A list of protobuf exemplars.
355+
"""
356+
pb_exemplars = []
357+
for sdk_exemplar in sdk_exemplars:
358+
pb_exemplar = pb2.Exemplar(
359+
time_unix_nano=sdk_exemplar.time_unix_nano,
360+
span_id=_encode_span_id(sdk_exemplar.span_id),
361+
trace_id=_encode_trace_id(sdk_exemplar.trace_id),
362+
filtered_attributes=_encode_attributes(sdk_exemplar.filtered_attributes),
363+
)
364+
# Assign the value based on its type in the SDK exemplar
365+
if isinstance(sdk_exemplar.value, float):
366+
pb_exemplar.as_double = sdk_exemplar.value
367+
elif isinstance(sdk_exemplar.value, int):
368+
pb_exemplar.as_int = sdk_exemplar.value
369+
else:
370+
raise ValueError("Exemplar value must be an int or float")
371+
pb_exemplars.append(pb_exemplar)
372+
373+
return pb_exemplars

0 commit comments

Comments
 (0)