From b4e74791e651eeece7c63585fafda3f77f6af9ad Mon Sep 17 00:00:00 2001 From: Matthias Mair Date: Sat, 7 Nov 2026 21:33:17 +0100 Subject: [PATCH] fix otel middleware instrumentation (#13219) * fix otel instrumentation * fix name conflict --- src/backend/InvenTree/InvenTree/settings.py | 2 ++ src/backend/InvenTree/InvenTree/tracing.py | 8 ++++++++ 2 files changed, 10 insertions(+) diff --git a/src/backend/InvenTree/InvenTree/settings.py b/src/backend/InvenTree/InvenTree/settings.py index a3ca6e5bbe..255de251cf 100644 --- a/src/backend/InvenTree/InvenTree/settings.py +++ b/src/backend/InvenTree/InvenTree/settings.py @@ -34,6 +34,7 @@ from InvenTree.config import ( ) from InvenTree.ready import isInMainThread, isRunningBackup from InvenTree.sentry import default_sentry_dsn, init_sentry +from InvenTree.tracing import ensure_otel_middleware from InvenTree.validators import invalid_site_url_hint from InvenTree.version import checkMinPythonVersion, inventreeCommitHash from users.oauth2_scopes import oauth2_scopes @@ -702,6 +703,7 @@ TRACING_ENABLED = ( TRACING_DETAILS: Optional[dict] = tracing.configure_tracing( DB_ENGINE, TRACING_ENABLED, inventree_tags ) +MIDDLEWARE = ensure_otel_middleware(MIDDLEWARE) # Cache configuration GLOBAL_CACHE_ENABLED = is_global_cache_enabled() diff --git a/src/backend/InvenTree/InvenTree/tracing.py b/src/backend/InvenTree/InvenTree/tracing.py index 41ceb9fac8..f95866c9a5 100644 --- a/src/backend/InvenTree/InvenTree/tracing.py +++ b/src/backend/InvenTree/InvenTree/tracing.py @@ -173,6 +173,14 @@ def setup_tracing( TRACE_PID = os.getpid() +def ensure_otel_middleware(middleware): + """Ensure the OTELmiddleware is the first entry in MIDDLEWARE.""" + if not DjangoInstrumentor().is_instrumented_by_opentelemetry: + return list(middleware) + otel = DjangoInstrumentor._opentelemetry_middleware + return [otel, *(m for m in middleware if m != otel)] + + def setup_instruments(db_engine: str): # pragma: no cover """Run auto-instrumentation for OpenTelemetry tracing.""" if not DjangoInstrumentor()._is_instrumented_by_opentelemetry: