def instrument_app( app: fastapi.FastAPI, server_request_hook: _ServerRequestHookT = None, client_request_hook: _ClientRequestHookT = None, client_response_hook: _ClientResponseHookT = None, tracer_provider=None, excluded_urls=None, ): """Instrument an uninstrumented FastAPI application.""" if not hasattr(app, "_is_instrumented_by_opentelemetry"): app._is_instrumented_by_opentelemetry = False if not getattr(app, "_is_instrumented_by_opentelemetry", False): if excluded_urls is None: excluded_urls = _excluded_urls_from_env else: excluded_urls = parse_excluded_urls(excluded_urls) app.add_middleware( OpenTelemetryMiddleware, excluded_urls=excluded_urls, default_span_details=_get_route_details, server_request_hook=server_request_hook, client_request_hook=client_request_hook, client_response_hook=client_response_hook, tracer_provider=tracer_provider, ) app._is_instrumented_by_opentelemetry = True else: _logger.warning( "Attempting to instrument FastAPI app while already instrumented" )
def uninstrument_app(app: fastapi.FastAPI): app.user_middleware = [ x for x in app.user_middleware if x.cls is not OpenTelemetryMiddleware ] app.middleware_stack = app.build_middleware_stack() app._is_instrumented_by_opentelemetry = False