11""" Adds fastapi middleware for tracing using opentelemetry instrumentation.
22
33"""
4+
45import logging
56
67from fastapi import FastAPI
2122
2223def setup_tracing (
2324 app : FastAPI , tracing_settings : TracingSettings , service_name : str
24- ) -> FastAPIInstrumentor | None :
25+ ) -> None :
2526 if (
2627 not tracing_settings .TRACING_OPENTELEMETRY_COLLECTOR_ENDPOINT
2728 and not tracing_settings .TRACING_OPENTELEMETRY_COLLECTOR_PORT
2829 ):
2930 log .warning ("Skipping opentelemetry tracing setup" )
30- return None
31+ return
3132 if (
3233 not tracing_settings .TRACING_OPENTELEMETRY_COLLECTOR_ENDPOINT
3334 or not tracing_settings .TRACING_OPENTELEMETRY_COLLECTOR_PORT
3435 ):
35- raise RuntimeError (
36- f"Variable opentelemetry_collector_endpoint [{ tracing_settings .TRACING_OPENTELEMETRY_COLLECTOR_ENDPOINT } ] or opentelemetry_collector_port [{ tracing_settings .TRACING_OPENTELEMETRY_COLLECTOR_PORT } ] unset. Tracing options incomplete."
36+ msg = (
37+ f"Variable opentelemetry_collector_endpoint [{ tracing_settings .TRACING_OPENTELEMETRY_COLLECTOR_ENDPOINT } ] "
38+ f"or opentelemetry_collector_port [{ tracing_settings .TRACING_OPENTELEMETRY_COLLECTOR_PORT } ] unset. Tracing options incomplete."
3739 )
40+ raise RuntimeError (msg )
3841 # Set up the tracer provider
3942 resource = Resource (attributes = {"service.name" : service_name })
4043 trace .set_tracer_provider (TracerProvider (resource = resource ))
41- tracer_provider = trace .get_tracer_provider ()
44+ global_tracer_provider = trace .get_tracer_provider ()
45+ assert isinstance (global_tracer_provider , TracerProvider ) # nosec
4246 tracing_destination : str = f"{ tracing_settings .TRACING_OPENTELEMETRY_COLLECTOR_ENDPOINT } :{ tracing_settings .TRACING_OPENTELEMETRY_COLLECTOR_PORT } /v1/traces"
4347 log .info (
4448 "Trying to connect service %s to tracing collector at %s." ,
@@ -48,7 +52,6 @@ def setup_tracing(
4852 # Configure OTLP exporter to send spans to the collector
4953 otlp_exporter = OTLPSpanExporterHTTP (endpoint = tracing_destination )
5054 span_processor = BatchSpanProcessor (otlp_exporter )
51- # Mypy bug --> https://github.com/open-telemetry/opentelemetry-python/issues/3713
52- tracer_provider .add_span_processor (span_processor ) # type: ignore[attr-defined]
55+ global_tracer_provider .add_span_processor (span_processor )
5356 # Instrument FastAPI
54- return FastAPIInstrumentor ().instrument_app (app ) # type: ignore[no-any-return]
57+ FastAPIInstrumentor ().instrument_app (app )
0 commit comments