DeviceLogController.py 3.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  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. if not all([uid, file_type]):
  37. return response.json(444)
  38. try:
  39. uid = CommonService.decode_data(uid)
  40. # 日志文件名
  41. name = CommonService.createOrderID()
  42. filename = str(name) + '.' + file_type
  43. obj = 'device_log/{uid}/'.format(uid=uid) + filename
  44. aws_s3_client = boto3.client(
  45. 's3',
  46. region_name=REGION_NAME,
  47. aws_access_key_id=ACCESS_KEY_ID,
  48. aws_secret_access_key=SECRET_ACCESS_KEY,
  49. config=botocore.client.Config(signature_version='s3v4'),
  50. )
  51. put_url = aws_s3_client.generate_presigned_url(
  52. ClientMethod='put_object',
  53. Params={
  54. 'Bucket': LOG_BUCKET,
  55. 'Key': obj
  56. },
  57. ExpiresIn=3600
  58. )
  59. return response.json(0, {'put_url': put_url, 'filename': filename})
  60. except Exception as e:
  61. print(e)
  62. return response.json(500, repr(e))
  63. def uploaded(self, request, request_dict, response):
  64. uid = request_dict.get('uid', None)
  65. status = request_dict.get('status', None)
  66. filename = request_dict.get('filename', None)
  67. if not all([uid, status, filename]):
  68. return response.json(444)
  69. try:
  70. status = int(status)
  71. uid = CommonService.decode_data(uid)
  72. ip = CommonService.get_ip_address(request)
  73. DeviceLogModel.objects.create(uid=uid, ip=ip, status=status, filename=filename)
  74. return response.json(0)
  75. except Exception as e:
  76. print(e)
  77. return response.json(500, repr(e))