123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201 |
- #!/usr/bin/env python3
- # -*- coding: utf-8 -*-
- import requests
- from django.views.generic.base import View
- from Object.ResponseObject import ResponseObject
- from Object.TokenObject import TokenObject
- from Service.CommonService import CommonService
- from Model.models import Device_Info, RequestRecordModel, iotdeviceInfoModel, Access_Log
- class LogManagementView(View):
- def get(self, request, *args, **kwargs):
- request.encoding = 'utf-8'
- operation = kwargs.get('operation')
- return self.validation(request.GET, request, operation)
- def post(self, request, *args, **kwargs):
- request.encoding = 'utf-8'
- operation = kwargs.get('operation')
- return self.validation(request.POST, request, operation)
- def validation(self, request_dict, request, operation):
- language = request_dict.get('language', 'en')
- response = ResponseObject(language, 'pc')
- if operation == '??':
- return 0
- else:
- tko = TokenObject(
- request.META.get('HTTP_AUTHORIZATION'),
- returntpye='pc')
- # if tko.code != 0:
- # return response.json(tko.code)
- response.lang = tko.lang
- userID = tko.userID
- if operation == 'getRequestList':
- return self.getRequestList(request_dict, response)
- elif operation == 'getDeviceIotInfoList':
- return self.getDeviceIotInfoList(request_dict, response)
- elif operation == 'requestPublishMqtt':
- return self.requestPublishMqtt(request_dict, response)
- elif operation == 'getAccessLogList':
- return self.getAccessLogList(request_dict, response)
- else:
- return response.json(404)
- def getRequestList(self, request_dict, response):
- pageNo = request_dict.get('pageNo', None)
- pageSize = request_dict.get('pageSize', None)
- method = request_dict.get('method', None)
- url = request_dict.get('url', None)
- parameter = request_dict.get('parameter', None)
- status_code = request_dict.get('status_code', None)
- reason_phrase = request_dict.get('reason_phrase', None)
- if not all([pageNo, pageSize]):
- return response.json(444)
- page = int(pageNo)
- line = int(pageSize)
- try:
- request_qs = RequestRecordModel.objects.all()
- if method:
- request_qs = request_qs.filter(method=method)
- if url:
- request_qs = request_qs.filter(url__contains=url)
- if parameter:
- request_qs = request_qs.filter(parameter__contains=parameter)
- if status_code:
- request_qs = request_qs.filter(status_code=status_code)
- if reason_phrase:
- request_qs = request_qs.filter(reason_phrase=reason_phrase)
- count = request_qs.count()
- request_qs = request_qs[(page - 1) * line:page * line]
- qs_list = []
- for requsetobj in request_qs:
- qs_list.append({
- 'id': requsetobj.id,
- 'method': requsetobj.method,
- 'url': requsetobj.url,
- 'parameter': requsetobj.parameter,
- 'execute_time': round(requsetobj.execute_time, 2), # 时间保留小数点后两位
- 'status_code': requsetobj.status_code,
- 'reason_phrase': requsetobj.reason_phrase,
- 'add_time': requsetobj.add_time.strftime("%Y-%m-%d %H:%M:%S"),
- })
- return response.json(
- 0, {'list': qs_list, 'total': count})
- except Exception as e:
- print(e)
- return response.json(500, repr(e))
- def getDeviceIotInfoList(self, request_dict, response):
- serial_number = request_dict.get('serial_number', None)
- uid = request_dict.get('uid', None)
- pageNo = request_dict.get('pageNo', None)
- pageSize = request_dict.get('pageSize', None)
- if not all([pageNo, pageSize]):
- return response.json(444)
- page = int(pageNo)
- line = int(pageSize)
- try:
- if serial_number or uid:
- if serial_number:
- iot_device_info_qs = iotdeviceInfoModel.objects.filter(serial_number__contains=serial_number)
- if uid:
- iot_device_info_qs = iotdeviceInfoModel.objects.filter(uid__contains=uid)
- if not iot_device_info_qs.exists():
- return response.json(0)
- total = len(iot_device_info_qs)
- iot_device_info_qs = iot_device_info_qs.values('serial_number', 'uid', 'thing_name', 'thing_groups',
- 'add_time', 'update_time')[(page - 1) * line:page * line]
- else:
- total = iotdeviceInfoModel.objects.filter().count()
- iot_device_info_qs = iotdeviceInfoModel.objects.filter().values('serial_number', 'uid', 'thing_name',
- 'thing_groups', 'add_time', 'update_time')[(page - 1) * line:page * line]
- iot_device_info_list = CommonService.qs_to_list(iot_device_info_qs)
- # 获取序列号的uid
- for iot_device_info in iot_device_info_list:
- if not iot_device_info['uid']:
- device_info_qs = Device_Info.objects.filter(serial_number__contains=iot_device_info['serial_number']).values('UID')
- if device_info_qs.exists():
- iot_device_info['uid'] = device_info_qs[0]['UID']
- return response.json(0, {'list': iot_device_info_list, 'total': total})
- except Exception as e:
- print(e)
- return response.json(500, repr(e))
- def requestPublishMqtt(self, request_dict, response):
- # 通用发布MQTT主题通知
- msg = request_dict.get('msg', None)
- thing_name = request_dict.get('thing_name', None)
- topic_name = request_dict.get('topic_name', None)
- if not all([msg, thing_name, topic_name]):
- return response.json(444)
- try:
- # 获取数据组织将要请求的url
- iot = iotdeviceInfoModel.objects.filter(thing_name=thing_name).values('endpoint', 'token_iot_number')
- if not iot.exists():
- return response.json(10043)
- endpoint = iot[0]['endpoint']
- Token = iot[0]['token_iot_number']
- # api doc: https://docs.aws.amazon.com/zh_cn/iot/latest/developerguide/http.html
- # url: https://IoT_data_endpoint/topics/url_encoded_topic_name?qos=1
- # post请求url发布MQTT消息
- url = 'https://{}/topics/{}'.format(endpoint, topic_name)
- authorizer_name = 'Ansjer_Iot_Auth'
- signature = CommonService.rsa_sign(Token) # Token签名
- headers = {'x-amz-customauthorizer-name': authorizer_name, 'Token': Token,
- 'x-amz-customauthorizer-signature': signature}
- msg = eval(msg)
- r = requests.post(url=url, headers=headers, json=msg, timeout=2)
- if r.status_code == 200:
- res = r.json()
- if res['message'] == 'OK':
- return response.json(0)
- return response.json(10044)
- else:
- return response.json(10044)
- except Exception as e:
- return response.json(500, repr(e))
- def getAccessLogList(self, request_dict, response):
- user = request_dict.get('user', None)
- operation = request_dict.get('operation', None)
- status = request_dict.get('status', None)
- pageNo = request_dict.get('pageNo', None)
- pageSize = request_dict.get('pageSize', None)
- if not all([pageNo, pageSize]):
- return response.json(444)
- page = int(pageNo)
- line = int(pageSize)
- try:
- if user or operation or status:
- if user:
- access_log_qs = Access_Log.objects.filter(user__contains=user)
- if operation:
- access_log_qs = Access_Log.objects.filter(operation__contains=operation)
- if status:
- access_log_qs = Access_Log.objects.filter(status=status)
- if not access_log_qs.exists():
- return response.json(0)
- total = access_log_qs.count()
- access_log_qs = access_log_qs.values('user', 'operation', 'ip', 'status', 'content', 'time')[(page - 1) * line:page * line]
- else:
- total = Access_Log.objects.count()
- access_log_qs = Access_Log.objects.filter().values('user', 'operation', 'ip', 'status', 'content', 'time')[(page - 1) * line:page * line]
- access_log_list = CommonService.qs_to_list(access_log_qs)
- return response.json(0, {'list': access_log_list, 'total': total})
- except Exception as e:
- print(e)
- return response.json(500, repr(e))
|