DeviceLogController.py 3.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. #!/usr/bin/env python3
  2. # -*- coding: utf-8 -*-
  3. import time
  4. import boto3
  5. import botocore
  6. from django.views.generic.base import View
  7. from Model.models import DeviceLogModel
  8. from Service.CommonService import CommonService
  9. from Object.ResponseObject import ResponseObject
  10. from Ansjer.config import REGION_NAME, ACCESS_KEY_ID, SECRET_ACCESS_KEY, LOG_BUCKET
  11. class DeviceLogView(View):
  12. def get(self, request, *args, **kwargs):
  13. request.encoding = 'utf-8'
  14. operation = kwargs.get('operation', None)
  15. return self.validate(request, request.GET, operation)
  16. def post(self, request, *args, **kwargs):
  17. request.encoding = 'utf-8'
  18. operation = kwargs.get('operation', None)
  19. return self.validate(request, request.POST, operation)
  20. def validate(self, request, request_dict, operation):
  21. response = ResponseObject()
  22. token = request_dict.get('token', None)
  23. time_stamp = request_dict.get('time_stamp', None)
  24. # 时间戳token校验
  25. if not CommonService.check_time_stamp_token(token, time_stamp):
  26. return response.json(13)
  27. if operation == 'getUploadUrl':
  28. return self.getUploadUrl(request_dict, response)
  29. elif operation == 'uploaded':
  30. return self.uploaded(request, request_dict, response)
  31. else:
  32. return response.json(414)
  33. def getUploadUrl(self, request_dict, response):
  34. uid = request_dict.get('uid', None)
  35. file_type = request_dict.get('file_type', None)
  36. file_num = int(request_dict.get('file_num', 1))
  37. if not all([uid, file_type]):
  38. return response.json(444)
  39. try:
  40. uid = CommonService.decode_data(uid)
  41. put_url_list = []
  42. for num in range(file_num):
  43. # 日志文件名
  44. name = CommonService.createOrderID()
  45. filename = str(name) + '.' + file_type
  46. obj = 'device_log/{uid}/'.format(uid=uid) + filename
  47. aws_s3_client = boto3.client(
  48. 's3',
  49. region_name=REGION_NAME,
  50. aws_access_key_id=ACCESS_KEY_ID,
  51. aws_secret_access_key=SECRET_ACCESS_KEY,
  52. config=botocore.client.Config(signature_version='s3v4'),
  53. )
  54. put_url = aws_s3_client.generate_presigned_url(
  55. ClientMethod='put_object',
  56. Params={
  57. 'Bucket': LOG_BUCKET,
  58. 'Key': obj
  59. },
  60. ExpiresIn=3600
  61. )
  62. put_url_dict = {'put_url': put_url, 'filename': filename}
  63. put_url_list.append(put_url_dict)
  64. return response.json(0, {'put_url_list': put_url_list})
  65. except Exception as e:
  66. print(e)
  67. return response.json(500, repr(e))
  68. def uploaded(self, request, request_dict, response):
  69. uid = request_dict.get('uid', None)
  70. status = request_dict.get('status', None)
  71. filename = request_dict.get('filename', None)
  72. if not all([uid, status, filename]):
  73. return response.json(444)
  74. try:
  75. status = int(status)
  76. uid = CommonService.decode_data(uid)
  77. ip = CommonService.get_ip_address(request)
  78. DeviceLogModel.objects.create(uid=uid, ip=ip, status=status, filename=filename)
  79. return response.json(0)
  80. except Exception as e:
  81. print(e)
  82. return response.json(500, repr(e))