AppLogController.py 5.7 KB

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