| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202 | 
							- import datetime
 
- import threading
 
- import time
 
- import requests
 
- import simplejson as json
 
- from django.utils.timezone import utc
 
- from Object.TokenObject import TokenObject
 
- from Object.mongodb import mongodb
 
- from Service.CommonService import CommonService
 
- from Service.ModelService import ModelService
 
- from Service.TemplateService import TemplateService
 
- from Object.RedisObject import RedisObject
 
- from Ansjer.config import SERVER_TYPE
 
- # 杂项类,共用行不高,但有些地方需求
 
- class MiscellService():
 
-     # 获取访问用户名称
 
-     @staticmethod
 
-     def get_access_name(request_dict):
 
-         userName = request_dict.get('userName', None)
 
-         if userName:
 
-             return userName
 
-         email = request_dict.get('email', None)
 
-         if email:
 
-             return email
 
-         phone = request_dict.get('phone', None)
 
-         if phone:
 
-             return phone
 
-         token = request_dict.get('token', None)
 
-         user = ''
 
-         if token is not None:
 
-             tko = TokenObject(token)
 
-             if tko.code == 0:
 
-                 user = tko.user
 
-                 # user = ModelService.get_user_name(tko.userID)
 
-         return user
 
-     @staticmethod
 
-     def add_access_log(request, status_code):
 
-         # 增加多进程 异步
 
-         asy = threading.Thread(target=addLog, args=(request, status_code))
 
-         asy.start()
 
-     @staticmethod
 
-     def access_log(request, response, type):
 
-         if request.method == 'GET':
 
-             request_dict = request.GET
 
-         elif request.method == 'POST':
 
-             # request.encoding = 'utf-8'
 
-             request_dict = request.POST
 
-         else:
 
-             return
 
-         api_list = TemplateService.log_api()
 
-         request_path = request.path.strip().strip('/')
 
-         if request_path in api_list:
 
-             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)
 
-             area = CommonService.getAddr(ip=clientIP)
 
-             if type == 1:
 
-                 status_code = 200
 
-             else:
 
-                 status_code = response.status_code
 
-             add_data = {
 
-                 'user': MiscellService.get_access_name(request=request),
 
-                 'ip': clientIP,
 
-                 'status': status_code,
 
-                 'path': request_path,
 
-                 'method': request.method,
 
-                 'time': int(now_time),
 
-                 'area': area,
 
-                 'content': content,
 
-                 'et': datetime.datetime.utcnow()
 
-             }
 
-             mdb = mongodb()
 
-             col = "log_access"
 
-             mdb.insert_one(col=col, data=add_data)
 
-     # 获取所有设备ip地址的指向的国家
 
-     @staticmethod
 
-     def getArea(ip):
 
-         data = {'ip': ip}
 
-         country = ''
 
-         URL = 'http://ip.taobao.com/service/getIpInfo.php'
 
-         try:
 
-             r = requests.get(URL, params=data, timeout=3)
 
-         except requests.RequestException as e:
 
-             print(e)
 
-         else:
 
-             json_data = r.json()
 
-             if json_data['code'] == 0:
 
-                 if json_data['data']['country'] != 'XX':
 
-                     country = json_data['data']['country']
 
-         return country
 
-     # 下载接口添加访问日志
 
-     @staticmethod
 
-     def add_ota_download_log(request):
 
-         clientIP = CommonService.get_ip_address(request)
 
-         request_path = request.path.strip().strip('/')
 
-         now_time = datetime.datetime.utcnow().replace(tzinfo=utc).astimezone(utc)
 
-         add_data = {
 
-             'user': 'None',
 
-             'ip': clientIP,
 
-             'status': 200,
 
-             'url': request.META['SERVER_PROTOCOL'] + '-' + request.method + '-' + request.path,
 
-             'operation': request_path,
 
-             'time': now_time,
 
-             'content': ''
 
-         }
 
-         ModelService.addAccessLog(data=add_data)
 
-     @staticmethod
 
-     def batch_add_access_log(request, status_code):
 
-         asy = threading.Thread(target=batch_add_log_ctr, args=(request, status_code))
 
-         asy.start()
 
- def addLog(request, status_code):
 
-     try:
 
-         request.encoding = 'utf-8'
 
-         if request.method == 'GET':
 
-             request_dict = request.GET
 
-         elif request.method == 'POST':
 
-             request_dict = request.POST
 
-         else:
 
-             return
 
-         api_list = TemplateService.log_api()
 
-         request_path = request.path.strip().strip('/')
 
-         if request_path in api_list:
 
-             user = MiscellService.get_access_name(request_dict=request_dict)
 
-             clientIP = CommonService.get_ip_address(request)
 
-             now_time = datetime.datetime.utcnow().replace(tzinfo=utc).astimezone(utc)
 
-             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,
 
-                 'status': status_code,
 
-                 'url': request.META['SERVER_PROTOCOL'] + '-' + request.method + '-' + request.path,
 
-                 'operation': request_path,
 
-                 'time': now_time,
 
-                 'content': content
 
-             }
 
-             ModelService.addAccessLog(data=add_data)
 
-     except Exception as e:
 
-         pass
 
- 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 = TemplateService.log_api()
 
-     request_path = request.path.strip().strip('/')
 
-     if request_path in api_list:
 
-         user = MiscellService.get_access_name(request_dict)
 
-         clientIP = CommonService.get_ip_address(request)
 
-         now_time = datetime.datetime.utcnow().replace(tzinfo=utc).astimezone(utc)
 
-         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,
 
-             'status': status_code,
 
-             'url': request.META['SERVER_PROTOCOL'] + '-' + request.method + '-' + request.path,
 
-             'operation': request_path,
 
-             'time': str(now_time),
 
-             'content': content
 
-         }
 
-         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 or SERVER_TYPE == 'Ansjer.test_settings':
 
-             data_list = redisObj.lrange(logKey, 0, -1)
 
-             redisObj.del_data(key=logKey)
 
-             ModelService.add_batch_log(data_list)
 
 
  |