123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990 |
- import json
- import threading
- import time
- import jwt
- 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))
- 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 'storeplaylist' in request_path or 'signplaym3u8' 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 = 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)
- 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(repr(e))
- return False
- else:
- return True
|