LogManagementController.py 8.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188
  1. #!/usr/bin/env python3
  2. # -*- coding: utf-8 -*-
  3. import json
  4. import time
  5. import urllib
  6. import uuid
  7. import boto3
  8. import threading
  9. import logging
  10. import requests
  11. from boto3.session import Session
  12. from django.http import JsonResponse, HttpResponseRedirect, HttpResponse
  13. from django.views.generic.base import View
  14. from Controller.CheckUserData import date_handler
  15. from Model.models import Device_Info, Role, MenuModel, RequestRecordModel, iotdeviceInfoModel
  16. from Object.ResponseObject import ResponseObject
  17. from Object.TokenObject import TokenObject
  18. from Object.UidTokenObject import UidTokenObject
  19. from Service.CommonService import CommonService
  20. from django.db.models import Q, F
  21. from time import strftime
  22. class LogManagementView(View):
  23. def get(self, request, *args, **kwargs):
  24. request.encoding = 'utf-8'
  25. operation = kwargs.get('operation')
  26. return self.validation(request.GET, request, operation)
  27. def post(self, request, *args, **kwargs):
  28. request.encoding = 'utf-8'
  29. operation = kwargs.get('operation')
  30. return self.validation(request.POST, request, operation)
  31. def validation(self, request_dict, request, operation):
  32. language = request_dict.get('language', 'en')
  33. response = ResponseObject(language, 'pc')
  34. if operation == '??':
  35. return 0
  36. else:
  37. tko = TokenObject(
  38. request.META.get('HTTP_AUTHORIZATION'),
  39. returntpye='pc')
  40. # if tko.code != 0:
  41. # return response.json(tko.code)
  42. response.lang = tko.lang
  43. userID = tko.userID
  44. if operation == 'getRequestList':
  45. return self.getRequestList(request_dict, response)
  46. elif operation == 'getDeviceIotInfoList':
  47. return self.getDeviceIotInfoList(request_dict, response)
  48. elif operation == 'requestPublishMqtt':
  49. return self.requestPublishMqtt(request_dict, response)
  50. else:
  51. return response.json(404)
  52. def getRequestList(self, request_dict, response):
  53. pageNo = request_dict.get('pageNo', None)
  54. pageSize = request_dict.get('pageSize', None)
  55. method = request_dict.get('method', None)
  56. url = request_dict.get('url', None)
  57. parameter = request_dict.get('parameter', None)
  58. status_code = request_dict.get('status_code', None)
  59. reason_phrase = request_dict.get('reason_phrase', None)
  60. if not all([pageNo, pageSize]):
  61. return response.json(444)
  62. page = int(pageNo)
  63. line = int(pageSize)
  64. try:
  65. request_qs = RequestRecordModel.objects.all()
  66. if method:
  67. request_qs = request_qs.filter(method=method)
  68. if url:
  69. request_qs = request_qs.filter(url__contains=url)
  70. if parameter:
  71. request_qs = request_qs.filter(parameter__contains=parameter)
  72. if status_code:
  73. request_qs = request_qs.filter(status_code=status_code)
  74. if reason_phrase:
  75. request_qs = request_qs.filter(reason_phrase=reason_phrase)
  76. count = request_qs.count()
  77. request_qs = request_qs[(page - 1) * line:page * line]
  78. qs_list = []
  79. for requsetobj in request_qs:
  80. qs_list.append({
  81. 'id': requsetobj.id,
  82. 'method': requsetobj.method,
  83. 'url': requsetobj.url,
  84. 'parameter': requsetobj.parameter,
  85. 'execute_time': round(requsetobj.execute_time, 2), # 时间保留小数点后两位
  86. 'status_code': requsetobj.status_code,
  87. 'reason_phrase': requsetobj.reason_phrase,
  88. 'add_time': requsetobj.add_time.strftime("%Y-%m-%d %H:%M:%S"),
  89. })
  90. return response.json(
  91. 0, {'list': qs_list, 'total': count})
  92. except Exception as e:
  93. print(e)
  94. return response.json(500, repr(e))
  95. def getDeviceIotInfoList(self, request_dict, response):
  96. serial_number = request_dict.get('serial_number', None)
  97. uid = request_dict.get('uid', None)
  98. pageNo = request_dict.get('pageNo', None)
  99. pageSize = request_dict.get('pageSize', None)
  100. if not all([pageNo, pageSize]):
  101. return response.json(444)
  102. page = int(pageNo)
  103. line = int(pageSize)
  104. try:
  105. if serial_number or uid:
  106. if serial_number:
  107. iot_device_info_qs = iotdeviceInfoModel.objects.filter(serial_number__contains=serial_number)
  108. if uid:
  109. iot_device_info_qs = iotdeviceInfoModel.objects.filter(uid__contains=uid)
  110. if not iot_device_info_qs.exists():
  111. return response.json(0)
  112. total = len(iot_device_info_qs)
  113. iot_device_info_qs = iot_device_info_qs.values('serial_number', 'uid', 'thing_name', 'thing_groups',
  114. 'add_time', 'update_time')[(page - 1) * line:page * line]
  115. else:
  116. total = iotdeviceInfoModel.objects.filter().count()
  117. iot_device_info_qs = iotdeviceInfoModel.objects.filter().values('serial_number', 'uid', 'thing_name',
  118. 'thing_groups', 'add_time', 'update_time')[(page - 1) * line:page * line]
  119. iot_device_info_list = CommonService.qs_to_list(iot_device_info_qs)
  120. # 获取序列号的uid
  121. for iot_device_info in iot_device_info_list:
  122. if not iot_device_info['uid']:
  123. device_info_qs = Device_Info.objects.filter(serial_number__contains=iot_device_info['serial_number']).values('UID')
  124. if device_info_qs.exists():
  125. iot_device_info['uid'] = device_info_qs[0]['UID']
  126. return response.json(0, {'list': iot_device_info_list, 'total': total})
  127. except Exception as e:
  128. print(e)
  129. return response.json(500, repr(e))
  130. def requestPublishMqtt(self, request_dict, response):
  131. # 通用发布主题通知
  132. uid = request_dict.get('uid', None)
  133. msg = request_dict.get('msg', None)
  134. thing_name = request_dict.get('thing_name', None)
  135. topic_name = request_dict.get('topic_name', None)
  136. if not all([uid, msg, thing_name, topic_name]):
  137. return response.json(444)
  138. try:
  139. # 设备没被添加不发送
  140. device_info_qs = Device_Info.objects.filter(UID=uid).values('UID', 'serial_number')
  141. if not device_info_qs.exists():
  142. return response.json(10043)
  143. # 获取数据组织将要请求的url
  144. iot = iotdeviceInfoModel.objects.filter(thing_name=thing_name).values('endpoint', 'token_iot_number')
  145. if not iot.exists():
  146. return response.json(10043)
  147. endpoint = iot[0]['endpoint']
  148. Token = iot[0]['token_iot_number']
  149. # api doc: https://docs.aws.amazon.com/zh_cn/iot/latest/developerguide/http.html
  150. # url: https://IoT_data_endpoint/topics/url_encoded_topic_name?qos=1
  151. # post请求url发布MQTT消息
  152. url = 'https://{}/topics/{}'.format(endpoint, topic_name)
  153. authorizer_name = 'Ansjer_Iot_Auth'
  154. signature = CommonService.rsa_sign(Token) # Token签名
  155. headers = {'x-amz-customauthorizer-name': authorizer_name, 'Token': Token,
  156. 'x-amz-customauthorizer-signature': signature}
  157. msg = eval(msg)
  158. r = requests.post(url=url, headers=headers, json=msg, timeout=2)
  159. if r.status_code == 200:
  160. res = r.json()
  161. if res['message'] == 'OK':
  162. return response.json(0)
  163. return response.json(10044)
  164. else:
  165. # print('发布失败')
  166. return response.json(10044)
  167. except Exception as e:
  168. # print(e)
  169. return response.json(500, repr(e))