This documentation was generated with AI assistance and is still being audited. Some, or potentially a lot, of this information may be inaccurate. Learn more.
defget_otel_tracer(name:str)->otel_trace.Tracer|None:"""Get OpenTelemetry tracer if available. Args: name: Name for the tracer Returns: OpenTelemetry tracer or None if not available """ifnot_HAS_OTEL:returnNonetry:returnotel_trace.get_tracer(name)exceptException:# Broad catch intentional: OTEL tracing is optional, return None on any failurereturnNone
defsetup_opentelemetry_tracing(config:TelemetryConfig)->None:"""Setup OpenTelemetry tracing with configuration. Args: config: Telemetry configuration """# Check if tracing is disabled first, before checking dependenciesifnotconfig.tracing_enabledorconfig.globally_disabled:return# Check if OpenTelemetry is availableifnot_HAS_OTEL:return# Create resource with service informationresource_attrs={}ifconfig.service_name:resource_attrs["service.name"]=config.service_nameifconfig.service_version:resource_attrs["service.version"]=config.service_versionresource=Resource.create(resource_attrs)# Create tracer provider with samplingsampler=TraceIdRatioBased(config.trace_sample_rate)tracer_provider=TracerProvider(resource=resource,sampler=sampler)# Setup OTLP exporter if endpoint is configuredifconfig.otlp_endpointorconfig.otlp_traces_endpoint:endpoint=config.otlp_traces_endpointorconfig.otlp_endpointheaders=config.get_otlp_headers_dict()# Configuring OTLP exporter# Choose exporter based on protocolifconfig.otlp_protocol=="grpc":exporter:OTLPGrpcSpanExporter|OTLPHttpSpanExporter=OTLPGrpcSpanExporter(endpoint=endpoint,headers=headers,)else:# http/protobufexporter=OTLPHttpSpanExporter(endpoint=endpoint,headers=headers,)# Add batch processorprocessor=BatchSpanProcessor(exporter)tracer_provider.add_span_processor(processor)# Set the global tracer provider (only if not already set)try:current_provider=otel_trace.get_tracer_provider()provider_type=type(current_provider).__name__# Always allow setup if:# 1. It's a default/no-op provider# 2. It's a mock (for testing)# 3. It's our own TracerProvider type (allow re-configuration)should_setup=(provider_typein["NoOpTracerProvider","ProxyTracerProvider","Mock","MagicMock"]ornothasattr(current_provider,"add_span_processor")orcurrent_provider.__class__.__module__.startswith("unittest.mock"))ifshould_setup:otel_trace.set_tracer_provider(tracer_provider)else:slog.debug("π OpenTelemetry tracer provider already configured")exceptException:# Broad catch intentional: get_tracer_provider() may fail in various OTEL environments# Proceed with setup if provider check failsotel_trace.set_tracer_provider(tracer_provider)