DeviceLogController.py 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  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. serial_number = request_dict.get('serial_number', None)
  36. file_type = request_dict.get('file_type', None)
  37. file_num = int(request_dict.get('file_num', 1))
  38. # uid,serial_number二传一
  39. if not (uid or serial_number and file_type):
  40. return response.json(444)
  41. try:
  42. device_id = uid if uid else serial_number
  43. device_id = CommonService.decode_data(device_id)
  44. put_url_list = []
  45. for num in range(file_num):
  46. # 日志文件名
  47. name = CommonService.createOrderID()
  48. filename = str(name) + '.' + file_type
  49. obj = 'device_log/{device_id}/'.format(device_id=device_id) + filename
  50. aws_s3_client = boto3.client(
  51. 's3',
  52. region_name=REGION_NAME,
  53. aws_access_key_id=ACCESS_KEY_ID,
  54. aws_secret_access_key=SECRET_ACCESS_KEY,
  55. config=botocore.client.Config(signature_version='s3v4'),
  56. )
  57. put_url = aws_s3_client.generate_presigned_url(
  58. ClientMethod='put_object',
  59. Params={
  60. 'Bucket': LOG_BUCKET,
  61. 'Key': obj
  62. },
  63. ExpiresIn=3600
  64. )
  65. put_url_dict = {'put_url': put_url, 'filename': filename}
  66. put_url_list.append(put_url_dict)
  67. return response.json(0, {'put_url_list': put_url_list})
  68. except Exception as e:
  69. print(e)
  70. return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
  71. def uploaded(self, request, request_dict, response):
  72. uid = request_dict.get('uid', None)
  73. serial_number = request_dict.get('serial_number', None)
  74. status = request_dict.get('status', None)
  75. filename = request_dict.get('filename', None)
  76. # uid,serial_number二传一
  77. if not (uid or serial_number and status and filename):
  78. return response.json(444)
  79. try:
  80. data_dict = {
  81. 'filename': filename,
  82. 'status': int(status),
  83. 'ip': CommonService.get_ip_address(request),
  84. }
  85. if uid:
  86. data_dict['uid'] = CommonService.decode_data(uid)
  87. else:
  88. data_dict['serial_number'] = CommonService.decode_data(serial_number)
  89. DeviceLogModel.objects.create(**data_dict)
  90. return response.json(0)
  91. except Exception as e:
  92. print(e)
  93. return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))