AppLogController.py 6.0 KB

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