| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798 | 
							- 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.UidTokenObject import UidTokenObject
 
- def batch_add_access_log(request, status_code):
 
-     asy = threading.Thread(target=batch_add_log_ctr, args=(request, status_code))
 
-     asy.start()
 
- 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
 
-     request_path = request.path.strip().strip('/')
 
-     if 'cloudstorage' in request_path :
 
-         user = MiscellService.get_access_name(request_dict)
 
-         uidToken = request_dict.get('uidToken', None)
 
-         utko = UidTokenObject(uidToken)
 
-         uid = utko.UID
 
-         if not uid:
 
-             uid = request_dict.get('uid', None)
 
-             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:
 
-             request_dict = dict(request_dict)
 
-             request_dict.pop('userPwd')
 
-         content = json.dumps(request_dict)
 
-         add_data = {
 
-             'user': user,
 
-             'ip': clientIP,
 
-             'uid': uid,
 
-             'url': request.META['SERVER_PROTOCOL'] + '-' + request.method + '-' + request.path,
 
-             'operation': request_path,
 
-             'time': now_time,
 
-             'content': content
 
-         }
 
-         print('add_data', add_data)
 
-         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:
 
-             data_list = redisObj.lrange(logKey, 0, -1)
 
-             redisObj.del_data(key=logKey)
 
-             add_batch_log(data_list)
 
- # 访问日志批量添加
 
- def add_batch_log(data_list):
 
-     try:
 
-         if data_list:
 
-             querysetlist = []
 
-             for i in data_list:
 
-                 data = json.loads(i.decode('utf-8'))
 
-                 querysetlist.append(CloudLogModel(user=data['user'],
 
-                                                   ip=data['ip'],
 
-                                                   uid=data['uid'],
 
-                                                   url=data['url'],
 
-                                                   operation=data['operation'],
 
-                                                   time=data['time'],
 
-                                                   content=data['content']))
 
-             CloudLogModel.objects.bulk_create(querysetlist)
 
-         else:
 
-             return
 
-     except Exception as e:
 
-         print('error:')
 
-         print(repr(e))
 
-         return False
 
-     else:
 
-         return True
 
 
  |