import requests import json import logging import _thread from django.conf import settings from university.utils.requests import get_client_agent, get_client_ip logger = logging.getLogger(__name__) def report_event(user, event_type, event_body, request, description=None): user_agent = get_client_agent(request) ip = get_client_ip(request) _thread.start_new_thread( _report_event, (user, event_type, event_body, user_agent, ip, description)) def _report_event(user, event_type, event_body, user_agent, ip, description): headers = { 'Authorization': 'bearer {}'.format(settings.SSO_API_TOKEN), 'Content-Type': 'application/json' } data = { 'openid': user.singlesignonrecord_set.first().external_id, 'event_type': event_type, 'event_body': json.dumps(event_body), 'user_agent': user_agent, 'ip': ip, 'description': description } try: resp = requests.post( settings.SSO_USER_BEHAVIOR_TRACK_ENDPOINT, json=data, headers=headers) if resp.status_code != 200: logger.error('Report user behavior failed. status: {}, content: {}'.format( resp.status_code, resp.content)) except Exception: import traceback logger.error(traceback.format_exc())