Przeglądaj źródła

上报异常事件接口

locky 3 miesięcy temu
rodzic
commit
a8519a6e67
3 zmienionych plików z 75 dodań i 1 usunięć
  1. 3 1
      AnsjerPush/urls.py
  2. 57 0
      Controller/ReportController.py
  3. 15 0
      Model/models.py

+ 3 - 1
AnsjerPush/urls.py

@@ -2,7 +2,7 @@ from django.urls import path, re_path
 
 from Controller import DetectController, ShadowController, DetectControllerV2, AiController, gatewayController, \
     PowerWarningController, InitController, CustomizedPushController, TransparentTransmissionPushController, \
-    DeviceReportController
+    DeviceReportController, ReportController
 from Controller.ComboCron import ComboCronPushController
 from Controller.Cron import CronTaskController
 
@@ -19,6 +19,8 @@ urlpatterns = [
     re_path(r'init/(?P<operation>.*)', InitController.InitView.as_view()),
     re_path(r'^AiService/(?P<operation>.*)$', AiController.AiView.as_view()),
     re_path(r'^gatewayService/(?P<operation>.*)$', gatewayController.GatewayView.as_view()),
+
+    re_path('report/(?P<operation>.*)$', ReportController.ReportView.as_view()),
     re_path('unicom/device/combo/(?P<operation>.*)$', ComboCronPushController.ComboCronPushView.as_view()),
     re_path('customized_push/(?P<operation>.*)', CustomizedPushController.CustomizedPushView.as_view()),
     re_path('push/device/report/(?P<operation>.*)$', DeviceReportController.DeviceReportView.as_view()),

+ 57 - 0
Controller/ReportController.py

@@ -0,0 +1,57 @@
+# @Author    : Rocky
+# @File      : ReportController.py
+# @Time      : 2025/5/12 10:42
+import json
+import time
+
+from django.views import View
+
+from Object.ResponseObject import ResponseObject
+from Model.models import AbnormalEvent
+
+
+class ReportView(View):
+
+    def get(self, request, *args, **kwargs):
+        request.encoding = 'utf-8'
+        operation = kwargs.get('operation')
+        return self.validation(request.GET, operation)
+
+    def post(self, request, *args, **kwargs):
+        request.encoding = 'utf-8'
+        operation = kwargs.get('operation')
+        return self.validation(request.POST, operation)
+
+    def validation(self, request_dict, operation):
+        response = ResponseObject()
+        if operation == 'abnormalEvent':  # 上报异常事件
+            return self.abnormal_event(request_dict, response)
+
+    @staticmethod
+    def abnormal_event(request_dict, response):
+        uid = request_dict.get('uid')
+        device_type = request_dict.get('device_type')
+        version = request_dict.get('version')
+        event_list = request_dict.get('event_list')
+
+        if not all([uid, device_type, version, event_list]):
+            return response.json(444)
+
+        try:
+            device_type = int(device_type)
+            now_time = int(time.time())
+            event_list = json.loads(event_list)
+
+            abnormal_event_list = []
+            for event in event_list:
+                event_code = event['event_code']
+                event_time = event['event_time']
+                abnormal_event = AbnormalEvent(
+                    uid=uid, device_type=device_type, version=version, event_code=event_code, event_time=event_time,
+                    created_time=now_time
+                )
+                abnormal_event_list.append(abnormal_event)
+            AbnormalEvent.objects.bulk_create(abnormal_event_list)
+            return response.json(0)
+        except Exception as e:
+            return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))

+ 15 - 0
Model/models.py

@@ -3540,6 +3540,21 @@ class DeviceDailyReport(models.Model):
         app_label = 'db2'
 
 
+class AbnormalEvent(models.Model):
+    id = models.AutoField(primary_key=True, verbose_name='自增标记ID')
+    uid = models.CharField(default='', max_length=20, verbose_name='uid')
+    device_type = models.IntegerField(default=0, verbose_name='设备类型')
+    version = models.CharField(default='', max_length=64, verbose_name='设备版本')
+    event_code = models.CharField(default='', max_length=16, verbose_name='异常事件编码')
+    event_time = models.IntegerField(default=0, verbose_name='异常事件触发时间')
+    created_time = models.IntegerField(default=0, verbose_name='创建时间')
+
+    class Meta:
+        db_table = 'abnormal_event'
+        verbose_name = '异常事件'
+        app_label = 'db2'
+
+
 class AlbumTitle(models.Model):
     id = models.AutoField(primary_key=True)
     album_title = models.TextField(blank=True, default='', verbose_name='相册标题')