Browse Source

Merge remote-tracking branch 'origin/test'

locky 3 years ago
parent
commit
0ddfd65688

+ 2 - 9
AdminController/LogManagementController.py

@@ -145,19 +145,14 @@ class LogManagementView(View):
             return response.json(500, repr(e))
             return response.json(500, repr(e))
 
 
     def requestPublishMqtt(self, request_dict, response):
     def requestPublishMqtt(self, request_dict, response):
-        # 通用发布主题通知
-        uid = request_dict.get('uid', None)
+        # 通用发布MQTT主题通知
         msg = request_dict.get('msg', None)
         msg = request_dict.get('msg', None)
         thing_name = request_dict.get('thing_name', None)
         thing_name = request_dict.get('thing_name', None)
         topic_name = request_dict.get('topic_name', None)
         topic_name = request_dict.get('topic_name', None)
-        if not all([uid, msg, thing_name, topic_name]):
+        if not all([msg, thing_name, topic_name]):
             return response.json(444)
             return response.json(444)
 
 
         try:
         try:
-            # 设备没被添加不发送
-            device_info_qs = Device_Info.objects.filter(UID=uid).values('UID', 'serial_number')
-            if not device_info_qs.exists():
-                return response.json(10043)
             # 获取数据组织将要请求的url
             # 获取数据组织将要请求的url
             iot = iotdeviceInfoModel.objects.filter(thing_name=thing_name).values('endpoint', 'token_iot_number')
             iot = iotdeviceInfoModel.objects.filter(thing_name=thing_name).values('endpoint', 'token_iot_number')
             if not iot.exists():
             if not iot.exists():
@@ -181,8 +176,6 @@ class LogManagementView(View):
                     return response.json(0)
                     return response.json(0)
                 return response.json(10044)
                 return response.json(10044)
             else:
             else:
-                # print('发布失败')
                 return response.json(10044)
                 return response.json(10044)
         except Exception as e:
         except Exception as e:
-            # print(e)
             return response.json(500, repr(e))
             return response.json(500, repr(e))

+ 4 - 2
Ansjer/urls.py

@@ -18,7 +18,8 @@ from Controller import FeedBack, EquipmentOTA, EquipmentInfo, AdminManage, AppIn
     VerifyCodeController, FileController, UIDController, LogController, SalesController, \
     VerifyCodeController, FileController, UIDController, LogController, SalesController, \
     OrderTaskController, HistoryUIDController, UIDManageUserController, SerialNumberController, CompanyController, \
     OrderTaskController, HistoryUIDController, UIDManageUserController, SerialNumberController, CompanyController, \
     RegionController, VPGController, LanguageController, TestController, DeviceConfirmRegion, S3GetStsController, \
     RegionController, VPGController, LanguageController, TestController, DeviceConfirmRegion, S3GetStsController, \
-    DetectControllerV2, ShadowController, TestDetectController, PcInfo, PctestController, DeviceDebug
+    DetectControllerV2, ShadowController, TestDetectController, PcInfo, PctestController, DeviceDebug, \
+    DeviceLogController
 from AdminController import UserManageController, RoleController, MenuController, TestServeController, \
 from AdminController import UserManageController, RoleController, MenuController, TestServeController, \
     ServeManagementController, LogManagementController, DeviceManagementController, VersionManagementController
     ServeManagementController, LogManagementController, DeviceManagementController, VersionManagementController
 
 
