MiscellService.py 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  1. import datetime
  2. import time
  3. import traceback
  4. import threading
  5. import requests
  6. import simplejson as json
  7. from django.utils.timezone import utc
  8. from Object.TokenObject import TokenObject
  9. from Object.mongodb import mongodb
  10. from Service.CommonService import CommonService
  11. from Service.ModelService import ModelService
  12. from Service.TemplateService import TemplateService
  13. # 杂项类,共用行不高,但有些地方需求
  14. class MiscellService():
  15. # 获取访问用户名称
  16. @staticmethod
  17. def get_access_name(request_dict):
  18. userName = request_dict.get('userName',None)
  19. if userName:
  20. return userName
  21. else:
  22. token = request_dict.get('token', None)
  23. user = None
  24. if token is not None:
  25. tko = TokenObject(token)
  26. if tko.code == 0:
  27. user = ModelService.get_user_name(tko.userID)
  28. return user
  29. @staticmethod
  30. def add_access_log(request, status_code):
  31. # 增加多进程 异步
  32. asy = threading.Thread(target=addLog, args=(request,status_code))
  33. asy.start()
  34. @staticmethod
  35. def access_log(request,response,type):
  36. if request.method == 'GET':
  37. request_dict = request.GET
  38. if request.method == 'POST':
  39. # request.encoding = 'utf-8'
  40. request_dict = request.POST
  41. api_list = TemplateService.log_api()
  42. request_path = request.path.strip().strip('/')
  43. if request_path in api_list:
  44. clientIP = CommonService.get_ip_address(request)
  45. now_time = time.time()
  46. password = request_dict.get('userPwd',None)
  47. if password is not None:
  48. request_dict = dict(request_dict)
  49. request_dict.pop('userPwd')
  50. content = json.dumps(request_dict)
  51. area = CommonService.getAddr(ip=clientIP)
  52. if type == 1:
  53. status_code = 200
  54. else:
  55. status_code = response.status_code
  56. add_data = {
  57. 'user': MiscellService.get_access_name(request=request),
  58. 'ip': clientIP,
  59. 'status': status_code,
  60. 'path': request_path,
  61. 'method': request.method,
  62. 'time': int(now_time),
  63. 'area': area,
  64. 'content': content,
  65. 'et':datetime.datetime.utcnow()
  66. }
  67. mdb = mongodb()
  68. col = "log_access"
  69. mdb.insert_one(col=col, data=add_data)
  70. # 获取所有设备ip地址的指向的国家
  71. @staticmethod
  72. def getArea(ip):
  73. data = {'ip': ip}
  74. country = ''
  75. URL = 'http://ip.taobao.com/service/getIpInfo.php'
  76. try:
  77. r = requests.get(URL, params=data, timeout=3)
  78. except requests.RequestException as e:
  79. print(e)
  80. else:
  81. json_data = r.json()
  82. if json_data['code'] == 0:
  83. if json_data['data']['country'] != 'XX':
  84. country = json_data['data']['country']
  85. return country
  86. # 下载接口添加访问日志
  87. @staticmethod
  88. def add_ota_download_log(request):
  89. clientIP = CommonService.get_ip_address(request)
  90. request_path = request.path.strip().strip('/')
  91. now_time = datetime.datetime.utcnow().replace(tzinfo=utc).astimezone(utc)
  92. add_data = {
  93. 'user': 'None',
  94. 'ip': clientIP,
  95. 'status': 200,
  96. 'url': request.META['SERVER_PROTOCOL'] + '-' + request.method + '-' + request.path,
  97. 'operation': request_path,
  98. 'time': now_time,
  99. 'content': ''
  100. }
  101. ModelService.addAccessLog(data=add_data)
  102. def addLog(request,status_code):
  103. try:
  104. request.encoding = 'utf-8'
  105. if request.method == 'GET':
  106. request_dict = request.GET
  107. if request.method == 'POST':
  108. request_dict = request.POST
  109. api_list = TemplateService.log_api()
  110. request_path = request.path.strip().strip('/')
  111. if request_path in api_list:
  112. user = MiscellService.get_access_name(request_dict=request_dict)
  113. clientIP = CommonService.get_ip_address(request)
  114. now_time = datetime.datetime.utcnow().replace(tzinfo=utc).astimezone(utc)
  115. password = request_dict.get('userPwd', None)
  116. if password is not None:
  117. request_dict = dict(request_dict)
  118. request_dict.pop('userPwd')
  119. content = json.dumps(request_dict)
  120. add_data = {
  121. 'user': user,
  122. 'ip': clientIP,
  123. 'status': status_code,
  124. 'url': request.META['SERVER_PROTOCOL'] + '-' + request.method + '-' + request.path,
  125. 'operation': request_path,
  126. 'time': now_time,
  127. 'content': content
  128. }
  129. ModelService.addAccessLog(data=add_data)
  130. except Exception as e:
  131. pass