Spaces:
Sleeping
Sleeping
import time | |
from typing import List | |
from fastapi import Request | |
from fastapi.routing import APIRoute | |
from starlette.middleware.base import BaseHTTPMiddleware | |
from utils.logger import Logger | |
logger = Logger.get_logger(__name__) | |
class LogIncomingRequest(BaseHTTPMiddleware): | |
def __get_request_handler(_, req: Request): # type: ignore | |
# get controller from request | |
routes: List[APIRoute] = req.app.routes | |
for route in routes: | |
if route.path_regex.match(req.url.path) and req.method in route.methods: | |
return route.endpoint.__name__ if hasattr(route.endpoint, '__name__') else 'fastapi_core' | |
async def dispatch(self, request: Request, call_next): | |
func_name = self.__get_request_handler(request) | |
request.state.func_name = func_name | |
logger.info('{} - start'.format(func_name)) | |
start_time = time.time() | |
response = await call_next(request) | |
process_time = (time.time() - start_time) * 1000 | |
formatted_process_time = '{0:.2f}'.format(process_time) | |
logger.info('{} - end in time (ms): {}'.format(func_name, | |
formatted_process_time)) | |
return response | |