CloudLogs.py 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. import json
  2. import threading
  3. import datetime
  4. import time
  5. from bson import utc
  6. from Object.RedisObject import RedisObject
  7. from Service.CommonService import CommonService
  8. from Service.MiscellService import MiscellService
  9. from Service.TemplateService import TemplateService
  10. from Ansjer.config import SERVER_TYPE
  11. from Model.models import CloudLogModel
  12. from Object.UidTokenObject import UidTokenObject
  13. def batch_add_access_log(request, status_code):
  14. asy = threading.Thread(target=batch_add_log_ctr, args=(request, status_code))
  15. asy.start()
  16. def batch_add_log_ctr(request, status_code):
  17. request.encoding = 'utf-8'
  18. if request.method == 'GET':
  19. request_dict = request.GET
  20. elif request.method == 'POST':
  21. request_dict = request.POST
  22. else:
  23. return
  24. api_list = [
  25. 'cloudstorage/getsignsts',
  26. 'cloudstorage/storeplaylist',
  27. 'cloudstorage/queryvodlist',
  28. ]
  29. request_path = request.path.strip().strip('/')
  30. if request_path in api_list:
  31. user = MiscellService.get_access_name(request_dict)
  32. uidToken = request_dict.get('uidToken', None)
  33. utko = UidTokenObject(uidToken)
  34. uid = utko.UID
  35. if not uid:
  36. uid = request_dict.get('uid', None)
  37. clientIP = CommonService.get_ip_address(request)
  38. # now_time = datetime.datetime.utcnow().replace(tzinfo=utc).astimezone(utc)
  39. # beijing = datetime.timezone(datetime.timedelta(hours=8))
  40. # utc = datetime.timezone.utc # 获取 UTC 的时区对象
  41. # beijing_time = datetime.datetime.utcnow().replace(tzinfo=utc).astimezone(beijing)
  42. now_time = time.time()
  43. password = request_dict.get('userPwd', None)
  44. if password is not None:
  45. request_dict = dict(request_dict)
  46. request_dict.pop('userPwd')
  47. content = json.dumps(request_dict)
  48. add_data = {
  49. 'user': user,
  50. 'ip': clientIP,
  51. 'uid': uid,
  52. 'url': request.META['SERVER_PROTOCOL'] + '-' + request.method + '-' + request.path,
  53. 'operation': request_path,
  54. 'time': now_time,
  55. 'content': content
  56. }
  57. print('add_data', add_data)
  58. redisObj = RedisObject()
  59. loggerData = json.dumps(add_data)
  60. # print(loggerData)
  61. if SERVER_TYPE == 'Ansjer.formal_settings':
  62. logKey = 'logger'
  63. else:
  64. logKey = 'test_logger'
  65. redisObj.rpush(name=logKey, val=loggerData)
  66. # 判断redis列表长度
  67. if redisObj.llen(name=logKey) > 100:
  68. data_list = redisObj.lrange(logKey, 0, -1)
  69. redisObj.del_data(key=logKey)
  70. add_batch_log(data_list)
  71. # 访问日志批量添加
  72. def add_batch_log(data_list):
  73. try:
  74. if data_list:
  75. querysetlist = []
  76. for i in data_list:
  77. data = json.loads(i.decode('utf-8'))
  78. querysetlist.append(CloudLogModel(user=data['user'],
  79. ip=data['ip'],
  80. uid=data['uid'],
  81. url=data['url'],
  82. operation=data['operation'],
  83. time=data['time'],
  84. content=data['content']))
  85. CloudLogModel.objects.bulk_create(querysetlist)
  86. else:
  87. return
  88. except Exception as e:
  89. print('error:')
  90. print(repr(e))
  91. return False
  92. else:
  93. return True