浏览代码

优化中间件保存访问接口数据

locky 2 年之前
父节点
当前提交
36bf65e7f8
共有 8 个文件被更改,包括 35 次插入1015 次删除
  1. 1 7
      Ansjer/urls.py
  2. 0 217
      Controller/AccessLog.py
  3. 0 142
      Controller/DynamoDBLog.py
  4. 4 12
      Service/CloudLogs.py
  5. 23 488
      Service/MiscellService.py
  6. 0 10
      Service/ModelService.py
  7. 2 85
      Service/TemplateService.py
  8. 5 54
      Service/middleware.py

+ 1 - 7
Ansjer/urls.py

@@ -6,7 +6,7 @@ from AdminController import UserManageController, RoleController, MenuController
     ServeManagementController, LogManagementController, DeviceManagementController, VersionManagementController, \
     AiServeController, SurveysManageController, SerialManageController
 from Controller import FeedBack, EquipmentOTA, EquipmentInfo, AdminManage, AppInfo, \
-    AccessLog, DynamoDBLog, Test, MealManage, DeviceManage, EquipmentStatus, SysManage, DeviceLog, LogAccess, \
+    Test, MealManage, DeviceManage, EquipmentStatus, SysManage, DeviceLog, LogAccess, \
     AppColophon, DateController, \
     EquipmentManager, LogManager, PermissionManager, OTAEquipment, shareUserPermission, UidSetController, \
     UserManger, CheckUserData, \
