|
@@ -0,0 +1,100 @@
|
|
|
+import json
|
|
|
+import threading
|
|
|
+import datetime
|
|
|
+import time
|
|
|
+
|
|
|
+from bson import utc
|
|
|
+
|
|
|
+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
|
|
|
+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
|
|
|
+ api_list = [
|
|
|
+ 'cloudstorage/getsignsts',
|
|
|
+ 'cloudstorage/storeplaylist',
|
|
|
+ 'cloudstorage/queryvodlist',
|
|
|
+ ]
|
|
|
+ request_path = request.path.strip().strip('/')
|
|
|
+ if request_path in api_list:
|
|
|
+ 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)
|
|
|
+ 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
|