| 1 | import datetime |
| 2 | from threading import Thread |
| 3 | from live_logger import settings |
| 4 | from .models import Log |
| 5 | |
| 6 | |
| 7 | class RequestLoggingMiddleware: |
| 8 | def __init__(self, get_response): |
| 9 | self.get_response = get_response |
| 10 | |
| 11 | def __call__(self, request): |
| 12 | |
| 13 | |
| 14 | |
| 15 | |
| 16 | for ignore in settings.LIVE_LOGGER_IGNORED_PATHS: |
| 17 | if ignore in request.path: |
| 18 | return self.get_response(request) |
| 19 | request.log = Log(meta=request.META) |
| 20 | |
| 21 | response = self.get_response(request) |
| 22 | |
| 23 | |
| 24 | |
| 25 | |
| 26 | request.log.user = request.user if request.user.is_authenticated else None |
| 27 | request.log.start_time = datetime.datetime.now( |
| 28 | tz=datetime.timezone.utc) |
| 29 | request.log.end_time = datetime.datetime.now(tz=datetime.timezone.utc) |
| 30 | request.log.status_code = response.status_code |
| 31 | Thread(target=request.log.save, daemon=True).start() |
| 32 | |
| 33 | return response |