LogManagementController.py 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263
  1. #!/usr/bin/env python3
  2. # -*- coding: utf-8 -*-
  3. import requests
  4. from django.views.generic.base import View
  5. from Object.ResponseObject import ResponseObject
  6. from Object.TokenObject import TokenObject
  7. from Service.CommonService import CommonService
  8. from Model.models import Device_Info, RequestRecordModel, iotdeviceInfoModel, Access_Log, DeviceLogModel
  9. class LogManagementView(View):
  10. def get(self, request, *args, **kwargs):
  11. request.encoding = 'utf-8'
  12. operation = kwargs.get('operation')
  13. return self.validation(request.GET, request, operation)
  14. def post(self, request, *args, **kwargs):
  15. request.encoding = 'utf-8'
  16. operation = kwargs.get('operation')
  17. return self.validation(request.POST, request, operation)
  18. def validation(self, request_dict, request, operation):
  19. language = request_dict.get('language', 'en')
  20. response = ResponseObject(language, 'pc')
  21. if operation == '??':
  22. return 0
  23. else:
  24. tko = TokenObject(
  25. request.META.get('HTTP_AUTHORIZATION'),
  26. returntpye='pc')
  27. # if tko.code != 0:
  28. # return response.json(tko.code)
  29. response.lang = tko.lang
  30. userID = tko.userID
  31. if operation == 'getRequestList':
  32. return self.getRequestList(request_dict, response)
  33. elif operation == 'getDeviceIotInfoList':
  34. return self.getDeviceIotInfoList(request_dict, response)
  35. elif operation == 'requestPublishMqtt':
  36. return self.requestPublishMqtt(request_dict, response)
  37. elif operation == 'getAccessLogList':
  38. return self.getAccessLogList(request_dict, response)
  39. elif operation == 'getDeviceLogList':
  40. return self.getDeviceLogList(request_dict, response)
  41. else:
  42. return response.json(404)
  43. def getRequestList(self, request_dict, response):
  44. pageNo = request_dict.get('pageNo', None)
  45. pageSize = request_dict.get('pageSize', None)
  46. method = request_dict.get('method', None)
  47. url = request_dict.get('url', None)
  48. parameter = request_dict.get('parameter', None)
  49. status_code = request_dict.get('status_code', None)
  50. reason_phrase = request_dict.get('reason_phrase', None)
  51. if not all([pageNo, pageSize]):
  52. return response.json(444)
  53. page = int(pageNo)
  54. line = int(pageSize)
  55. try:
  56. request_qs = RequestRecordModel.objects.all()
  57. if method:
  58. request_qs = request_qs.filter(method=method)
  59. if url:
  60. request_qs = request_qs.filter(url__contains=url)
  61. if parameter:
  62. request_qs = request_qs.filter(parameter__contains=parameter)
  63. if status_code:
  64. request_qs = request_qs.filter(status_code=status_code)
  65. if reason_phrase:
  66. request_qs = request_qs.filter(reason_phrase=reason_phrase)
  67. count = request_qs.count()
  68. request_qs = request_qs[(page - 1) * line:page * line]
  69. qs_list = []
  70. for requsetobj in request_qs:
  71. qs_list.append({
  72. 'id': requsetobj.id,
  73. 'method': requsetobj.method,
  74. 'url': requsetobj.url,
  75. 'parameter': requsetobj.parameter,
  76. # 时间保留小数点后两位
  77. 'execute_time': round(requsetobj.execute_time, 2),
  78. 'status_code': requsetobj.status_code,
  79. 'reason_phrase': requsetobj.reason_phrase,
  80. 'add_time': requsetobj.add_time.strftime("%Y-%m-%d %H:%M:%S"),
  81. })
  82. return response.json(
  83. 0, {'list': qs_list, 'total': count})
  84. except Exception as e:
  85. print(e)
  86. return response.json(500, repr(e))
  87. def getDeviceIotInfoList(self, request_dict, response):
  88. serial_number = request_dict.get('serial_number', None)
  89. uid = request_dict.get('uid', None)
  90. pageNo = request_dict.get('pageNo', None)
  91. pageSize = request_dict.get('pageSize', None)
  92. if not all([pageNo, pageSize]):
  93. return response.json(444)
  94. page = int(pageNo)
  95. line = int(pageSize)
  96. try:
  97. if serial_number or uid:
  98. if serial_number:
  99. iot_device_info_qs = iotdeviceInfoModel.objects.filter(
  100. serial_number__contains=serial_number)
  101. if uid:
  102. iot_device_info_qs = iotdeviceInfoModel.objects.filter(
  103. uid__contains=uid)
  104. if not iot_device_info_qs.exists():
  105. return response.json(0)
  106. total = len(iot_device_info_qs)
  107. iot_device_info_qs = iot_device_info_qs.values(
  108. 'serial_number',
  109. 'uid',
  110. 'thing_name',
  111. 'thing_groups',
  112. 'add_time',
  113. 'update_time')[
  114. (page - 1) * line:page * line]
  115. else:
  116. total = iotdeviceInfoModel.objects.filter().count()
  117. iot_device_info_qs = iotdeviceInfoModel.objects.filter().values(
  118. 'serial_number',
  119. 'uid',
  120. 'thing_name',
  121. 'thing_groups',
  122. 'add_time',
  123. 'update_time')[
  124. (page - 1) * line:page * line]
  125. iot_device_info_list = CommonService.qs_to_list(iot_device_info_qs)
  126. # 获取序列号的uid
  127. for iot_device_info in iot_device_info_list:
  128. if not iot_device_info['uid']:
  129. device_info_qs = Device_Info.objects.filter(
  130. serial_number__contains=iot_device_info['serial_number']).values('UID')
  131. if device_info_qs.exists():
  132. iot_device_info['uid'] = device_info_qs[0]['UID']
  133. return response.json(
  134. 0, {'list': iot_device_info_list, 'total': total})
  135. except Exception as e:
  136. print(e)
  137. return response.json(500, repr(e))
  138. def requestPublishMqtt(self, request_dict, response):
  139. # 通用发布MQTT主题通知
  140. msg = request_dict.get('msg', None)
  141. thing_name = request_dict.get('thing_name', None)
  142. topic_name = request_dict.get('topic_name', None)
  143. if not all([msg, thing_name, topic_name]):
  144. return response.json(444)
  145. try:
  146. # 获取数据组织将要请求的url
  147. iot = iotdeviceInfoModel.objects.filter(
  148. thing_name=thing_name).values(
  149. 'endpoint', 'token_iot_number')
  150. if not iot.exists():
  151. return response.json(10043)
  152. endpoint = iot[0]['endpoint']
  153. Token = iot[0]['token_iot_number']
  154. # api doc: https://docs.aws.amazon.com/zh_cn/iot/latest/developerguide/http.html
  155. # url: https://IoT_data_endpoint/topics/url_encoded_topic_name?qos=1
  156. # post请求url发布MQTT消息
  157. url = 'https://{}/topics/{}'.format(endpoint, topic_name)
  158. authorizer_name = 'Ansjer_Iot_Auth'
  159. signature = CommonService.rsa_sign(Token) # Token签名
  160. headers = {
  161. 'x-amz-customauthorizer-name': authorizer_name,
  162. 'Token': Token,
  163. 'x-amz-customauthorizer-signature': signature}
  164. msg = eval(msg)
  165. r = requests.post(url=url, headers=headers, json=msg, timeout=2)
  166. if r.status_code == 200:
  167. res = r.json()
  168. if res['message'] == 'OK':
  169. return response.json(0)
  170. return response.json(10044)
  171. else:
  172. return response.json(10044)
  173. except Exception as e:
  174. return response.json(500, repr(e))
  175. def getAccessLogList(self, request_dict, response):
  176. user = request_dict.get('user', None)
  177. operation = request_dict.get('operation', None)
  178. status = request_dict.get('status', None)
  179. pageNo = request_dict.get('pageNo', None)
  180. pageSize = request_dict.get('pageSize', None)
  181. if not all([pageNo, pageSize]):
  182. return response.json(444)
  183. page = int(pageNo)
  184. line = int(pageSize)
  185. try:
  186. if user or operation or status:
  187. if user:
  188. access_log_qs = Access_Log.objects.filter(
  189. user__contains=user)
  190. if operation:
  191. access_log_qs = Access_Log.objects.filter(
  192. operation__contains=operation)
  193. if status:
  194. access_log_qs = Access_Log.objects.filter(status=status)
  195. if not access_log_qs.exists():
  196. return response.json(0)
  197. total = access_log_qs.count()
  198. access_log_qs = access_log_qs.order_by('-time').values(
  199. 'user', 'operation', 'ip', 'status', 'content', 'time')[
  200. (page - 1) * line:page * line]
  201. else:
  202. total = Access_Log.objects.count()
  203. access_log_qs = Access_Log.objects.filter().order_by('-time').values('user',
  204. 'operation', 'ip', 'status', 'content', 'time')[(page - 1) * line:page * line]
  205. access_log_list = CommonService.qs_to_list(access_log_qs)
  206. return response.json(0, {'list': access_log_list, 'total': total})
  207. except Exception as e:
  208. print(e)
  209. return response.json(500, repr(e))
  210. def getDeviceLogList(self, request_dict, response):
  211. uid = request_dict.get('uid', None)
  212. serial_number = request_dict.get('serial_number', None)
  213. pageNo = request_dict.get('pageNo', None)
  214. pageSize = request_dict.get('pageSize', None)
  215. if not all([pageNo, pageSize]):
  216. return response.json(444)
  217. page = int(pageNo)
  218. line = int(pageSize)
  219. try:
  220. if uid or serial_number:
  221. if uid:
  222. device_log_qs = DeviceLogModel.objects.filter(
  223. uid__contains=uid)
  224. if serial_number:
  225. device_log_qs = DeviceLogModel.objects.filter(
  226. serial_number__contains=serial_number)
  227. if not device_log_qs.exists():
  228. return response.json(0)
  229. total = device_log_qs.count()
  230. device_log_qs = device_log_qs.order_by(
  231. '-add_time').values()[(page - 1) * line:page * line]
  232. else:
  233. total = DeviceLogModel.objects.count()
  234. device_log_qs = DeviceLogModel.objects.filter().order_by(
  235. '-add_time').values()[(page - 1) * line:page * line]
  236. device_log_list = CommonService.qs_to_list(device_log_qs)
  237. return response.json(0, {'list': device_log_list, 'total': total})
  238. except Exception as e:
  239. print(e)
  240. return response.json(500, repr(e))