diff --git a/ivatar/opentelemetry_config.py b/ivatar/opentelemetry_config.py index 6c637af..9257267 100644 --- a/ivatar/opentelemetry_config.py +++ b/ivatar/opentelemetry_config.py @@ -163,6 +163,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 @@ -202,6 +210,7 @@ class OpenTelemetryConfig: # Global OpenTelemetry configuration instance (lazy-loaded) _ot_config = None +_ot_initialized = False def get_ot_config(): @@ -218,6 +227,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 +245,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")