Team Ai
Apppublic

ishantvivek/codegen

sourceHugging Faceupdated 2y agoView on Hugging Face
0likes
log_incoming_request.py33 linesDownload Raw Back to middleware
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