@@ -261,8 +262,9 @@ urlpatterns = [
 
 
     # 苹果登录
     # 苹果登录
     url(r'^ios/authsign', UserController.AppleAuthLogin.as_view()),
     url(r'^ios/authsign', UserController.AppleAuthLogin.as_view()),
+    # app/设备上传日志接口
     url(r'^appLog/(?P<operation>.*)$', AppLogController.AppLogView.as_view()),
     url(r'^appLog/(?P<operation>.*)$', AppLogController.AppLogView.as_view()),
-
+    url(r'^deviceLog/(?P<operation>.*)$', DeviceLogController.DeviceLogView.as_view()),
     # 本地登录接口
     # 本地登录接口
     url(r'^local/(?P<operation>.*)$', UserController.LocalUserView.as_view()),
     url(r'^local/(?P<operation>.*)$', UserController.LocalUserView.as_view()),
 
 

+ 89 - 0
Controller/DeviceLogController.py

@@ -0,0 +1,89 @@
+#!/usr/bin/env python3
+# -*- coding: utf-8 -*-
+import time
+import boto3
+import botocore
+from django.views.generic.base import View
+from Model.models import DeviceLogModel
+from Service.CommonService import CommonService
+from Object.ResponseObject import ResponseObject
+from Ansjer.config import REGION_NAME, ACCESS_KEY_ID, SECRET_ACCESS_KEY, LOG_BUCKET
+
+
+class DeviceLogView(View):
+
+    def get(self, request, *args, **kwargs):
+        request.encoding = 'utf-8'
+        operation = kwargs.get('operation', None)
+        return self.validate(request.GET, operation)
+
+    def post(self, request, *args, **kwargs):
+        request.encoding = 'utf-8'
+        operation = kwargs.get('operation', None)
+        return self.validate(request.POST, operation)
+
+    def validate(self, request, request_dict, operation):
+        response = ResponseObject()
+        token = request_dict.get('token', None)
+        time_stamp = request_dict.get('time_stamp', None)
+        # 时间戳token校验
+        if not CommonService.check_time_stamp_token(token, time_stamp):
+            return response.json(13)
+
+        if operation == 'getUploadUrl':
+            return self.getUploadUrl(request_dict, response)
+        elif operation == 'uploaded':
+            return self.uploaded(request, request_dict, response)
+        else:
+            return response.json(414)
+
+    def getUploadUrl(self, request_dict, response):
+        uid = request_dict.get('uid', None)
+        file_type = request_dict.get('log_type', None)
+
+        if not all([uid, file_type]):
+            return response.json(444)
+
+        try:
+            uid = CommonService.decode_data(uid)
+            # 日志文件名
+            name = CommonService.createOrderID()
+            filename = str(name) + '.' + file_type
+            obj = 'device_log/{uid}/'.format(uid=uid) + filename
+            aws_s3_client = boto3.client(
+                's3',
+                region_name=REGION_NAME,
+                aws_access_key_id=ACCESS_KEY_ID,
+                aws_secret_access_key=SECRET_ACCESS_KEY,
+                config=botocore.client.Config(signature_version='s3v4'),
+            )
+            put_url = aws_s3_client.generate_presigned_url(
+                ClientMethod='put_object',
+                Params={
+                    'Bucket': LOG_BUCKET,
+                    'Key': obj
+                },
+                ExpiresIn=3600
+            )
+            return response.json(0, {'put_url': put_url, 'filename': filename})
+        except Exception as e:
+            print(e)
+            return response.json(500, repr(e))
+
+    def uploaded(self, request, request_dict, response):
+        uid = request_dict.get('uid', None)
+        status = request_dict.get('status', None)
+        filename = request_dict.get('filename', None)
+
+        if not all([uid, status, filename]):
+            return response.json(444)
+
+        try:
+            status = int(status)
+            uid = CommonService.decode_data(uid)
+            ip = CommonService.get_ip_address(request)
+            DeviceLogModel.objects.create(uid=uid, ip=ip, status=status, filename=filename)
+            return response.json(0)
+        except Exception as e:
+            print(e)
+            return response.json(500, repr(e))

+ 2 - 0
Object/uidManageResponseObject.py

@@ -14,6 +14,7 @@ class uidManageResponseObject(object):
             8: '用户账号已存在',
             8: '用户账号已存在',
             9: '用户账号不存在',
             9: '用户账号不存在',
             10: res,
             10: res,
+            13: '时间戳token校验失败',
             42: '两次输入的新密码错误',
             42: '两次输入的新密码错误',
             43: '客户端服务器已关闭,请下载新版本使用',
             43: '客户端服务器已关闭,请下载新版本使用',
             44: '系统错误,发送邮件失败',
             44: '系统错误,发送邮件失败',
@@ -58,6 +59,7 @@ class uidManageResponseObject(object):
             8: 'User accounts already exist',
             8: 'User accounts already exist',
             9: 'User accounts is not exist',
             9: 'User accounts is not exist',
             10: res,
             10: res,
+            13: 'Timestamp token verification failed',
             42: 'The new password entered twice is incorrect',
             42: 'The new password entered twice is incorrect',
             43: 'The client server is closed. Please download the new version for use',
             43: 'The client server is closed. Please download the new version for use',
             44: 'System error,send email fail!',
             44: 'System error,send email fail!',