ishantvivek/codegen
0
1import time2from typing import List3from fastapi import Request4from fastapi.routing import APIRoute5from starlette.middleware.base import BaseHTTPMiddleware6from utils.logger import Logger7 8logger = Logger.get_logger(__name__)9 10 11class LogIncomingRequest(BaseHTTPMiddleware):12 def __get_request_handler(_, req: Request): # type: ignore13 # get controller from request14 routes: List[APIRoute] = req.app.routes15 for route in routes:16 if route.path_regex.match(req.url.path) and req.method in route.methods:17 return route.endpoint.__name__ if hasattr(route.endpoint, '__name__') else 'fastapi_core'18 19 async def dispatch(self, request: Request, call_next):20 func_name = self.__get_request_handler(request)21 request.state.func_name = func_name22 23 logger.info('{} - start'.format(func_name))24 start_time = time.time()25 26 response = await call_next(request)27 28 process_time = (time.time() - start_time) * 100029 formatted_process_time = '{0:.2f}'.format(process_time)30 logger.info('{} - end in time (ms): {}'.format(func_name,31 formatted_process_time))32 return response33 