Skip to content

Commit 3d8dd4f

Browse files
committed
fix wip
1 parent 2658d7a commit 3d8dd4f

File tree

1 file changed

+28
-41
lines changed
  • instrumentation/opentelemetry-instrumentation-fastapi/src/opentelemetry/instrumentation/fastapi

1 file changed

+28
-41
lines changed

instrumentation/opentelemetry-instrumentation-fastapi/src/opentelemetry/instrumentation/fastapi/__init__.py

Lines changed: 28 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -203,9 +203,9 @@ def client_response_hook(span: Span, scope: dict[str, Any], message: dict[str, A
203203
from opentelemetry.instrumentation.fastapi.package import _instruments
204204
from opentelemetry.instrumentation.fastapi.version import __version__
205205
from opentelemetry.instrumentation.instrumentor import BaseInstrumentor
206-
from opentelemetry.metrics import get_meter
206+
from opentelemetry.metrics import Meter, get_meter
207207
from opentelemetry.semconv.trace import SpanAttributes
208-
from opentelemetry.trace import get_tracer
208+
from opentelemetry.trace import Tracer, get_tracer
209209
from opentelemetry.util.http import (
210210
get_excluded_urls,
211211
parse_excluded_urls,
@@ -230,9 +230,9 @@ def instrument_app(
230230
server_request_hook: ServerRequestHook = None,
231231
client_request_hook: ClientRequestHook = None,
232232
client_response_hook: ClientResponseHook = None,
233-
tracer_provider=None,
234-
meter_provider=None,
235-
excluded_urls=None,
233+
tracer_provider: Tracer | None = None,
234+
meter_provider: Meter | None = None,
235+
excluded_urls: str | None = None,
236236
http_capture_headers_server_request: list[str] | None = None,
237237
http_capture_headers_server_response: list[str] | None = None,
238238
http_capture_headers_sanitize_fields: list[str] | None = None,
@@ -290,9 +290,9 @@ def instrument_app(
290290
# to faithfully record what is returned to the client since it technically cannot know what `ServerErrorMiddleware` is going to do.
291291

292292
def build_middleware_stack(self: Starlette) -> ASGIApp:
293-
stack = type(self).build_middleware_stack(self)
294-
stack = OpenTelemetryMiddleware(
295-
stack,
293+
app = type(self).build_middleware_stack(self)
294+
app = OpenTelemetryMiddleware(
295+
app,
296296
excluded_urls=excluded_urls,
297297
default_span_details=_get_default_span_details,
298298
server_request_hook=server_request_hook,
@@ -310,8 +310,9 @@ def build_middleware_stack(self: Starlette) -> ASGIApp:
310310
# are handled.
311311
# This should not happen unless there is a bug in OpenTelemetryMiddleware, but if there is we don't want that
312312
# to impact the user's application just because we wrapped the middlewares in this order.
313-
stack = ServerErrorMiddleware(stack)
314-
return stack
313+
app = ServerErrorMiddleware(app)
314+
return app
315+
315316

316317
app._original_build_middleware_stack = app.build_middleware_stack
317318
app.build_middleware_stack = types.MethodType(
@@ -385,43 +386,29 @@ class _InstrumentedFastAPI(fastapi.FastAPI):
385386
_server_request_hook: ServerRequestHook = None
386387
_client_request_hook: ClientRequestHook = None
387388
_client_response_hook: ClientResponseHook = None
389+
_http_capture_headers_server_request: list[str] | None = None
390+
_http_capture_headers_server_response: list[str] | None = None
391+
_http_capture_headers_sanitize_fields: list[str] | None = None
392+
_exclude_spans: list[Literal["receive", "send"]] | None = None
393+
388394
_instrumented_fastapi_apps = set()
389395
_sem_conv_opt_in_mode = _HTTPStabilityMode.DEFAULT
390396

391397
def __init__(self, *args, **kwargs):
392398
super().__init__(*args, **kwargs)
393-
tracer = get_tracer(
394-
__name__,
395-
__version__,
396-
_InstrumentedFastAPI._tracer_provider,
397-
schema_url=_get_schema_url(
398-
_InstrumentedFastAPI._sem_conv_opt_in_mode
399-
),
400-
)
401-
meter = get_meter(
402-
__name__,
403-
__version__,
404-
_InstrumentedFastAPI._meter_provider,
405-
schema_url=_get_schema_url(
406-
_InstrumentedFastAPI._sem_conv_opt_in_mode
407-
),
408-
)
409-
self.add_middleware(
410-
OpenTelemetryMiddleware,
411-
excluded_urls=_InstrumentedFastAPI._excluded_urls,
412-
default_span_details=_get_default_span_details,
413-
server_request_hook=_InstrumentedFastAPI._server_request_hook,
414-
client_request_hook=_InstrumentedFastAPI._client_request_hook,
415-
client_response_hook=_InstrumentedFastAPI._client_response_hook,
416-
# Pass in tracer/meter to get __name__and __version__ of fastapi instrumentation
417-
tracer=tracer,
418-
meter=meter,
419-
http_capture_headers_server_request=_InstrumentedFastAPI._http_capture_headers_server_request,
420-
http_capture_headers_server_response=_InstrumentedFastAPI._http_capture_headers_server_response,
421-
http_capture_headers_sanitize_fields=_InstrumentedFastAPI._http_capture_headers_sanitize_fields,
422-
exclude_spans=_InstrumentedFastAPI._exclude_spans,
399+
FastAPIInstrumentor.instrument_app(
400+
self,
401+
server_request_hook=self._server_request_hook,
402+
client_request_hook=self._client_request_hook,
403+
client_response_hook=self._client_response_hook,
404+
tracer_provider=self._tracer_provider,
405+
meter_provider=self._meter_provider,
406+
excluded_urls=self._excluded_urls,
407+
http_capture_headers_server_request=self._http_capture_headers_server_request,
408+
http_capture_headers_server_response=self._http_capture_headers_server_response,
409+
http_capture_headers_sanitize_fields=self._http_capture_headers_sanitize_fields,
410+
exclude_spans=self._exclude_spans,
423411
)
424-
self._is_instrumented_by_opentelemetry = True
425412
_InstrumentedFastAPI._instrumented_fastapi_apps.add(self)
426413

427414
def __del__(self):

0 commit comments

Comments
 (0)