| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104 | #!/usr/bin/env python# -*- coding: utf-8 -*-from django.utils.deprecation import MiddlewareMixinfrom Ansjer import config as api_settingsfrom Ansjer.config import SERVER_TYPEfrom Object.ResponseObject import ResponseObjectfrom Service.MiscellService import MiscellServicefrom Service import OperatingLogsfrom Service import CloudLogsimport django.db# 设置mysql超时class StatisticsUrlMiddleware(MiddlewareMixin):    def _https_statistics_to_reverse(self, request):        '''        :param request:        :return:        '''        # 限制同时下载量        path = request.path        index = path.find('/OTA/downloads')        if index != -1:            addsCount = len(api_settings.ADDR_URL)            if addsCount > 1000:                return -1            else:                adds = request.META.get('REMOTE_ADDR', None)                api_settings.ADDR_URL.append(adds)                # MiscellService.add_ota_download_log(request=request)                return 0    def _https_statistics_to_close(self, request):        '''        :param request:        :return:        '''        addsCount = len(api_settings.ADDR_URL)        if addsCount > 0:            api_settings.ADDR_URL.pop(0)    def process_request(self, request):        '''        :function description            Request预处理函数: process_request(self, request)        :param request:        :return: 应当返回 None 或 HttpResponse 对象             如果返回 None ,Django 将继续处理这个 request,执行后续的中间件,        然后调用相应的 view。             如果返回 HttpResponse 对象,Django 将不再执行任何其它的中间件        (无视其种类)以及相应的view。 Django将立即返回该 HttpResponse。        '''        if request.path != '/favicon.ico':            print('process_request:', request)        result = self._https_statistics_to_reverse(request)        if result == -1:            response = ResponseObject()            return response.json(910)        return None    def process_view(self, request, callback, callback_args, callback_kwargs):        if request.path != '/favicon.ico':            print('process_view:', request)        return None    def process_response(self, request, response):        '''        :function description            Response后处理函数: process_response(self, request, response)            这个方法的调用时机在 Django 执行 view 函数并生成 response 之后。        :param request: request 对象        :param response: 从 view 中返回的 response 对象        :return: 必须返回 HttpResponse 对象. 这个 response 对象可以是传入函数的那一个原始对象(通常已被修改),也可以是全新生成的。            该处理器能修改 response 的内容;一个常见的用途是内容压缩,如 gzip 所请求的 HTML 页面。        '''        self._https_statistics_to_close(request)        ########记录访问日志        # MiscellService.DynamoDB_add_access_log(request=request, status_code=response.status_code)        if request.path !='/favicon.ico':            print('process_response:', request, response)            print('SERVER_TYPE:', SERVER_TYPE)            CloudLogs.batch_add_access_log(request=request, status_code=response.status_code)            try:                pass                # mysql                if SERVER_TYPE!="Ansjer.formal_settings":                    # print('添加日志')                    # CloudLogs.batch_add_access_log(request=request, status_code=response.status_code)                    OperatingLogs.add_access_log(request=request, status_code=response.status_code)                    MiscellService.add_access_log(request=request, status_code=response.status_code)                # else:                #     print('不添加日志')                # mongodb版                # MiscellService.access_log(request=request, response=response, type=0)            except Exception as e:                print(repr(e))            django.db.close_old_connections()        return response
 |