import time from starlette.requests import Request from core.app import app from core.modules import logger from core.utils.auth import decode_token @app.middleware("http") async def logger_middleware(request: Request, call_next): start_time = time.time() app.state.request = request response = await call_next(request) try: user = request.state.user if hasattr(request.state, "user") else None token = ( decode_token(request.headers.get("Authorization")) if request.headers.get("Authorization") else None ) process_time = time.time() - start_time # logger.emit_access( # { # "ip": request.client.host, # "method": request.method, # "path": request.url.path, # "p_time": float("{0:.3f}".format(process_time)), # "status": response.status_code, # "uid": token.get("sub") if token else None, # "scopes": token.get("scopes") if token else None, # "name": user.name if user else None, # "level": response.status_code >= 400 and "error" or "info", # "user_agent": httpagentparser.simple_detect( # request.headers.get("User-Agent") # ), # "referer": request.headers.get("Referer"), # } # ) except Exception as e: logger.emit({'error': str(e)}, logger.Types.Error) finally: return response