ReportController.py 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. # @Author : Rocky
  2. # @File : ReportController.py
  3. # @Time : 2025/5/12 10:42
  4. import json
  5. import time
  6. from django.views import View
  7. from AnsjerPush.config import LOGGER
  8. from Object.RedisObject import RedisObject
  9. from Object.ResponseObject import ResponseObject
  10. from Model.models import AbnormalEvent
  11. class ReportView(View):
  12. def get(self, request, *args, **kwargs):
  13. request.encoding = 'utf-8'
  14. operation = kwargs.get('operation')
  15. return self.validation(request.GET, operation)
  16. def post(self, request, *args, **kwargs):
  17. request.encoding = 'utf-8'
  18. operation = kwargs.get('operation')
  19. return self.validation(json.loads(request.body), operation)
  20. def validation(self, request_dict, operation):
  21. response = ResponseObject()
  22. if operation == 'abnormalEvent': # 上报异常事件
  23. return self.abnormal_event(request_dict, response)
  24. @staticmethod
  25. def abnormal_event(request_dict, response):
  26. LOGGER.info('上报异常事件参数:{}'.format(request_dict))
  27. uid = request_dict.get('uid')
  28. device_type = request_dict.get('device_type')
  29. version = request_dict.get('version')
  30. event_list = request_dict.get('event_list')
  31. if not all([uid, device_type, version, event_list]):
  32. return response.json(444)
  33. # 同一设备限制十分钟之内不能重复请求
  34. redis_obj = RedisObject()
  35. key = 'report_abnormal_event_{}'.format(uid)
  36. ttl = redis_obj.get_ttl(key)
  37. if ttl > 0:
  38. res = {
  39. 'limit_time': ttl
  40. }
  41. return response.json(10, res)
  42. redis_obj.set_data(key=key, val=1, expire=600)
  43. try:
  44. device_type = int(device_type)
  45. now_time = int(time.time())
  46. # 批量创建异常事件数据
  47. abnormal_event_list = []
  48. data = {
  49. 'uid': uid,
  50. 'device_type': device_type,
  51. 'version': version,
  52. 'created_time': now_time,
  53. 'report_type': 0
  54. }
  55. for event in event_list:
  56. data['event_code'] = event['event_code']
  57. data['event_time'] = event['event_time']
  58. if event.get('content'):
  59. data['content'] = event['content']
  60. abnormal_event = AbnormalEvent(**data)
  61. abnormal_event_list.append(abnormal_event)
  62. AbnormalEvent.objects.bulk_create(abnormal_event_list)
  63. return response.json(0)
  64. except Exception as e:
  65. return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))