Skip to content

Instantly share code, notes, and snippets.

@adriangb
Created August 14, 2021 06:51
Show Gist options
  • Save adriangb/425ed1ed327b3bdea49969ce32140fcc to your computer and use it in GitHub Desktop.
Save adriangb/425ed1ed327b3bdea49969ce32140fcc to your computer and use it in GitHub Desktop.
from typing import Awaitable, Callable
from fastapi import FastAPI, Request, Response
from fastapi.exceptions import HTTPException
from opentelemetry import trace
from opentelemetry.sdk.trace import TracerProvider
from opentelemetry.propagate import inject
from opentelemetry.instrumentation.fastapi import FastAPIInstrumentor
trace.set_tracer_provider(TracerProvider())
app = FastAPI()
@app.get("/")
async def root():
raise HTTPException(status_code=403)
@app.middleware("http")
async def inject_opentelemetry_response_headers(
request: Request,
call_next: Callable[[Request], Awaitable[Response]]
) -> Response:
response: Response = await call_next(request)
inject(response.headers)
return response
FastAPIInstrumentor.instrument_app(app)
if __name__ == "__main__":
from fastapi.testclient import TestClient
t = TestClient(app)
r = t.get("/")
print(r.headers)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment