fix: instance collect
This commit is contained in:
parent
bf1c326b44
commit
41bd98dd63
1 changed files with 25 additions and 7 deletions
|
|
@ -1,23 +1,33 @@
|
||||||
|
# Python imports
|
||||||
|
import os
|
||||||
|
import atexit
|
||||||
|
|
||||||
|
# Third party imports
|
||||||
from opentelemetry import trace
|
from opentelemetry import trace
|
||||||
from opentelemetry.sdk.trace import TracerProvider
|
from opentelemetry.sdk.trace import TracerProvider
|
||||||
from opentelemetry.sdk.trace.export import BatchSpanProcessor
|
from opentelemetry.sdk.trace.export import BatchSpanProcessor
|
||||||
from opentelemetry.exporter.otlp.proto.grpc.trace_exporter import OTLPSpanExporter
|
from opentelemetry.exporter.otlp.proto.grpc.trace_exporter import OTLPSpanExporter
|
||||||
from opentelemetry.sdk.resources import Resource
|
from opentelemetry.sdk.resources import Resource
|
||||||
from opentelemetry.instrumentation.django import DjangoInstrumentor
|
from opentelemetry.instrumentation.django import DjangoInstrumentor
|
||||||
import os
|
|
||||||
|
# Global variable to track initialization
|
||||||
|
_TRACER_PROVIDER = None
|
||||||
|
|
||||||
|
|
||||||
def init_tracer():
|
def init_tracer():
|
||||||
"""Initialize OpenTelemetry with proper shutdown handling"""
|
"""Initialize OpenTelemetry with proper shutdown handling"""
|
||||||
|
global _TRACER_PROVIDER
|
||||||
|
|
||||||
# Check if already initialized to prevent double initialization
|
# If already initialized, return existing provider
|
||||||
if trace.get_tracer_provider().__class__.__name__ == "TracerProvider":
|
if _TRACER_PROVIDER is not None:
|
||||||
return
|
return _TRACER_PROVIDER
|
||||||
|
|
||||||
# Configure the tracer provider
|
# Configure the tracer provider
|
||||||
service_name = os.environ.get("SERVICE_NAME", "plane-ce-api")
|
service_name = os.environ.get("SERVICE_NAME", "plane-ce-api")
|
||||||
resource = Resource.create({"service.name": service_name})
|
resource = Resource.create({"service.name": service_name})
|
||||||
tracer_provider = TracerProvider(resource=resource)
|
tracer_provider = TracerProvider(resource=resource)
|
||||||
|
|
||||||
|
# Set as global tracer provider
|
||||||
trace.set_tracer_provider(tracer_provider)
|
trace.set_tracer_provider(tracer_provider)
|
||||||
|
|
||||||
# Configure the OTLP exporter
|
# Configure the OTLP exporter
|
||||||
|
|
@ -29,12 +39,20 @@ def init_tracer():
|
||||||
# Initialize Django instrumentation
|
# Initialize Django instrumentation
|
||||||
DjangoInstrumentor().instrument()
|
DjangoInstrumentor().instrument()
|
||||||
|
|
||||||
|
# Store provider globally
|
||||||
|
_TRACER_PROVIDER = tracer_provider
|
||||||
|
|
||||||
|
# Register shutdown handler
|
||||||
|
atexit.register(shutdown_tracer)
|
||||||
|
|
||||||
return tracer_provider
|
return tracer_provider
|
||||||
|
|
||||||
|
|
||||||
def shutdown_tracer():
|
def shutdown_tracer():
|
||||||
"""Shutdown OpenTelemetry tracers and processors"""
|
"""Shutdown OpenTelemetry tracers and processors"""
|
||||||
provider = trace.get_tracer_provider()
|
global _TRACER_PROVIDER
|
||||||
|
|
||||||
if hasattr(provider, "shutdown"):
|
if _TRACER_PROVIDER is not None:
|
||||||
provider.shutdown()
|
if hasattr(_TRACER_PROVIDER, "shutdown"):
|
||||||
|
_TRACER_PROVIDER.shutdown()
|
||||||
|
_TRACER_PROVIDER = None
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue