From 45aa3a2c686d1184215e01d18266517581ca2d23 Mon Sep 17 00:00:00 2001 From: Dan Davison Date: Thu, 23 Jan 2025 22:48:16 +0000 Subject: [PATCH] Expose http option for OTLP (#741) Fixes #647 --- temporalio/bridge/runtime.py | 1 + temporalio/bridge/src/runtime.rs | 6 +++++- temporalio/runtime.py | 15 ++++++++++----- 3 files changed, 16 insertions(+), 6 deletions(-) diff --git a/temporalio/bridge/runtime.py b/temporalio/bridge/runtime.py index 5d4b7528..6235d846 100644 --- a/temporalio/bridge/runtime.py +++ b/temporalio/bridge/runtime.py @@ -69,6 +69,7 @@ class OpenTelemetryConfig: metric_periodicity_millis: Optional[int] metric_temporality_delta: bool durations_as_seconds: bool + http: bool @dataclass(frozen=True) diff --git a/temporalio/bridge/src/runtime.rs b/temporalio/bridge/src/runtime.rs index cc1bd06a..195f6786 100644 --- a/temporalio/bridge/src/runtime.rs +++ b/temporalio/bridge/src/runtime.rs @@ -17,7 +17,7 @@ use temporal_sdk_core::{CoreRuntime, TokioRuntimeBuilder}; use temporal_sdk_core_api::telemetry::metrics::{CoreMeter, MetricCallBufferer}; use temporal_sdk_core_api::telemetry::{ CoreLog, Logger, MetricTemporality, OtelCollectorOptionsBuilder, - PrometheusExporterOptionsBuilder, TelemetryOptionsBuilder, + PrometheusExporterOptionsBuilder, TelemetryOptionsBuilder, OtlpProtocol }; use tokio::task::JoinHandle; use tokio_stream::StreamExt; @@ -74,6 +74,7 @@ pub struct OpenTelemetryConfig { metric_periodicity_millis: Option, metric_temporality_delta: bool, durations_as_seconds: bool, + http: bool, } #[derive(FromPyObject)] @@ -322,6 +323,9 @@ impl TryFrom for Arc { if let Some(global_tags) = conf.global_tags { build.global_tags(global_tags); } + if otel_conf.http { + build.protocol(OtlpProtocol::Http); + } let otel_options = build .build() .map_err(|err| PyValueError::new_err(format!("Invalid OTel config: {}", err)))?; diff --git a/temporalio/runtime.py b/temporalio/runtime.py index 8834a680..95bda585 100644 --- a/temporalio/runtime.py +++ b/temporalio/runtime.py @@ -259,17 +259,22 @@ class OpenTelemetryConfig: OpenTelemetryMetricTemporality.CUMULATIVE ) durations_as_seconds: bool = False + http: bool = False def _to_bridge_config(self) -> temporalio.bridge.runtime.OpenTelemetryConfig: return temporalio.bridge.runtime.OpenTelemetryConfig( url=self.url, headers=self.headers or {}, - metric_periodicity_millis=None - if not self.metric_periodicity - else round(self.metric_periodicity.total_seconds() * 1000), - metric_temporality_delta=self.metric_temporality - == OpenTelemetryMetricTemporality.DELTA, + metric_periodicity_millis=( + None + if not self.metric_periodicity + else round(self.metric_periodicity.total_seconds() * 1000) + ), + metric_temporality_delta=( + self.metric_temporality == OpenTelemetryMetricTemporality.DELTA + ), durations_as_seconds=self.durations_as_seconds, + http=self.http, )