chenjunkai преди 6 години
родител
ревизия
c2f422bfaa
променени са 6 файла, в които са добавени 77 реда и са изтрити 10 реда
  1. 1 1
      Controller/UserController.py
  2. 13 0
      Object/RedisObject.py
  3. 0 1
      Object/TokenObject.py
  4. 41 0
      Service/MiscellService.py
  5. 20 7
      Service/ModelService.py
  6. 2 1
      Service/middleware.py

+ 1 - 1
Controller/UserController.py

@@ -964,7 +964,7 @@ class v2LoginView(TemplateView):
             return response.json(5)
         return self.validates(request_dict, response)
 
-    @ratelimit(key='ip', rate='5/m')
+    # @ratelimit(key='ip', rate='5/m')
     def get(self, request, *args, **kwargs):
         request.encoding = 'utf-8'
         request_dict = request.GET

+ 13 - 0
Object/RedisObject.py

@@ -65,3 +65,16 @@ class RedisObject:
 
     def get_size(self):
         return self.CONN.dbsize()
+
+    # 向列表插入数据
+    def rpush(self, name, val):
+        self.CONN.rpush(name, val)
+
+    # 获取列表长度
+    def llen(self, name):
+        return self.CONN.llen(name=name)
+
+    # 获取列表所有数据
+    def lrange(self, name, start, end):
+        return self.CONN.lrange(name, start, end)
+

+ 0 - 1
Object/TokenObject.py

@@ -46,7 +46,6 @@ class TokenObject:
             if self.userID:
                 redisObj = RedisObject(db=3)
                 redisObj.set_data(key=self.userID, val=self.user, expire=300)
-
         except jwt.ExpiredSignatureError as e:
             print('过期')
             print(repr(e))

+ 41 - 0
Service/MiscellService.py

@@ -11,6 +11,7 @@ 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
 
 
 # 杂项类,共用行不高,但有些地方需求
@@ -115,6 +116,46 @@ class MiscellService():
         }
         ModelService.addAccessLog(data=add_data)
 
+    @staticmethod
+    def batch_add_access_log(request, status_code):
+        request.encoding = 'utf-8'
+        if request.method == 'GET':
+            request_dict = request.GET
+        if request.method == 'POST':
+            request_dict = request.POST
+        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)
+            redisObj.rpush(name='logger', val=loggerData)
+            # 判断redis列表长度
+            if redisObj.llen(name='logger') > 100:
+                data_list = redisObj.lrange('logger', 0, -1)
+                redisObj.del_data(key='logger')
+                ModelService.add_batch_log(data_list)
+            else:
+                pass
+        # add batch
+
 
 def addLog(request, status_code):
     try:

+ 20 - 7
Service/ModelService.py

@@ -1,5 +1,6 @@
 from Model.models import *
 from Service.CommonService import CommonService
+import json
 
 
 # 针对模型封装的复用性代码
@@ -12,7 +13,7 @@ class ModelService:
     # 获取用户所有权限
     @staticmethod
     def own_permission(userID):
-        permission = Device_User.objects.get(userID=userID).role.values_list('permission',flat=True)
+        permission = Device_User.objects.get(userID=userID).role.values_list('permission', flat=True)
         if permission:
             return list(permission)
         return []
@@ -21,7 +22,7 @@ class ModelService:
     @staticmethod
     def own_role(userID):
         try:
-            role_qs = Device_User.objects.get(userID=userID).role.values('rid','roleName')
+            role_qs = Device_User.objects.get(userID=userID).role.values('rid', 'roleName')
             if role_qs.exists():
                 return {'rid': role_qs[0]['rid'], 'roleName': role_qs[0]['roleName']}
         except Exception as e:
@@ -44,7 +45,7 @@ class ModelService:
     @staticmethod
     def check_user_own_device(userID, deviceID):
         try:
-            dvqs = Device_Info.objects.filter(userID_id=userID).values_list('id',flat=True)
+            dvqs = Device_Info.objects.filter(userID_id=userID).values_list('id', flat=True)
             if dvqs:
                 if deviceID in dvqs:
                     return True
@@ -90,7 +91,19 @@ class ModelService:
         except Exception as e:
             return False
         else:
-            if access_log.id:
-                return True
-            else:
-                return False
+            return True
+
+    # 访问日志批量添加
+    @staticmethod
+    def add_batch_log(data_list):
+        try:
+            querysetlist = []
+            for i in data_list:
+                data = json.loads(i)
+                querysetlist.append(Access_Log(**data))
+            Access_Log.objects.bulk_create(querysetlist)
+        except Exception as e:
+            print(repr(e))
+            return False
+        else:
+            return True

+ 2 - 1
Service/middleware.py

@@ -81,7 +81,8 @@ class StatisticsUrlMiddleware(MiddlewareMixin):
             print('process_response', request, response)
             try:
                 # mysql
-                MiscellService.add_access_log(request=request, status_code=response.status_code)
+                MiscellService.batch_add_access_log(request=request, status_code=response.status_code)
+                # MiscellService.add_access_log(request=request, status_code=response.status_code)
                 # mongodb版
                 # MiscellService.access_log(request=request, response=response, type=0)
             except Exception as e: