Files
sakhteman/core/middleware/logger_middleware.py
T
2024-02-15 00:17:51 +03:30

44 lines
1.5 KiB
Python

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