Merge branch 'devel' into 'master'

Merge latest devel fixes

See merge request oliver/ivatar!268
This commit is contained in:
Oliver Falk
2025-10-17 16:56:14 +02:00
3 changed files with 21 additions and 8 deletions

View File

@@ -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 # Add OpenTelemetry middleware only if feature flag is enabled
# Note: This will be checked at runtime, not at import time # Note: This will be checked at runtime, not at import time
MIDDLEWARE.insert( MIDDLEWARE.insert(

View File

@@ -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.trace_exporter import OTLPSpanExporter
from opentelemetry.exporter.otlp.proto.grpc.metric_exporter import OTLPMetricExporter from opentelemetry.exporter.otlp.proto.grpc.metric_exporter import OTLPMetricExporter
from opentelemetry.exporter.prometheus import PrometheusMetricReader from opentelemetry.exporter.prometheus import PrometheusMetricReader
from opentelemetry.instrumentation.django import DjangoInstrumentor
from opentelemetry.instrumentation.psycopg2 import Psycopg2Instrumentor from opentelemetry.instrumentation.psycopg2 import Psycopg2Instrumentor
from opentelemetry.instrumentation.pymysql import PyMySQLInstrumentor from opentelemetry.instrumentation.pymysql import PyMySQLInstrumentor
from opentelemetry.instrumentation.requests import RequestsInstrumentor from opentelemetry.instrumentation.requests import RequestsInstrumentor
@@ -163,6 +162,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
@@ -170,9 +177,9 @@ class OpenTelemetryConfig:
def setup_instrumentation(self) -> None: def setup_instrumentation(self) -> None:
"""Set up OpenTelemetry instrumentation for various libraries.""" """Set up OpenTelemetry instrumentation for various libraries."""
try: try:
# Django instrumentation # Django instrumentation - TEMPORARILY DISABLED TO TEST HEADER ISSUE
DjangoInstrumentor().instrument() # DjangoInstrumentor().instrument()
logger.info("Django instrumentation enabled") # logger.info("Django instrumentation enabled")
# Database instrumentation # Database instrumentation
Psycopg2Instrumentor().instrument() Psycopg2Instrumentor().instrument()
@@ -202,6 +209,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 +226,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 +244,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")

View File

@@ -318,7 +318,8 @@ try:
setup_opentelemetry() setup_opentelemetry()
# Add OpenTelemetry middleware (always enabled) # 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): except (ImportError, NameError):
# OpenTelemetry packages not installed or configuration failed # OpenTelemetry packages not installed or configuration failed
pass pass