From 8b2675591e168140de71a213ac955c3164d58f74 Mon Sep 17 00:00:00 2001 From: Oliver Falk Date: Fri, 17 Oct 2025 16:56:13 +0200 Subject: [PATCH] Merge latest devel fixes --- config.py | 3 --- ivatar/opentelemetry_config.py | 23 +++++++++++++++++++---- ivatar/settings.py | 3 ++- 3 files changed, 21 insertions(+), 8 deletions(-) diff --git a/config.py b/config.py index 7a6cb76..0bb7add 100644 --- a/config.py +++ b/config.py @@ -35,9 +35,6 @@ MIDDLEWARE.extend( ] ) -# Add OpenTelemetry middleware (always enabled now) -MIDDLEWARE.insert(0, "ivatar.opentelemetry_middleware.OpenTelemetryMiddleware") - # Add OpenTelemetry middleware only if feature flag is enabled # Note: This will be checked at runtime, not at import time MIDDLEWARE.insert( diff --git a/ivatar/opentelemetry_config.py b/ivatar/opentelemetry_config.py index 6c637af..5fc32f9 100644 --- a/ivatar/opentelemetry_config.py +++ b/ivatar/opentelemetry_config.py @@ -18,7 +18,6 @@ from opentelemetry.sdk.resources import Resource from opentelemetry.exporter.otlp.proto.grpc.trace_exporter import OTLPSpanExporter from opentelemetry.exporter.otlp.proto.grpc.metric_exporter import OTLPMetricExporter from opentelemetry.exporter.prometheus import PrometheusMetricReader -from opentelemetry.instrumentation.django import DjangoInstrumentor from opentelemetry.instrumentation.psycopg2 import Psycopg2Instrumentor from opentelemetry.instrumentation.pymysql import PyMySQLInstrumentor from opentelemetry.instrumentation.requests import RequestsInstrumentor @@ -163,6 +162,14 @@ class OpenTelemetryConfig: logger.info(f"Prometheus metrics server started on {host}:{port}") + except OSError as e: + if e.errno == 98: # Address already in use + logger.warning( + f"Prometheus metrics server already running on {endpoint}" + ) + else: + logger.error(f"Failed to start Prometheus metrics server: {e}") + self.enabled = False except Exception as e: logger.error(f"Failed to start Prometheus metrics server: {e}") self.enabled = False @@ -170,9 +177,9 @@ class OpenTelemetryConfig: def setup_instrumentation(self) -> None: """Set up OpenTelemetry instrumentation for various libraries.""" try: - # Django instrumentation - DjangoInstrumentor().instrument() - logger.info("Django instrumentation enabled") + # Django instrumentation - TEMPORARILY DISABLED TO TEST HEADER ISSUE + # DjangoInstrumentor().instrument() + # logger.info("Django instrumentation enabled") # Database instrumentation Psycopg2Instrumentor().instrument() @@ -202,6 +209,7 @@ class OpenTelemetryConfig: # Global OpenTelemetry configuration instance (lazy-loaded) _ot_config = None +_ot_initialized = False def get_ot_config(): @@ -218,6 +226,12 @@ def setup_opentelemetry() -> None: This function should be called during Django application startup. """ + global _ot_initialized + + if _ot_initialized: + logger.debug("OpenTelemetry already initialized, skipping setup") + return + logger.info("Setting up OpenTelemetry...") ot_config = get_ot_config() @@ -230,6 +244,7 @@ def setup_opentelemetry() -> None: logger.info("OpenTelemetry setup completed successfully (export enabled)") else: logger.info("OpenTelemetry setup completed successfully (export disabled)") + _ot_initialized = True else: logger.info("OpenTelemetry setup failed") diff --git a/ivatar/settings.py b/ivatar/settings.py index 3c28237..1be0c9d 100644 --- a/ivatar/settings.py +++ b/ivatar/settings.py @@ -318,7 +318,8 @@ try: setup_opentelemetry() # Add OpenTelemetry middleware (always enabled) - MIDDLEWARE.append("ivatar.opentelemetry_middleware.OpenTelemetryMiddleware") + # TODO: Need to reenable this again! + # MIDDLEWARE.append("ivatar.opentelemetry_middleware.OpenTelemetryMiddleware") except (ImportError, NameError): # OpenTelemetry packages not installed or configuration failed pass