def get_system_log(request): mongo = MongoOps(settings.MONGODB_HOST, settings.MONGODB_PORT, settings.RECORD_DB, settings.RECORD_COLL, settings.MONGODB_USER, settings.MONGODB_PASS) start_time = request.GET.get('startTime') end_time = request.GET.get('endTime') try: if start_time and end_time: start_time = datetime.datetime.strptime(start_time, '%Y-%m-%d') end_time = datetime.datetime.strptime( end_time, '%Y-%m-%d') + datetime.timedelta(1) return_data = mongo.find( {"datetime": { "$gt": start_time, "$lt": end_time }}) else: return_data = mongo.find() return JsonResponse({ 'code': 200, 'data': return_data, 'msg': '获取成功' }, encoder=JSONEncoder) except Exception as e: return JsonResponse({ 'code': 500, 'data': None, 'msg': '获取失败,{}'.format(e) })
def process_response(self, request, response): if request.method == 'GET' and request.path not in pass_paths and response.status_code == 200: user_infos = [] users = UserProfile.objects.all() for user in users: user_info = { 'user_id': user.id, 'username': user.username, 'user_image': str(user.image), 'login_status': user.login_status } user_infos.append(user_info) request.session['user_infos'] = user_infos elif request.method != 'GET' and all([key not in request.path for key in pass_keys]): if isinstance(self.body, dict): data = self.body elif isinstance(self.body, bytes) and len(self.body) != 0: data = json.loads(self.body.decode('utf-8')) else: data = None if 'api' in request.path: code = response.status_code elif 'code' in json.loads(response.__dict__.get('_container')[0].decode('utf-8')): code = json.loads(response.__dict__.get('_container')[0].decode('utf-8')).get('code') else: code = None mongo = MongoOps(settings.MONGODB_HOST, settings.MONGODB_PORT, settings.RECORD_DB, settings.RECORD_COLL) request_data = {'username': request.user.username, 'path': request.path, 'method': request.method, 'request_data': data, 'code': code, 'ip': request.META['REMOTE_ADDR'], 'datetime': datetime.datetime.now()} mongo.insert_one(request_data) return response
def remove_system_log(days=90): deadline = datetime.datetime.now() - datetime.timedelta(days) m = MongoOps(settings.MONGODB_HOST, settings.MONGODB_PORT, settings.RECORD_DB, settings.RECORD_COLL, settings.MONGODB_USER, settings.MONGODB_PASS) rs, _ = m.find({"datetime": {"$lt": deadline}}) m.delete({"datetime": {"$lt": deadline}}, del_all=True)
def get_system_log(request): mongo = MongoOps(settings.MONGODB_HOST, settings.MONGODB_PORT, settings.RECORD_DB, settings.RECORD_COLL, settings.MONGODB_USER, settings.MONGODB_PASS) draw = int(request.GET.get('draw')) # 记录操作次數 start = int(request.GET.get('start')) # 起始位置 length = int(request.GET.get('length')) # 每页长度 start_time = request.GET.get('startTime') end_time = request.GET.get('endTime') log_user = request.GET.get('logUser') log_path = request.GET.get('logPath') # search_key = request.GET.get('search[value]') # 搜索关键字 # order_column = request.GET.get('order[0][column]') # 排序字段索引 # order_column = request.GET.get('order[0][dir]') # 排序规则:ase/desc search_options = {} try: if log_user: search_options.update({"username": {"$regex": f".*{log_user}.*"}}) if log_path: search_options.update({"path": {"$regex": f".*{log_path}.*"}}) if start_time and end_time: start_time = datetime.datetime.strptime(start_time, '%Y-%m-%d') end_time = datetime.datetime.strptime( end_time, '%Y-%m-%d') + datetime.timedelta(1) search_options.update( {"datetime": { "$gt": start_time, "$lt": end_time }}) searched_data, _ = mongo.find(search_options, start, length, sort_key='datetime', sort_method=-1) _, count = mongo.find(search_options) dic = { 'draw': draw, 'recordsFiltered': count, 'recordsTotal': count, 'data': searched_data } return HttpResponse(json.dumps(dic, cls=JSONEncoder), content_type='application/json') except Exception as e: return JsonResponse({ 'code': 500, 'data': None, 'msg': '获取失败:{}'.format(e) })
class RecordMiddleware(MiddlewareMixin): def __init__(self, *args, **kwargs): super(RecordMiddleware, self).__init__(*args, **kwargs) self.body = None self.mongo = MongoOps(settings.MONGODB_HOST, settings.MONGODB_PORT, settings.RECORD_DB, settings.RECORD_COLL) def process_request(self, request): if request.POST: self.body = {k: v[0] if len(v) == 1 else v for k, v in request.POST.lists()} else: self.body = getattr(request, '_body', request.body) def process_response(self, request, response): if request.method == 'GET' and request.path not in pass_paths and response.status_code == 200: user_infos = [] users = UserProfile.objects.all() for user in users: user_info = { 'user_id': user.id, 'username': user.username, 'user_image': str(user.image), 'login_status': user.login_status } user_infos.append(user_info) request.session['user_infos'] = user_infos elif request.method != 'GET' and all([key not in request.path for key in pass_keys]): if isinstance(self.body, dict): data = self.body elif isinstance(self.body, bytes) and len(self.body) != 0: data = json.loads(self.body.decode('utf-8')) else: data = None if 'api' in request.path: code = response.status_code elif '_container' in response.__dict__: code = json.loads(response.__dict__.get('_container')[0].decode('utf-8')).get('code') else: code = None if data and 'action' in data and 'show' in data.get('action'): pass else: request_data = {'username': request.user.username, 'path': request.path, 'method': request.method, 'request_data': data, 'code': code, 'ip': request.META['REMOTE_ADDR'], 'datetime': datetime.datetime.now()} self.mongo.insert_one(request_data) return response
def __init__(self, *args, **kwargs): super(RecordMiddleware, self).__init__(*args, **kwargs) self.body = None self.mongo = MongoOps(settings.MONGODB_HOST, settings.MONGODB_PORT, settings.RECORD_DB, settings.RECORD_COLL)