AppLogController.py 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  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. ModelService.app_log_log(userID, uid)
  62. now_time = int(time.time())
  63. data = {
  64. 'uid': uid,
  65. 'average_delay': average_delay,
  66. 'status': status,
  67. 'filename': filename,
  68. 'add_time': now_time,
  69. 'user_id': userID,
  70. }
  71. AppLogModel.objects.create(**data)
  72. return response.json(0)
  73. def do_query_by_admin(self, userID, request_dict, response):
  74. own_perm = ModelService.check_perm(userID, 30)
  75. if own_perm:
  76. page = request_dict.get('page', None)
  77. line = request_dict.get('line', None)
  78. status = request_dict.get('status', None)
  79. uid = request_dict.get('uid', None)
  80. if page and line:
  81. page = int(page)
  82. line = int(line)
  83. filter_data = {}
  84. if status:
  85. filter_data['status'] = status
  86. if uid:
  87. filter_data['uid'] = uid
  88. al_qs = AppLogModel.objects.filter(**filter_data).order_by('-add_time')
  89. if al_qs.exists():
  90. count = al_qs.count()
  91. start = (page - 1) * line
  92. al_qs = al_qs[start: (start + line)].values('id', 'user__username', 'user_id', 'uid',
  93. 'average_delay', 'status', 'filename', 'add_time')
  94. res = []
  95. auth = oss2.Auth(OSS_STS_ACCESS_KEY, OSS_STS_ACCESS_SECRET)
  96. bucket = oss2.Bucket(auth, 'oss-cn-hongkong.aliyuncs.com', 'statres')
  97. for al in al_qs:
  98. filename = al['filename']
  99. obj = 'app_log/' + al['user_id'] + '/' + filename
  100. url = bucket.sign_url('GET', obj, 3600)
  101. al['url'] = url
  102. del al['filename']
  103. res.append(al)
  104. return response.json(0, {'datas': res, 'count': count})
  105. else:
  106. return response.json(0, {'datas': [], 'count': 0})
  107. else:
  108. return response.json(444, 'page, line')
  109. else:
  110. return response.json(404)
  111. def do_delete_by_admin(self, userID, request_dict, response):
  112. own_perm = ModelService.check_perm(userID, 10)
  113. if own_perm:
  114. id = request_dict.get('id', None)
  115. if id:
  116. try:
  117. AppLogModel.objects.filter(id=id).delete()
  118. except Exception as e:
  119. print(repr(e))
  120. return response.json(500, repr(e))
  121. else:
  122. return response.json(0)
  123. else:
  124. return response.json(444)
  125. else:
  126. return response.json(404)