Initial commit
Dieser Commit ist enthalten in:
1
v2_adminpanel/middleware/__init__.py
Normale Datei
1
v2_adminpanel/middleware/__init__.py
Normale Datei
@ -0,0 +1 @@
|
||||
from .error_middleware import ErrorHandlingMiddleware
|
||||
54
v2_adminpanel/middleware/error_middleware.py
Normale Datei
54
v2_adminpanel/middleware/error_middleware.py
Normale Datei
@ -0,0 +1,54 @@
|
||||
import time
|
||||
import uuid
|
||||
from typing import Optional
|
||||
from flask import request, g
|
||||
from werkzeug.exceptions import HTTPException
|
||||
|
||||
from core.exceptions import BaseApplicationException
|
||||
from core.monitoring import track_error
|
||||
from core.logging_config import get_logger
|
||||
|
||||
|
||||
logger = get_logger(__name__)
|
||||
|
||||
|
||||
class ErrorHandlingMiddleware:
|
||||
def __init__(self, app=None):
|
||||
self.app = app
|
||||
if app:
|
||||
self.init_app(app)
|
||||
|
||||
def init_app(self, app):
|
||||
app.before_request(self._before_request)
|
||||
app.teardown_appcontext(self._teardown_request)
|
||||
|
||||
def _before_request(self):
|
||||
g.request_id = request.headers.get('X-Request-ID', str(uuid.uuid4()))
|
||||
g.start_time = time.time()
|
||||
g.errors = []
|
||||
|
||||
def _teardown_request(self, exception=None):
|
||||
if exception:
|
||||
self._handle_exception(exception)
|
||||
|
||||
if hasattr(g, 'errors') and g.errors:
|
||||
for error in g.errors:
|
||||
if isinstance(error, BaseApplicationException):
|
||||
track_error(error)
|
||||
|
||||
def _handle_exception(self, exception):
|
||||
if isinstance(exception, BaseApplicationException):
|
||||
track_error(exception)
|
||||
elif isinstance(exception, HTTPException):
|
||||
pass
|
||||
else:
|
||||
logger.error(
|
||||
f"Unhandled exception: {type(exception).__name__}",
|
||||
exc_info=True,
|
||||
extra={
|
||||
'request_id': getattr(g, 'request_id', 'unknown'),
|
||||
'endpoint': request.endpoint,
|
||||
'method': request.method,
|
||||
'path': request.path
|
||||
}
|
||||
)
|
||||
In neuem Issue referenzieren
Einen Benutzer sperren