From 41bd98dd63035e0ef8dfdd39dd417eb3bdad3620 Mon Sep 17 00:00:00 2001 From: pablohashescobar Date: Fri, 29 Nov 2024 17:41:06 +0530 Subject: [PATCH] fix: instance collect --- apiserver/plane/utils/telemetry.py | 32 +++++++++++++++++++++++------- 1 file changed, 25 insertions(+), 7 deletions(-) diff --git a/apiserver/plane/utils/telemetry.py b/apiserver/plane/utils/telemetry.py index 8fb030ac14..bec3d240dd 100644 --- a/apiserver/plane/utils/telemetry.py +++ b/apiserver/plane/utils/telemetry.py @@ -1,23 +1,33 @@ +# Python imports +import os +import atexit + +# Third party imports from opentelemetry import trace from opentelemetry.sdk.trace import TracerProvider from opentelemetry.sdk.trace.export import BatchSpanProcessor from opentelemetry.exporter.otlp.proto.grpc.trace_exporter import OTLPSpanExporter from opentelemetry.sdk.resources import Resource from opentelemetry.instrumentation.django import DjangoInstrumentor -import os + +# Global variable to track initialization +_TRACER_PROVIDER = None def init_tracer(): """Initialize OpenTelemetry with proper shutdown handling""" + global _TRACER_PROVIDER - # Check if already initialized to prevent double initialization - if trace.get_tracer_provider().__class__.__name__ == "TracerProvider": - return + # If already initialized, return existing provider + if _TRACER_PROVIDER is not None: + return _TRACER_PROVIDER # Configure the tracer provider service_name = os.environ.get("SERVICE_NAME", "plane-ce-api") resource = Resource.create({"service.name": service_name}) tracer_provider = TracerProvider(resource=resource) + + # Set as global tracer provider trace.set_tracer_provider(tracer_provider) # Configure the OTLP exporter @@ -29,12 +39,20 @@ def init_tracer(): # Initialize Django instrumentation DjangoInstrumentor().instrument() + # Store provider globally + _TRACER_PROVIDER = tracer_provider + + # Register shutdown handler + atexit.register(shutdown_tracer) + return tracer_provider def shutdown_tracer(): """Shutdown OpenTelemetry tracers and processors""" - provider = trace.get_tracer_provider() + global _TRACER_PROVIDER - if hasattr(provider, "shutdown"): - provider.shutdown() + if _TRACER_PROVIDER is not None: + if hasattr(_TRACER_PROVIDER, "shutdown"): + _TRACER_PROVIDER.shutdown() + _TRACER_PROVIDER = None