|
@@ -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))
|