| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990 | import jsonimport threadingimport timeimport jwtfrom Ansjer.config import SERVER_TYPE, OAUTH_ACCESS_TOKEN_SECRETfrom Model.models import CloudLogModelfrom Object.RedisObject import RedisObjectfrom Object.UidTokenObject import UidTokenObjectfrom Service.CommonService import CommonServicefrom Service.MiscellService import MiscellServicefrom Service.MiscellService import get_access_namedef 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 = 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
 |