Skip to content

Commit 5b514bb

Browse files
committed
add performance requst middleware
1 parent b1f7d07 commit 5b514bb

1 file changed

Lines changed: 20 additions & 2 deletions

File tree

  • Chapter03/reservation-service/presentation

Chapter03/reservation-service/presentation/main.py

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
1+
import logging
2+
import time
13
from collections.abc import AsyncIterator
24
from contextlib import asynccontextmanager
3-
from typing import TypedDict
5+
from typing import Awaitable, Callable, TypedDict
46

5-
from fastapi import FastAPI
7+
from fastapi import FastAPI, Request, Response
68

79
from domain.repositories import AvailabilitySlotRepository
810
from infrastructure.in_memory_slot_repository import (
@@ -11,6 +13,8 @@
1113

1214
from .api.routes import router
1315

16+
logger = logging.getLogger("uvicorn")
17+
1418

1519
class State(TypedDict):
1620
repository: AvailabilitySlotRepository
@@ -48,3 +52,17 @@ def health_check():
4852

4953

5054
app.include_router(router=router)
55+
56+
57+
@app.middleware("http")
58+
async def measuring_request_performance(
59+
request: Request,
60+
call_next: Callable[[Request], Awaitable[Response]],
61+
):
62+
start_time = time.perf_counter()
63+
logger.debug("measuring performance logger")
64+
response = await call_next(request)
65+
process_time = time.perf_counter() - start_time
66+
logger.debug(f"measured performance:{str(process_time)}")
67+
response.headers["X-Process-Time"] = str(process_time)
68+
return response

0 commit comments

Comments
 (0)