@@ -101,8 +101,6 @@ urlpatterns = [
 
     url(r'^uidset/(?P<operation>.*)$', UidSetController.UidSetView.as_view()),
     url(r'^appInfo', AppInfo.AppInfo.as_view()),  # app版本信息
-    url(r'^accesslog', AccessLog.AccessLog.as_view()),
-    url(r'^dynamoDBLog/(?P<operation>.*)$', DynamoDBLog.DynamoDBLog.as_view()),
 
     url(r'^meal/manage', MealManage.MealManage.as_view()),
     url(r'^device/manage$', DeviceManage.DeviceManage.as_view()),
@@ -121,9 +119,6 @@ urlpatterns = [
     # 上传操作文档
     url(r'^HelpCHM/upload$', LogManager.upload_help_chm),
     url(r'^admin/userIDs$', AdminManage.getUserIds),
-    # 统计访问日志路径
-    path('access/staticPath/', AccessLog.statisticsPath),
-    path('access/deleteSn/', AccessLog.deleteSn),
     path('eq/delById', EquipmentInfo.deleteExpireEquipmentInfoById),
     # 新需求ota接口
     url(r'^OTA/getNewVer', OTAEquipment.getNewVerInterface),
@@ -343,7 +338,6 @@ urlpatterns = [
     url(r'^pcTest/(?P<operation>.*)$', PctestController.PcTest.as_view()),
 
     # 设备debug
-    # url(r'^deviceDebug/(?P<operation>.*)$', DeviceDebug.DeviceDebug.as_view()),
     re_path('deviceDebug/(?P<operation>.*)', DeviceDebug.DeviceDebug.as_view()),
 
     # 问卷调查

+ 0 - 217
Controller/AccessLog.py

@@ -1,217 +0,0 @@
-import datetime
-import simplejson as json
-
-from django.utils.decorators import method_decorator
-from django.views.decorators.csrf import csrf_exempt
-from django.views.generic.base import View
-from ratelimit.decorators import ratelimit
-
-from Model.models import Access_Log
-from Object.ResponseObject import ResponseObject
-from Object.TokenObject import TokenObject
-from Service.CommonService import CommonService
-from Service.ModelService import ModelService
-from Service.TemplateService import TemplateService
-from Ansjer.config import SERVER_TYPE
-from Object.RedisObject import RedisObject
-'''
-http://192.168.136.40:8077/accesslog?operation=queryByAdmin&token=test&page=1&line=5&order=-id
-http://192.168.136.40:8077/accesslog?operation=truncateByAdmin&token=test
-http://192.168.136.40:8077/accesslog?operation=searchByAdmin&token=test&page=1&line=10&content={"status":20}&order=-id
-
-
-
-http://192.168.136.40:8077/accesslog/staticPath/?token=stest
-'''
-
-
-
-class AccessLog(View):
-    @method_decorator(csrf_exempt)
-    def dispatch(self, *args, **kwargs):
-        return super(AccessLog, self).dispatch(*args, **kwargs)
-
-    def get(self, request):
-        response = ResponseObject()
-        request.encoding = 'utf-8'
-        return self.validation(request.GET, response)
-
-    def post(self, request):
-        response = ResponseObject()
-        request.encoding = 'utf-8'
-        return self.validation(request.POST, response)
-
-    def validation(self, request_dict, response):
-        token = request_dict.get('token', None)
-        tko = TokenObject(token)
-        response.lang = tko.lang
-        if tko.code != 0:
-            return response.json(tko.code)
-        userID = tko.userID
-        operation = request_dict.get('operation', None)
-        if not userID:
-            return response.json(104)
-        if not operation:
-            return response.json(444, 'operation')
-        if operation == 'queryByAdmin':
-            return self.query_by_admin(request_dict, userID, response)
-        elif operation == 'searchByAdmin':
-            return self.search_by_admin(request_dict, userID, response)
-        elif operation == 'truncateByAdmin':
-            return self.truncate_by_admin(userID, response)
-
-    def query_by_admin(self, request_dict, userID, response):
-        page = int(request_dict.get('page', None))
-        line = int(request_dict.get('line', None))
-        order = request_dict.get('order', '-id')
-        if order == '':
-            order = '-id'
-        if not page or not line:
-            return response.json(444, 'page,line')
-        own_perm = ModelService.check_perm(userID=userID, permID=30)
-        if own_perm is not True:
-            return response.json(404)
-        if SERVER_TYPE == 'Ansjer.formal_settings':
-            logKey = 'logger'
-        else:
-            logKey = 'test_logger'
-        # 判断redis列表长度
-        redisObj = RedisObject()
-        data_list = redisObj.lrange(logKey, 0, -1)
-        redisObj.del_data(key=logKey)
-        ModelService.add_batch_log(data_list)
-        qs = Access_Log.objects.all().order_by(order)
-        if qs.exists():
-            count = qs.count()
-            res = qs[(page - 1) * line:page * line]
-            send_json = CommonService.qs_to_dict(res)
-            send_json['count'] = count
-            return response.json(0, send_json)
-        return response.json(0, {'datas': [], 'count': 0})
-
-    # 清空日志表
-    def truncate_by_admin(self, userID, response, ):
-        check_perm = ModelService.check_perm(userID=userID, permID=10)
-        if check_perm is True:
-            from django.db import connection
-            cursor = connection.cursor()
-            sql = "TRUNCATE TABLE `access_log`"
-            cursor.execute(sql)
-            return response.json(0)
-        else:
-            return response.json(404)
-
-    # 搜索日志(多条件)
-    def search_by_admin(self, request_dict, userID, response):
-        page = int(request_dict.get('page', None))
-        line = int(request_dict.get('line', None))
-        order = request_dict.get('order', '-id')
-        content = request_dict.get('content', None)
-        starttime = request_dict.get('starttime', None)
-        endtime = request_dict.get('endtime', None)
-        if SERVER_TYPE == 'Ansjer.formal_settings':
-            logKey = 'logger'
-        else:
-            logKey = 'test_logger'
-            # 判断redis列表长度
-        redisObj = RedisObject()
-        data_list = redisObj.lrange(logKey, 0, -1)
-        redisObj.del_data(key=logKey)
-        ModelService.add_batch_log(data_list)
-        # qs = Access_Log.objects.all().order_by(order)
-        if not page or not line:
-            return response.json(444, 'page,line')
-        check_perm = ModelService.check_perm(userID=userID, permID=20)
-        if check_perm is not True:
-            return response.json(404)
-        try:
-            content = json.loads(content)
-            kwargs = {}
-            for (k, v) in content.items():
-                if v is not None and v != '':
-                    if k == 'content':
-                        kwargs[k + '__icontains'] = v
-                    else:
-                        kwargs[k] = v
-            queryset = Access_Log.objects.filter(**kwargs).order_by(order)
-        except Exception as e:
-            return response.json(444)
-        if starttime is not None and starttime != '' and endtime is not None and endtime != '':
-            startt = datetime.datetime.fromtimestamp(int(starttime))
-            starttime = startt.strftime("%Y-%m-%d %H:%M:%S.%f")
-            endt = datetime.datetime.fromtimestamp(int(endtime))
-            endtime = endt.strftime("%Y-%m-%d %H:%M:%S.%f")
-            queryset = queryset.filter(time__range=(starttime, endtime))
-        elif starttime is not None and starttime != '':
-            startt = datetime.datetime.fromtimestamp(int(starttime))
-            starttime = startt.strftime("%Y-%m-%d %H:%M:%S.%f")
-            queryset = queryset.filter(time__gte=starttime)
-        elif endtime is not None and endtime != '':
-            endt = datetime.datetime.fromtimestamp(int(endtime))
-            endtime = endt.strftime("%Y-%m-%d %H:%M:%S.%f")
-            queryset = queryset.filter(time__lte=endtime)
-        if queryset.exists():
-            count = queryset.count()
-            res = queryset[(page - 1) * line:page * line]
-            send_json = CommonService.qs_to_dict(res)
-            send_json['count'] = count
-            return response.json(0, send_json)
-        return response.json(0, {'datas': [], 'count': 0})
-
-
-@ratelimit(key='ip', rate='3/m')
-def statisticsPath(request):
-    request.encoding = 'utf-8'
-    if request.method == 'GET':
-        token = request.GET.get('token', None)
-    if request.method == 'POST':
-        token = request.POST.get('token', None)
-    response = ResponseObject()
-    was_limited = getattr(request, 'limited', False)
-    # 限制同一个ip该接口一分钟不能访问超过两次
-    if was_limited is True:
-        return response.json(5)
-    tko = TokenObject(token)
-    response.lang = tko.lang
-    if tko.code != 0:
-        return response.json(tko.code)
-    userID = tko.userID
-    own_perm = ModelService.check_perm(userID, 30)
-    if own_perm is not True:
-        return response.json(404)
-    paths = TemplateService.log_api()
-    datas = {}
-    for path in paths:
-        count = Access_Log.objects.filter(operation=path).count()
-        datas[path] = count
-    return response.json(0, {'datas': datas})
-
-
-# 按季度删除访问日志
-def deleteSn(request):
-    response = ResponseObject()
-    request.encoding = 'utf-8'
-    if request.method == 'GET':
-        request_dict = request.GET
-    elif request.method == 'POST':
-        request_dict = request.POST
-    else:
-        return response.json(104)
-    token = request_dict.get('token', None)
-    days = request_dict.get('days', None)
-    if not days:
-        return response.json(444, 'days')
-    tko = TokenObject(token)
-    response.lang = tko.lang
-    if tko.code != 0:
-        return response.json(tko.code)
-    userID = tko.userID
-    own_perm = ModelService.check_perm(userID, 10)
-    if own_perm is not True:
-        return response.json(404)
-    for i in range(5):
-        dltime = datetime.datetime.now() - datetime.timedelta(days=int(days))
-        al_qs = Access_Log.objects.filter(time__gte=dltime)[0:10000]
-        id_list = al_qs.values_list("id", flat=True)
-        Access_Log.objects.filter(id__in=list(id_list)).delete()
-    return response.json(0)

+ 0 - 142
Controller/DynamoDBLog.py

@@ -1,142 +0,0 @@
-#!/usr/bin/env python3
-# -*- coding: utf-8 -*-
-"""
-@Copyright (C) ansjer cop Video Technology Co.,Ltd.All rights reserved.
-@AUTHOR: ASJRD019
-@NAME: AnsjerFormal
-@software: PyCharm
-@DATE: 2019/10/9 11:50
-@Version: python3.6
-@MODIFY DECORD:ansjer dev
-@file: AliPayObject.py
-@Contact: pzb3076@163.com
-"""
-
-from django.views.generic.base import View
-from django.utils.decorators import method_decorator
-from django.views.decorators.csrf import csrf_exempt
-from Service.ModelService import ModelService
-from Model.models import User_Brand,Device_User
-from django.utils import timezone
-import traceback,time,json,urllib.request
-from Object.ResponseObject import ResponseObject
-from Object.TokenObject import TokenObject
-from Service.CommonService import CommonService
-from collections import Counter
-from Ansjer.config import DOMAIN_HOST,AWS_DynamoDB_REGION,AWS_DynamoDB_ACCESS_KEY,AWS_DynamoDB_SECRET_KEY
-from Object.RedisObject import RedisObject
-from Service.MiscellService import MiscellService
-import datetime, simplejson as json
-import time
-
-
-class DynamoDBLog(View):
-    @method_decorator(csrf_exempt)
-    def dispatch(self, *args, **kwargs):
-        return super(DynamoDBLog, self).dispatch(*args, **kwargs)
-
-    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):
-        self.clientIP = CommonService.get_ip_address(request)
-        response = ResponseObject()
-        token = request_dict.get('token', None)
-        tko = TokenObject(token)
-        response.lang = tko.lang
-        if tko.code == 0:
-            userID = tko.userID
-            if operation == 'searchByAdmin':
-                return self.search_info(request_dict, userID, response)
-            elif operation == 'connector':
-                return self.connector_info(request_dict, userID, response)
-            elif operation == 'daySearch':
-                return self.get_day_search(request_dict, userID, response)
-            else:
-                return response.json(444)
-        else:
-            return response.json(tko.code)
-
-    # 查询搜索表(可以通过用户名,和接口名称,ip地址搜索等)
-    def search_info(self, request_dict, userID,response):
-        search_value = request_dict.get('search_value',None)
-        check_perm = ModelService.check_perm(userID=userID,permID=30)
-        if check_perm is True:
-            if search_value is None or search_value is '':
-                return response.json(0, {'datas': {}, 'count': 0})
-            else:
-                if DOMAIN_HOST == 'www.zositechc.cn':
-                    user_brand = 'access_log'
-                else:
-                    user_brand = 'test_access_log'
-                # 查询
-                user_ID = Device_User.objects.filter(username=search_value).values('userID', 'NickName')
-                try:
-                    search_value = user_ID[0]['userID']
-                except Exception:
-                    search_value = search_value
-                items = MiscellService.get_item_log( user_brand ,search_value)
-                for k, v in enumerate(items):
-                    user_ID = Device_User.objects.filter(userID=items[k]['userID']).values('username')
-                    try:
-                        items[k]['userID'] = user_ID[0]['username']
-                    except Exception:
-                        items[k]['userID'] = ''
-                return response.json(0, {'datas': items, 'count': len(items)})
-        else:
-            return response.json(404)
-
-    # 查询接口的访问量的对应数量
-    def connector_info(self, request_dict, userID,response):
-        check_perm = ModelService.check_perm(userID=userID,permID=30)
-        if check_perm is True:
-            if DOMAIN_HOST == 'www.zositechc.cn':
-                user_brand = 'access_log'
-            else:
-                user_brand = 'test_access_log'
-            table_value = MiscellService.item_get_brand(user_brand)
-            send_jsons = []
-            counts = 0
-            for i in table_value:
-                send_jsons.append(table_value[counts]['operation'])
-                counts = counts + 1
-            send_jsons = Counter(send_jsons)
-            return response.json(0, {'datas': send_jsons,'counts':counts})
-        else:
-            return response.json(404)
-
-    # 通过传过来日期天来搜索,访问量,并返回对应小时的访问数量
-    def get_day_search(self, request_dict,userID, response):
-        check_perm = ModelService.check_perm(userID=userID, permID=30)
-        if DOMAIN_HOST == 'www.zositechc.cn':
-            user_brand = 'access_log'
-        else:
-            user_brand = 'test_access_log'
-        time_stamp = int(request_dict.get('timestamp', None))
-        if check_perm is True:
-            # 分割小时再去搜索
-            times = datetime.datetime.fromtimestamp(time_stamp)
-            time_dict = CommonService.getTimeDict(times)
-            res = {}
-            for k, v in time_dict.items():
-                start_date = time_dict[k]
-                end_date = time_dict[k] + datetime.timedelta(hours=1)
-                start_date = int(start_date.timestamp())
-                end_date = int(end_date.timestamp())
-                count = MiscellService.get_item_time(user_brand,start_date, end_date)
-                if count:
-                    res[k] = count
-                else:
-                    res[k] = 0
-
-            # res = MiscellService.get_item_date(user_brand,time_stamp)
-            return response.json(0, {'count': res})
-        else:
-            return response.json(404)

+ 4 - 12
Service/CloudLogs.py

@@ -1,18 +1,16 @@
 import json
 import threading
-import datetime
 import time
 
-from bson import utc
 import jwt
 
-from Object.RedisObject import RedisObject
-from Service.CommonService import CommonService
-from Service.MiscellService import MiscellService
-from Service.TemplateService import TemplateService
 from Ansjer.config import SERVER_TYPE, OAUTH_ACCESS_TOKEN_SECRET
 from Model.models import CloudLogModel
+from Object.RedisObject import RedisObject
 from Object.UidTokenObject import UidTokenObject
+from Service.CommonService import CommonService
+from Service.MiscellService import MiscellService
+
 
 def batch_add_access_log(request, status_code):
     asy = threading.Thread(target=batch_add_log_ctr, args=(request, status_code))
@@ -38,10 +36,6 @@ def batch_add_log_ctr(request, status_code):
             if len(uid) > 50:
                 uid = jwt.decode(uid, OAUTH_ACCESS_TOKEN_SECRET, algorithms='HS256').get('uid', '')
         clientIP = CommonService.get_ip_address(request)
-        # now_time = datetime.datetime.utcnow().replace(tzinfo=utc).astimezone(utc)
-        # beijing = datetime.timezone(datetime.timedelta(hours=8))
-        # utc = datetime.timezone.utc  # 获取 UTC 的时区对象
-        # beijing_time = datetime.datetime.utcnow().replace(tzinfo=utc).astimezone(beijing)
         now_time = time.time()
         password = request_dict.get('userPwd', None)
         if password is not None:
@@ -60,7 +54,6 @@ def batch_add_log_ctr(request, status_code):
         print('add_data', add_data)
         redisObj = RedisObject()
         loggerData = json.dumps(add_data)
-        # print(loggerData)
         if SERVER_TYPE == 'Ansjer.formal_settings':
             logKey = 'logger'
         else:
@@ -91,7 +84,6 @@ def add_batch_log(data_list):
         else:
             return
     except Exception as e:
-        print('error:')
         print(repr(e))
         return False
     else:

+ 23 - 488
Service/MiscellService.py

@@ -1,351 +1,24 @@
 import datetime
+import json
 import threading
-import time
 
-import requests
-import simplejson as json
 from django.utils.timezone import utc
-from Ansjer import config as api_settings
 
+from Model.models import Access_Log
 from Object.TokenObject import TokenObject
-from Object.mongodb import mongodb
 from Service.CommonService import CommonService
-from Service.ModelService import ModelService
 from Service.TemplateService import TemplateService
-from Object.RedisObject import RedisObject
-from Ansjer.config import SERVER_TYPE
-from Model.models import Device_User, Device_Info
-# coding:utf-8
-from boto3 import Session
-from botocore.exceptions import ClientError
-from boto3.dynamodb.conditions import Key, Attr
-import logging
-import json
-from Ansjer.config import DOMAIN_HOST,AWS_DynamoDB_REGION,AWS_DynamoDB_ACCESS_KEY,AWS_DynamoDB_SECRET_KEY
-logger = logging.getLogger(__name__)
-
-class MyserviceDynamodb():
-    def __init__(self, **kwargs):
-        self.region = AWS_DynamoDB_REGION
-        self.access_key = AWS_DynamoDB_ACCESS_KEY
-        self.secret_key = AWS_DynamoDB_SECRET_KEY
-        self.session = self.__session()
-
-    def __session(self):
-        try:
-            session = Session(aws_access_key_id=self.access_key, aws_secret_access_key=self.secret_key,region_name=self.region)
-            return session
-        except:
-            print("Failed to connect session in region{0}".format(self.region))
-
-    # 添加access_log表数据
-    def access_log_item_put(self,table_name,data_list):
-        dynamodb = self.session.resource('dynamodb')
-        table = dynamodb.Table(table_name)
-        with table.batch_writer() as batch:
-            for i in data_list:
-                data = json.loads(i.decode('utf-8'))
-                if data['userID'] == '' :
-                    try:
-                        user_id = Device_User.objects.filter(username= data['userName']).values('userID')
-                        data['userID'] = user_id[0]['userID']
-                    except Exception:
-                        data['userID'] =''
-                batch.put_item(
-                    Item={
-                        'userID':data['userID'],
-                        'addTime':data['addTime'],
-                        'ip':data['ip'],
-                        'status':data['status'],
-                        'operation':data['operation'],
-                        'content':data['content'],
-                        'Expiration_time':data['Expiration_time'],
-                    }
-                )
-        print ('添加access_log表数据成功!')
-
-# 搜索该数据库表的方法
-    def get_item(self, table_name, values):
-        dynamodb = self.session.resource('dynamodb')
-        if not dynamodb:
-            raise DynamodbConnectionError("Failed to get resource for dynamodb!")
-        try:
-            table = dynamodb.Table(table_name)
-            response = table.scan(
-                FilterExpression = Attr('userID').eq(values)
-                                 | Key('ip').eq(values)
-                                 | Key('status').eq(values)
-                                 | Key('content').eq(values)
-                                 | Key('operation').eq(values)
-            )
-            items = response['Items']
-            return items
-        except Exception as e:
-            logger.error("Failed to get table {0}, error".format(table_name, e))
-            return []
-
-    # 时间段搜索
-    def get_item_time(self, table_name, start_date, end_date):
-        dynamodb = self.session.resource('dynamodb')
-        if not dynamodb:
-            raise DynamodbConnectionError("Failed to get resource for dynamodb!")
-        try:
-            table = dynamodb.Table(table_name)
-            response = table.scan(
-                Select='COUNT',
-                FilterExpression=(Attr('addTime').gt(start_date)
-                                 & Key('addTime').lt(end_date)) | Key('addTime').eq(start_date)
-            )
-            items = response['Count']
-            return items
-        except Exception as e:
-            logger.error("Failed to get table {0}, error".format(table_name, e))
-            return 0
-
-    # 时间段搜索
-    def get_item_date(self, table_name, date):
-        dynamodb = self.session.resource('dynamodb')
-        if not dynamodb:
-            raise DynamodbConnectionError("Failed to get resource for dynamodb!")
-        res = {}
-        try:
-            table = dynamodb.Table(table_name)
-            times = datetime.datetime.fromtimestamp(date)
-            time_dict = CommonService.getTimeDict(times)
-            for k, v in time_dict.items():
-                start_date = time_dict[k]
-                end_date = time_dict[k] + datetime.timedelta(hours=1)
-                start_date = int(start_date.timestamp())
-                end_date = int(end_date.timestamp())
-                response = table.scan(
-                    Select = 'COUNT',
-                    FilterExpression=(Attr('addTime').gt(start_date)
-                                      & Key('addTime').lt(end_date)) | Key('addTime').eq(start_date)
-                )
-                print (response['Count'])
-                count = response['Count']
-                if count:
-                    res[k] = count
-                else:
-                    res[k] = 0
-        except Exception as e:
-            logger.error("Failed to get table {0}, error".format(table_name, e))
-        return res
-
-    def item_get_brand(self, table_name):
-        dynamodb = self.session.resource('dynamodb')
-        table = dynamodb.Table(table_name)
-        try:
-            response = table.scan()
-            response = response['Items']
-            return response
-        except Exception:
-            logger.error("Failed to put item in to {0}:error{1}".format(table))
-
-
-
-# 查询aws数据库里面有什么表
-    def tables_list(self, table_name):
-        client = self.session.client('dynamodb')
-        response = client.list_tables()
-        return response['TableNames']
-
-    # 创建access_log表
-    def access_log_table_create(self, table_name):
-        dynamodb = self.session.resource('dynamodb')
-        inventory = my.tables_list(table_name)
-        if table_name in inventory:
-            print ('access_log表包含')
-        else:
-            try:
-                table = dynamodb.create_table(
-                    TableName=table_name,
-                    KeySchema=[
-                        {
-                            'AttributeName': 'userID',
-                            'KeyType': 'HASH'
-                        },
-                        {
-                            'AttributeName': 'addTime',
-                            'KeyType': 'RANGE'
-                        }
-                    ],
-                    AttributeDefinitions=[
-                        {
-                            'AttributeName': 'userID',
-                            'AttributeType': 'S'
-                        },
-                        {
-                            'AttributeName': 'addTime',
-                            'AttributeType': 'N'
-                        },
-
-                    ],
-                    ProvisionedThroughput={
-                        'ReadCapacityUnits': 5,
-                        'WriteCapacityUnits': 5,
-                    }
-                )
-                print ('创建表成功')
-            except Exception:
-                logger.error (table_name + '表已经存在')
-
-    # 删除表
-    def table_delete(self, table_name):
-        dynamodb = self.session.resource('dynamodb')
-        table = dynamodb.Table(table_name)
-        table.delete()
-        print ('删除表成功')
-
-my = MyserviceDynamodb()
-
-# print(my.table_delete('user_brand_all'))
-if DOMAIN_HOST == 'www.zositechc.cn':
-    user_brand = 'access_log'
-else:
-    user_brand = 'test_access_log'
 
-# my.table_delete(user_brand)
-# my.access_log_table_create(user_brand)
 
-
-
-# 杂项类,共用行不高,但有些地方需求
-
-class MiscellService():
-    # 获取访问用户名称
-    @staticmethod
-    def get_access_name(request_dict):
-        userName = request_dict.get('userName', None)
-        if userName:
-            return userName
-        email = request_dict.get('email', None)
-        if email:
-            return email
-        phone = request_dict.get('phone', None)
-        if phone:
-            return phone
-        token = request_dict.get('token', None)
-        user = ''
-        if token is not None:
-            tko = TokenObject(token)
-            if tko.code == 0:
-                user = tko.user
-                # user = ModelService.get_user_name(tko.userID)
-        return user
+class MiscellService:
 
     @staticmethod
     def add_access_log(request, status_code):
-        # 增加多进程 异步
-        asy = threading.Thread(target=addLog, args=(request, status_code))
-        asy.start()
-
-    @staticmethod
-    def access_log(request, response, type):
-        if request.method == 'GET':
-            request_dict = request.GET
-        elif request.method == 'POST':
-            # request.encoding = 'utf-8'
-            request_dict = request.POST
-        else:
-            return
-        api_list = TemplateService.log_api()
-        request_path = request.path.strip().strip('/')
-        if request_path in api_list:
-            clientIP = CommonService.get_ip_address(request)
-            now_time = time.time()
-            password = request_dict.get('userPwd', None)
-            if password is not None:
-                request_dict = dict(request_dict)
-                request_dict.pop('userPwd')
-            content = json.dumps(request_dict)
-            area = CommonService.getAddr(ip=clientIP)
-            if type == 1:
-                status_code = 200
-            else:
-                status_code = response.status_code
-            add_data = {
-                'user': MiscellService.get_access_name(request=request),
-                'ip': clientIP,
-                'status': status_code,
-                'path': request_path,
-                'method': request.method,
-                'time': int(now_time),
-                'area': area,
-                'content': content,
-                'et': datetime.datetime.utcnow()
-            }
-
-            mdb = mongodb()
-            col = "log_access"
-            mdb.insert_one(col=col, data=add_data)
-
-    # 获取所有设备ip地址的指向的国家
-    @staticmethod
-    def getArea(ip):
-        data = {'ip': ip}
-        country = ''
-        URL = 'http://ip.taobao.com/service/getIpInfo.php'
-        try:
-            r = requests.get(URL, params=data, timeout=3)
-        except requests.RequestException as e:
-            print(e)
-        else:
-            json_data = r.json()
-            if json_data['code'] == 0:
-                if json_data['data']['country'] != 'XX':
-                    country = json_data['data']['country']
-        return country
-
-    @staticmethod
-    def get_item_log(table_name, values):
-        item_log = my.get_item(table_name, values)
-        return item_log
-
-    @staticmethod
-    def item_get_brand(table_name):
-        item_log = my.item_get_brand(table_name)
-        return item_log
-
-    @staticmethod
-    def get_item_time(table_name,start_date, end_date):
-        item_log = my.get_item_time(table_name,start_date, end_date)
-        return item_log
-
-    @staticmethod
-    def get_item_date(table_name,date):
-        item_log = my.get_item_date(table_name,date)
-        return item_log
-
-    # 下载接口添加访问日志
-    @staticmethod
-    def add_ota_download_log(request):
-        clientIP = CommonService.get_ip_address(request)
-        request_path = request.path.strip().strip('/')
-        now_time = datetime.datetime.utcnow().replace(tzinfo=utc).astimezone(utc)
-        add_data = {
-            'user': 'None',
-            'ip': clientIP,
-            'status': 200,
-            'url': request.META['SERVER_PROTOCOL'] + '-' + request.method + '-' + request.path,
-            'operation': request_path,
-            'time': now_time,
-            'content': ''
-        }
-        ModelService.addAccessLog(data=add_data)
-
-    @staticmethod
-    def batch_add_access_log(request, status_code):
-        asy = threading.Thread(target=batch_add_log_ctr, args=(request, status_code))
-        asy.start()
-
-    @staticmethod
-    def DynamoDB_add_access_log(request, status_code):
-        asy = threading.Thread(target=dynamo_db_add_log_ctr, args=(request, status_code))
+        asy = threading.Thread(target=add_log_thread, args=(request, status_code))
         asy.start()
 
 
-def addLog(request, status_code):
+def add_log_thread(request, status_code):
     try:
         request.encoding = 'utf-8'
         if request.method == 'GET':
@@ -357,8 +30,8 @@ def addLog(request, status_code):
         api_list = TemplateService.log_api()
         request_path = request.path.strip().strip('/')
         if request_path in api_list:
-            user = MiscellService.get_access_name(request_dict=request_dict)
-            clientIP = CommonService.get_ip_address(request)
+            user = get_access_name(request_dict=request_dict)
+            ip = CommonService.get_ip_address(request)
             now_time = datetime.datetime.utcnow().replace(tzinfo=utc).astimezone(utc)
             password = request_dict.get('userPwd', None)
             if password is not None:
@@ -366,174 +39,36 @@ def addLog(request, status_code):
                 request_dict.pop('userPwd')
 
             content = json.dumps(request_dict)
-            content = json.loads(content)
 
-            # 删除设备时记录设备UID
-            # if request_path == 'equipment/delete':
-            #     device_id = request_dict.get('id', None)
-            #     if device_id:
-            #         uid = Device_Info.objects.filter(id=device_id).values("UID")
-            #         content['uid'] = uid[0]['UID']
-            # if request_path == 'equipment/batchDelete':
-            #     device_ids = request_dict.get('ids', None)
-            #     if device_ids:
-            #         uids_query = Device_Info.objects.filter(id__in=device_ids).values("UID")
-            #         uids = ''
-            #         for uid in uids_query:
-            #             uids = uids + uid['UID'] + ','
-            #         content['uids'] = uids
-            content = json.dumps(content)
-            if user != '':
-                user = user
-            else:
-                print('空')
-                user = '空'
             add_data = {
                 'user': user,
-                'ip': clientIP,
+                'ip': ip,
                 'status': status_code,
                 'url': request.META['SERVER_PROTOCOL'] + '-' + request.method + '-' + request.path,
                 'operation': request_path,
                 'time': now_time,
                 'content': content
             }
-            print(add_data)
-            ModelService.addAccessLog(data=add_data)
+            Access_Log.objects.create(**add_data)
     except Exception as e:
         print(repr(e))
         pass
 
 
-def batch_add_log_ctr(request, status_code):
-    request.encoding = 'utf-8'
-    if request.method == 'GET':
-        request_dict = request.GET
-    elif request.method == 'POST':
-        request_dict = request.POST
-    else:
-        return
-    api_list = TemplateService.log_api()
-    request_path = request.path.strip().strip('/')
-    if request_path in api_list:
-        user = MiscellService.get_access_name(request_dict)
-        clientIP = CommonService.get_ip_address(request)
-        now_time = datetime.datetime.utcnow().replace(tzinfo=utc).astimezone(utc)
-        password = request_dict.get('userPwd', None)
-        if password is not None:
-            request_dict = dict(request_dict)
-            request_dict.pop('userPwd')
-        content = json.dumps(request_dict)
-        add_data = {
-            'user': user,
-            'ip': clientIP,
-            'status': status_code,
-            'url': request.META['SERVER_PROTOCOL'] + '-' + request.method + '-' + request.path,
-            'operation': request_path,
-            'time': str(now_time),
-            'content': content
-        }
-        redisObj = RedisObject()
-        loggerData = json.dumps(add_data)
-        # print(loggerData)
-        if SERVER_TYPE == 'Ansjer.formal_settings':
-            logKey = 'logger'
-        else:
-            logKey = 'test_logger'
-        redisObj.rpush(name=logKey, val=loggerData)
-        # 判断redis列表长度
-        if redisObj.llen(name=logKey) > 100 or SERVER_TYPE == 'Ansjer.test_settings':
-            data_list = redisObj.lrange(logKey, 0, -1)
-            redisObj.del_data(key=logKey)
-            ModelService.add_batch_log(data_list)
-
-
-def dynamo_db_add_log_ctr(request, status_code):
-    request.encoding = 'utf-8'
-    if request.method == 'GET':
-        request_dict = request.GET
-    elif request.method == 'POST':
-        request_dict = request.POST
-    else:
-        return
-    api_list = TemplateService.log_api()
-    request_path = request.path.strip().strip('/')
-    if SERVER_TYPE == 'Ansjer.formal_settings':
-        logKey = 'loggers'
-    else:
-        logKey = 'test_loggers'
-    # 判断redis列表长度为10条以上就会添加日志
-    num = 1
-    clientIP = CommonService.get_ip_address(request)
+def get_access_name(request_dict):
+    user_name = request_dict.get('userName', None)
+    if user_name:
+        return user_name
+    email = request_dict.get('email', None)
+    if email:
+        return email
+    phone = request_dict.get('phone', None)
+    if phone:
+        return phone
     token = request_dict.get('token', None)
-    userID = ''
+    user = ''
     if token is not None:
         tko = TokenObject(token)
-        userID = tko.userID
-    password = request_dict.get('userPwd', None)
-    userName = request_dict.get('userName', None)
-    if password is not None:
-        request_dict = dict(request_dict)
-        request_dict.pop('userPwd')
-
-    content = json.dumps(request_dict)
-    addTime = int(time.time())
-    if DOMAIN_HOST == 'www.zositechc.cn':
-        user_brand = 'access_log'
-    else:
-        user_brand = 'test_access_log'
-    # 过滤某些接口集合
-    if request_path in api_list:
-        add_data = {
-            'userName':userName,
-            'userID': userID,
-            'ip': clientIP,
-            'status': status_code,
-            'operation': request_path,
-            'addTime': addTime,
-            'content': content,
-            'Expiration_time': addTime + 2592000
-        }
-        redisObj = RedisObject()
-        loggerData = json.dumps(add_data)
-        redisObj.rpush(name=logKey, val=loggerData)
-        # 判断redis列表长度
-        if redisObj.llen(name=logKey) > num or SERVER_TYPE == 'Ansjer.test_settings':
-            data_list = redisObj.lrange(logKey, 0, -1)
-            redisObj.del_data(key=logKey)
-            my.access_log_item_put(user_brand,data_list)
-
-    # 判断是是否是下载接口的
-    else:
-        path = request.path
-        index = path.find('/OTA/downloads')
-        if index != -1:
-            addsCount = len(api_settings.ADDR_URL)
-            if addsCount > 1000:
-                response = ResponseObject()
-                # 提示获取链接失败,实际上是下载太频繁,超过了1000的并发量
-                return response.json(901)
-            else:
-                # 合理的情况就添加访问日志
-                adds = request.META.get('REMOTE_ADDR', None)
-                api_settings.ADDR_URL.append(adds)
-                add_data = {
-                    'userName': '无',
-                    'userID':'无',
-                    'ip': clientIP,
-                    'status': status_code,
-                    'operation': request_path,
-                    'addTime': addTime,
-                    'content': content,
-                    'Expiration_time': addTime + 2592000
-                }
-                redisObj = RedisObject()
-                loggerData = json.dumps(add_data)
-                redisObj.rpush(name=logKey, val=loggerData)
-                # 判断redis列表长度
-                if redisObj.llen(name=logKey) > num or SERVER_TYPE == 'Ansjer.test_settings':
-                    data_list = redisObj.lrange(logKey, 0, -1)
-                    redisObj.del_data(key=logKey)
-                    my.access_log_item_put(user_brand, data_list)
-
-
-
+        if tko.code == 0:
+            user = tko.user
+    return user

+ 0 - 10
Service/ModelService.py

@@ -120,16 +120,6 @@ class ModelService:
         else:
             return device_user.userID
 
-    # 访问日志添加
-    @staticmethod
-    def addAccessLog(data):
-        try:
-            access_log = Access_Log.objects.create(**data)
-        except Exception as e:
-            return False
-        else:
-            return True
-
     # 访问日志批量添加
     @staticmethod
     def add_batch_log(data_list):

+ 2 - 85
Service/TemplateService.py

@@ -1,97 +1,14 @@
-#!/usr/bin/env python3  
-# -*- coding: utf-8 -*-  
-"""
-@Copyright (C) ansjer cop Video Technology Co.,Ltd.All rights reserved.
-@AUTHOR: ASJRD018
-@NAME: Ansjer
-@software: PyCharm
-@DATE: 2018/7/3 11:11
-@Version: python3.6
-@MODIFY DECORD:ansjer dev
-@file: TemplateService.py
-@Contact: chanjunkai@163.com
-"""
-
-
 class TemplateService:
 
     @staticmethod
     def log_api():
-        apiList = [
-            'account/login',
-            'account/logout',
-            'account/changePwd',
-            'account/forget',
-            'account/refreshTk',
-            'account/showUserMore',
-            'account/perfectUserInfo',
-            'account/delUser',
-            'account/setUserValid',
-            'account/unsharedUserEquipment',
-            'roles/addNewRole',
-            'roles/delRole',
-            'roles/modifyRole',
-            'perms/addNewPerms',
-            'perms/delPerms',
-            'perms/modifyPerms',
-            'uploads/upgrade',
-            # 'appInfo',
-            'OTA/getNewVer',
-            'v2/account/authcode',
-            'v2/account/register',
-            'v2/account/forgetCode',
-            'v2/account/resetPwdByCode',
-            'cloudVod/createOrder',
-            'cloudVod/payExecute',
-            'cloudVod/status',
-            'cloudVod/details',
-            'cloudVod/filterVod',
-            'cloudVod/findVod',
-            'cloudVod/aliPayCreateOrder',
-            'cloudVod/aliPayCallback',
-            'deviceShare/queryUser',
-            'deviceShare/showShareInfo',
-            'deviceShare/confirm',
-            'deviceShare/deleteUser',
-            'deviceShare/deleteUserV2',
-            'order/querylist',
-            'detect/changeStatus',
-            # 'notify/push',
-            'wechat/authsign',
-            'login/oauth/authorize',
-            'login/oauth/access_token',
-            'login/oauth/user',
-            'v2/account/login',
-            'v3/account/login',
-            'detect/queryInfo',
-            'sysmsg/query',
-            'v3/account/register',
-            'v3/account/changePwd',
-            'v3/account/resetPwdByCode',
-            'account/appFrequency',
-            'equipment/OTA',
-            'equipment/addNewUserEquipment',
-            'equipment/delUserEquipment',
-            'equipment/modifyUserEquipment',
-            'equipment/add',
-            'equipment/delete',
-            'equipment/batchDelete',
-            'equipment/query',
-            'equipment/flowUpdate',
-            'v3/equipment/query',
-            'v3/equipment/add',
-            'v3/equipment/modify',
-            'Cloudsum/cloudservicesum',
-            'Cloudsum/userappversion',
-            'Cloudsum/usercount',
-            'Cloudsum/usercloud',
+        api_list = [
             'paymentCycle/queryPayCycle',
             'paymentCycle/cancelPayCycle',
             'payCycle/paypalCycleNotify',
             'payCycle/paypalCycleReturn',
-            'payCycle/test',
         ]
-        return apiList
+        return api_list
 
     @staticmethod
     def email_message(type, language):

+ 5 - 54
Service/middleware.py

@@ -1,27 +1,14 @@
-#!/usr/bin/env python
-# -*- coding: utf-8 -*-
+import django.db
 from django.utils.deprecation import MiddlewareMixin
 
 from Ansjer import config as api_settings
-from Ansjer.config import SERVER_TYPE
-
 from Object.ResponseObject import ResponseObject
-from Service.MiscellService import MiscellService
 from Service import CloudLogs
-import django.db
-
-
-# 设置mysql超时
+from Service.MiscellService import MiscellService
 
 
 class StatisticsUrlMiddleware(MiddlewareMixin):
     def _https_statistics_to_reverse(self, request):
-        '''
-
-        :param request:
-        :return:
-        '''
-        # 限制同时下载量
         path = request.path
         index = path.find('/OTA/downloads')
         if index != -1:
@@ -31,30 +18,14 @@ class StatisticsUrlMiddleware(MiddlewareMixin):
             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)
@@ -69,32 +40,12 @@ class StatisticsUrlMiddleware(MiddlewareMixin):
         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)
+        if request.path != '/favicon.ico':
             CloudLogs.batch_add_access_log(request=request, status_code=response.status_code)
             try:
-                pass
-                # mysql
-                if SERVER_TYPE!="Ansjer.formal_settings":
-                    MiscellService.add_access_log(request=request, status_code=response.status_code)
-                # else:
-                #     print('不添加日志')
-                # mongodb版
-                # MiscellService.access_log(request=request, response=response, type=0)
+                MiscellService.add_access_log(request=request, status_code=response.status_code)
             except Exception as e:
                 print(repr(e))
             django.db.close_old_connections()
-        return response
+        return response