From 48163f16afaa07b29f4f186ed752978e88813a0a Mon Sep 17 00:00:00 2001 From: Michal Martyniak Date: Tue, 27 Jan 2026 13:21:33 +0100 Subject: [PATCH] fix: support 'none' value for OTEL exporters to disable telemetry MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Filter "none" from OTEL_TRACES_EXPORTER and OTEL_METRICS_EXPORTER - Return None from get_trace_provider/get_metric_provider when no exporters - Prevents NotImplementedError on plugin startup with OTEL disabled - Bump version 0.0.41 → 0.0.42 Fixes plugin crash when OTEL_TRACES_EXPORTER=none or OTEL_METRICS_EXPORTER=none --- CHANGELOG.md | 4 ++++ unstructured_platform_plugins/__version__.py | 2 +- unstructured_platform_plugins/etl_uvicorn/otel.py | 12 ++++++++++-- 3 files changed, 15 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ea55e13..da6e9ed 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.0.42 + +* **Support "none" value for OTEL_TRACES_EXPORTER and OTEL_METRICS_EXPORTER** - Filter "none" from exporter lists and return None when no exporters configured to properly disable OpenTelemetry instrumentation + ## 0.0.39 * **Remove wrap_error logic as exceptions are categorized in unstructured-ingest** diff --git a/unstructured_platform_plugins/__version__.py b/unstructured_platform_plugins/__version__.py index 592359c..89da183 100644 --- a/unstructured_platform_plugins/__version__.py +++ b/unstructured_platform_plugins/__version__.py @@ -1 +1 @@ -__version__ = "0.0.41" # pragma: no cover +__version__ = "0.0.42" # pragma: no cover diff --git a/unstructured_platform_plugins/etl_uvicorn/otel.py b/unstructured_platform_plugins/etl_uvicorn/otel.py index 5eae4e4..4654d87 100644 --- a/unstructured_platform_plugins/etl_uvicorn/otel.py +++ b/unstructured_platform_plugins/etl_uvicorn/otel.py @@ -30,9 +30,11 @@ def get_settings() -> OtelSettings: service_name = os.environ.get(OTEL_SERVICE_NAME, "unknown_service") trace_exporters = os.environ.get(OTEL_TRACES_EXPORTER) trace_exporters = trace_exporters.split(",") if trace_exporters else [] + trace_exporters = [e for e in trace_exporters if e != "none"] metric_exporters = os.environ.get(OTEL_METRICS_EXPORTER) metric_exporters = metric_exporters.split(",") if metric_exporters else [] + metric_exporters = [e for e in metric_exporters if e != "none"] return OtelSettings( service_name=service_name, trace_exporters=trace_exporters, @@ -40,8 +42,11 @@ def get_settings() -> OtelSettings: ) -def get_trace_provider() -> TracerProvider: +def get_trace_provider() -> TracerProvider | None: settings = get_settings() + if not settings["trace_exporters"]: + return None + provider = TracerProvider(resource=Resource({SERVICE_NAME: settings["service_name"]})) for trace_exporter_type in settings["trace_exporters"]: @@ -50,8 +55,11 @@ def get_trace_provider() -> TracerProvider: return provider -def get_metric_provider() -> MeterProvider: +def get_metric_provider() -> MeterProvider | None: settings = get_settings() + if not settings["metric_exporters"]: + return None + readers = [] for metric_exporter_type in settings["metric_exporters"]: readers.append(_get_metrics_reader(exporter_type=metric_exporter_type))