AppLogController.py 5.4 KB

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