Merge devel into master - resolve OpenTelemetry conflict

- Resolve merge conflict in opentelemetry_config.py
- Keep improved OSError handling for 'Address in use' error
- Include latest OpenTelemetry multiple initialization fix
This commit is contained in:
Oliver Falk
2025-10-17 14:57:48 +02:00

View File

@@ -163,6 +163,14 @@ class OpenTelemetryConfig:
logger.info(f"Prometheus metrics server started on {host}:{port}") 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: except Exception as e:
logger.error(f"Failed to start Prometheus metrics server: {e}") logger.error(f"Failed to start Prometheus metrics server: {e}")
self.enabled = False self.enabled = False
@@ -202,6 +210,7 @@ class OpenTelemetryConfig:
# Global OpenTelemetry configuration instance (lazy-loaded) # Global OpenTelemetry configuration instance (lazy-loaded)
_ot_config = None _ot_config = None
_ot_initialized = False
def get_ot_config(): def get_ot_config():
@@ -218,6 +227,12 @@ def setup_opentelemetry() -> None:
This function should be called during Django application startup. 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...") logger.info("Setting up OpenTelemetry...")
ot_config = get_ot_config() ot_config = get_ot_config()
@@ -230,6 +245,7 @@ def setup_opentelemetry() -> None:
logger.info("OpenTelemetry setup completed successfully (export enabled)") logger.info("OpenTelemetry setup completed successfully (export enabled)")
else: else:
logger.info("OpenTelemetry setup completed successfully (export disabled)") logger.info("OpenTelemetry setup completed successfully (export disabled)")
_ot_initialized = True
else: else:
logger.info("OpenTelemetry setup failed") logger.info("OpenTelemetry setup failed")