mirror of
https://git.linux-kernel.at/oliver/ivatar.git
synced 2025-11-11 10:46:24 +00:00
Fix OpenTelemetry multiple initialization issue
- Add _ot_initialized flag to prevent multiple setup calls - Make setup_opentelemetry() idempotent - Handle 'Address in use' error gracefully for Prometheus server - Prevent OpenTelemetry setup failures due to multiple initialization
This commit is contained in:
@@ -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")
|
||||
|
||||
|
||||
Reference in New Issue
Block a user