MiscellService.py 4.9 KB

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