AppLogController.py 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164
  1. #!/usr/bin/env python3
  2. # -*- coding: utf-8 -*-
  3. import time
  4. import boto3
  5. import botocore
  6. import oss2
  7. from django.views.generic.base import View
  8. from Ansjer.config import OSS_STS_ACCESS_KEY, OSS_STS_ACCESS_SECRET, REGION_NAME, ACCESS_KEY_ID, SECRET_ACCESS_KEY, \
  9. LOG_BUCKET
  10. from Model.models import AppLogModel
  11. from Object.ResponseObject import ResponseObject
  12. from Object.TokenObject import TokenObject
  13. from Service.CommonService import CommonService
  14. from Service.ModelService import ModelService
  15. class AppLogView(View):
  16. def get(self, request, *args, **kwargs):
  17. request.encoding = 'utf-8'
  18. operation = kwargs.get('operation', None)
  19. return self.validate(request.GET, operation)
  20. def post(self, request, *args, **kwargs):
  21. request.encoding = 'utf-8'
  22. operation = kwargs.get('operation', None)
  23. return self.validate(request.POST, operation)
  24. def validate(self, request_dict, operation):
  25. token = request_dict.get('token', None)
  26. response = ResponseObject()
  27. if token is None:
  28. return response.json(444)
  29. token = TokenObject(token)
  30. if token.code != 0:
  31. return response.json(token.code)
  32. if operation == 'getUploadUrl':
  33. return self.get_upload_url(token.userID, request_dict, response)
  34. elif operation == 'add':
  35. return self.do_add(token.userID, request_dict, response)
  36. elif operation == 'queryByAdmin':
  37. return self.do_query_by_admin(token.userID, request_dict, response)
  38. elif operation == 'deleteByAdmin':
  39. return self.do_delete_by_admin(token.userID, request_dict, response)
  40. elif operation == 'downloadByAdmin':
  41. return response.json(404)
  42. else:
  43. return response.json(414)
  44. def get_upload_url(self, userID, request_dict, response):
  45. upload_type = request_dict.get('upload_type', None)
  46. if not upload_type:
  47. return response.json(444)
  48. name = CommonService.createOrderID()
  49. filename = str(name) + '.' + upload_type
  50. obj = 'app_log/{userID}/'.format(userID=userID) + filename
  51. aws_s3_client = boto3.client(
  52. 's3',
  53. region_name=REGION_NAME,
  54. aws_access_key_id=ACCESS_KEY_ID,
  55. aws_secret_access_key=SECRET_ACCESS_KEY,
  56. config=botocore.client.Config(signature_version='s3v4'),
  57. )
  58. response_url = aws_s3_client.generate_presigned_url(
  59. ClientMethod='put_object',
  60. Params={
  61. 'Bucket': LOG_BUCKET,
  62. 'Key': obj
  63. },
  64. ExpiresIn=3600
  65. )
  66. return response.json(0, {'put_url': response_url, 'filename': filename})
  67. def do_add(self, userID, request_dict, response):
  68. uid = request_dict.get('uid', None)
  69. average_delay = request_dict.get('average_delay', None)
  70. status = request_dict.get('status', None)
  71. filename = request_dict.get('filename', None)
  72. if uid is None or average_delay is None or status is None or filename is None:
  73. return response.json(444)
  74. else:
  75. # if len(uid) < 20:
  76. # return response.json(444, 'uid')
  77. # ModelService.app_log_log(userID, uid)
  78. now_time = int(time.time())
  79. uid = uid.strip()
  80. data = {
  81. 'uid': uid[0:20],
  82. 'average_delay': average_delay,
  83. 'status': status,
  84. 'filename': filename,
  85. 'add_time': now_time,
  86. 'user_id': userID,
  87. }
  88. AppLogModel.objects.create(**data)
  89. return response.json(0)
  90. def do_query_by_admin(self, userID, request_dict, response):
  91. own_perm = ModelService.check_perm(userID, 30)
  92. if own_perm:
  93. page = request_dict.get('page', None)
  94. line = request_dict.get('line', None)
  95. status = request_dict.get('status', None)
  96. uid = request_dict.get('uid', None)
  97. if page and line:
  98. page = int(page)
  99. line = int(line)
  100. filter_data = {}
  101. if status:
  102. filter_data['status'] = status
  103. if uid:
  104. filter_data['uid'] = uid
  105. al_qs = AppLogModel.objects.filter(**filter_data).order_by('-add_time')
  106. if al_qs.exists():
  107. count = al_qs.count()
  108. start = (page - 1) * line
  109. al_qs = al_qs[start: (start + line)].values('id', 'user__username', 'user_id', 'uid',
  110. 'average_delay', 'status', 'filename', 'add_time')
  111. res = []
  112. auth = oss2.Auth(OSS_STS_ACCESS_KEY, OSS_STS_ACCESS_SECRET)
  113. bucket = oss2.Bucket(auth, 'oss-cn-hongkong.aliyuncs.com', 'statres')
  114. for al in al_qs:
  115. filename = al['filename']
  116. obj = 'app_log/' + al['user_id'] + '/' + filename
  117. url = bucket.sign_url('GET', obj, 3600)
  118. al['url'] = url
  119. del al['filename']
  120. res.append(al)
  121. return response.json(0, {'datas': res, 'count': count})
  122. else:
  123. return response.json(0, {'datas': [], 'count': 0})
  124. else:
  125. return response.json(444, 'page, line')
  126. else:
  127. return response.json(404)
  128. def do_delete_by_admin(self, userID, request_dict, response):
  129. own_perm = ModelService.check_perm(userID, 10)
  130. if own_perm:
  131. id = request_dict.get('id', None)
  132. if id:
  133. try:
  134. AppLogModel.objects.filter(id=id).delete()
  135. except Exception as e:
  136. print(repr(e))
  137. return response.json(500, 'error_line:{}, error_msg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
  138. else:
  139. return response.json(0)
  140. else:
  141. return response.json(444)
  142. else:
  143. return response.json(404)