import datetime import zoneinfo from fastapi import Request, Response from starlette.middleware.base import BaseHTTPMiddleware from app.utils.monitoring import monitoring class MetricsMiddleware(BaseHTTPMiddleware): async def dispatch(self, request: Request, call_next): start = datetime.datetime.now(zoneinfo.ZoneInfo("Europe/Moscow")) response: Response = await call_next(request) end = datetime.datetime.now(zoneinfo.ZoneInfo("Europe/Moscow")) monitoring.send_metric(start, end, request.url.path, response.status_code, request.method) return response