| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188 | #!/usr/bin/env python3# -*- coding: utf-8 -*-import jsonimport timeimport urllibimport uuidimport boto3import threadingimport loggingimport requestsfrom boto3.session import Sessionfrom django.http import JsonResponse, HttpResponseRedirect, HttpResponsefrom django.views.generic.base import Viewfrom Controller.CheckUserData import date_handlerfrom Model.models import Device_Info, Role, MenuModel, RequestRecordModel, iotdeviceInfoModelfrom Object.ResponseObject import ResponseObjectfrom Object.TokenObject import TokenObjectfrom Object.UidTokenObject import UidTokenObjectfrom Service.CommonService import CommonServicefrom django.db.models import Q, Ffrom time import strftimeclass 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)            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):        # 通用发布主题通知        uid = request_dict.get('uid', None)        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([uid, msg, thing_name, topic_name]):            return response.json(444)        try:            # 设备没被添加不发送            device_info_qs = Device_Info.objects.filter(UID=uid).values('UID', 'serial_number')            if not device_info_qs.exists():                return response.json(10043)            # 获取数据组织将要请求的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:                # print('发布失败')                return response.json(10044)        except Exception as e:            # print(e)            return response.json(500, repr(e))
 |