import threading def log_event(event_type, user, description='', metadata=None, result='success', target_user=None, ip_address=None, user_agent=None, request=None): def _save(): try: from .models import SystemEventLog if request and not ip_address: x_forwarded_for = request.META.get('HTTP_X_FORWARDED_FOR') if x_forwarded_for: ip_addr = x_forwarded_for.split(',')[0].strip() else: ip_addr = request.META.get('REMOTE_ADDR') else: ip_addr = ip_address if request and not user_agent: ua = request.META.get('HTTP_USER_AGENT', '')[:500] else: ua = user_agent or '' SystemEventLog.objects.create( event_type=event_type, user=user, target_user=target_user, description=description[:500], metadata=metadata or {}, ip_address=ip_addr, user_agent=ua, result=result, ) except Exception: pass thread = threading.Thread(target=_save) thread.daemon = True thread.start()