From 41337d28c3c707c6c025b345adf30a4f662ae710 Mon Sep 17 00:00:00 2001 From: ibuler Date: Sat, 5 Nov 2016 01:15:25 +0800 Subject: [PATCH] add proxy log search --- apps/audits/hands.py | 2 + apps/audits/models.py | 2 +- apps/audits/serializers.py | 5 +- .../templates/audits/command_log_list.html | 41 ++++++++++- .../templates/audits/proxy_log_list.html | 69 +++++++++++++++++-- apps/audits/views.py | 58 ++++++++++++++-- .../perms/asset_permission_create_update.html | 2 +- .../bootstrap-datepicker.js | 0 apps/templates/_base_list.html | 6 +- .../templates/terminal/terminal_update.html | 2 +- apps/users/templates/users/_user.html | 2 +- 11 files changed, 167 insertions(+), 22 deletions(-) rename apps/static/js/plugins/{datapicker => datepicker}/bootstrap-datepicker.js (100%) diff --git a/apps/audits/hands.py b/apps/audits/hands.py index f530b5e78..36358cbf5 100644 --- a/apps/audits/hands.py +++ b/apps/audits/hands.py @@ -1,5 +1,7 @@ # ~*~ coding: utf-8 ~*~ # +from users.models import User +from assets.models import Asset, SystemUser from users.backends import IsSuperUserOrTerminalUser from terminal.models import Terminal diff --git a/apps/audits/models.py b/apps/audits/models.py index 1479ade7e..a98178a0d 100644 --- a/apps/audits/models.py +++ b/apps/audits/models.py @@ -71,7 +71,7 @@ class ProxyLog(models.Model): class CommandLog(models.Model): - proxy_log = models.ForeignKey(ProxyLog, on_delete=models.CASCADE, related_name='command_log') + proxy_log = models.ForeignKey(ProxyLog, on_delete=models.CASCADE, related_name='commands') command_no = models.IntegerField() command = models.CharField(max_length=1000, blank=True) output = models.TextField(blank=True) diff --git a/apps/audits/serializers.py b/apps/audits/serializers.py index 881f84666..4d02ef5b4 100644 --- a/apps/audits/serializers.py +++ b/apps/audits/serializers.py @@ -14,7 +14,8 @@ class ProxyLogSerializer(serializers.ModelSerializer): class Meta: model = models.ProxyLog fields = ['id', 'name', 'username', 'hostname', 'ip', 'system_user', 'login_type', 'terminal', - 'log_file', 'was_failed', 'is_finished', 'date_start', 'time', 'command_length', "commands_dict"] + 'log_file', 'was_failed', 'is_finished', 'date_start', 'date_finished', 'time', + 'command_length', "commands_dict"] @staticmethod def get_time(obj): @@ -25,7 +26,7 @@ class ProxyLogSerializer(serializers.ModelSerializer): @staticmethod def get_command_length(obj): - return len(obj.command_log.all()) + return len(obj.commands.all()) class CommandLogSerializer(serializers.ModelSerializer): diff --git a/apps/audits/templates/audits/command_log_list.html b/apps/audits/templates/audits/command_log_list.html index fffcbf223..bfbe943f1 100644 --- a/apps/audits/templates/audits/command_log_list.html +++ b/apps/audits/templates/audits/command_log_list.html @@ -3,10 +3,44 @@ {% load static %} {% load common_tags %} {% block content_left_head %} -{# {% trans "Create permission" %} #} + {% endblock %} +{% block table_search %} +
+
+ +
+
+ +
+
+ +
+
+
+ +
+
+
+{% endblock %} {% block table_container %} @@ -16,6 +50,7 @@ + @@ -23,11 +58,12 @@ {% for command in command_list %} - + + @@ -41,6 +77,7 @@ {% endblock %} diff --git a/apps/audits/templates/audits/proxy_log_list.html b/apps/audits/templates/audits/proxy_log_list.html index e79f5e514..3c766214e 100644 --- a/apps/audits/templates/audits/proxy_log_list.html +++ b/apps/audits/templates/audits/proxy_log_list.html @@ -1,6 +1,55 @@ {% extends '_base_list.html' %} {% load i18n %} +{% load static %} {% load common_tags %} +{% block content_left_head %} + + +{% endblock %} + + +{% block table_search %} + +
+
+ + + to + +
+
+
+ +
+
+ +
+
+ +
+
+
+ +
+
+ +{% endblock %} {% block table_head %} @@ -22,8 +71,8 @@ - - + + - + {% endfor %} {% endblock %} {% block custom_foot_js %} + {% endblock %} diff --git a/apps/audits/views.py b/apps/audits/views.py index bd1c9bf74..c4cfdafaf 100644 --- a/apps/audits/views.py +++ b/apps/audits/views.py @@ -1,25 +1,66 @@ # ~*~ coding: utf-8 ~*~ # +import datetime from django.views.generic import ListView, UpdateView, DeleteView, DetailView, TemplateView from django.views.generic.edit import SingleObjectMixin from django.utils.translation import ugettext as _ +from django.utils import timezone from django.urls import reverse_lazy from django.conf import settings +from django.db.models import Q from .models import ProxyLog, CommandLog from .utils import AdminUserRequiredMixin +from .hands import User, Asset, SystemUser -class ProxyLogListView(ListView): +class ProxyLogListView(AdminUserRequiredMixin, ListView): model = ProxyLog template_name = 'audits/proxy_log_list.html' context_object_name = 'proxy_log_list' + def get_queryset(self): + self.queryset = super(ProxyLogListView, self).get_queryset() + self.keyword = keyword = self.request.GET.get('keyword', '') + self.username = username = self.request.GET.get('username', '') + self.ip = ip = self.request.GET.get('ip', '') + self.date_from_s = date_from_s = \ + self.request.GET.get('date_from', '%s' % (datetime.datetime.now()-datetime.timedelta(7)).strftime('%m/%d/%Y')) + self.date_to_s = date_to_s = self.request.GET.get('date_to', '%s' % datetime.datetime.now().strftime('%m/%d/%Y')) + + if date_from_s: + date_from = timezone.datetime.strptime(date_from_s, '%m/%d/%Y') + self.queryset = self.queryset.filter(date_start__gt=date_from) + + if date_to_s: + date_to = timezone.datetime.strptime(date_to_s + ' 23:59:59', '%m/%d/%Y %H:%M:%S') + self.queryset = self.queryset.filter(date_start__lt=date_to) + if username: + self.queryset = self.queryset.filter(username=username) + if ip: + self.queryset = self.queryset.filter(ip=ip) + if keyword: + self.queryset = self.queryset.filter(Q(username__contains=keyword) | + Q(name__icontains=keyword) | + Q(hostname__icontains=keyword) | + Q(ip__icontains=keyword) | + Q(system_user__icontains=keyword)).distinct() + return self.queryset + def get_context_data(self, **kwargs): - context = super(ProxyLogListView, self).get_context_data(**kwargs) - context.update({'app': _('Audits'), 'action': _('Proxy log list')}) - return context + context = { + 'app': _('Audits'), + 'action': _('Proxy log list'), + 'user_list': User.objects.all(), + 'asset_list': Asset.objects.all(), + 'system_user_list': SystemUser.objects.all(), + 'keyword': self.keyword, + 'date_from': self.date_from_s, + 'date_to': self.date_to_s, + } + kwargs.update(context) + return super(ProxyLogListView, self).get_context_data(**kwargs) class ProxyLogDetailView(AdminUserRequiredMixin, SingleObjectMixin, ListView): @@ -31,7 +72,7 @@ class ProxyLogDetailView(AdminUserRequiredMixin, SingleObjectMixin, ListView): return super(ProxyLogDetailView, self).get(request, *args, **kwargs) def get_queryset(self): - return list(self.object.command_log.all()) + return list(self.object.commands.all()) def get_context_data(self, **kwargs): context = { @@ -74,8 +115,11 @@ class CommandLogListView(AdminUserRequiredMixin, ListView): def get_context_data(self, **kwargs): context = { - 'app': 'Audits', - 'action': 'Command log list' + 'app': _('Audits'), + 'action': _('Command log list'), + 'user_list': User.objects.all(), + 'asset_list': Asset.objects.all(), + 'system_user_list': SystemUser.objects.all(), } kwargs.update(context) return super(CommandLogListView, self).get_context_data(**kwargs) diff --git a/apps/perms/templates/perms/asset_permission_create_update.html b/apps/perms/templates/perms/asset_permission_create_update.html index 15325f6f1..8d7c10924 100644 --- a/apps/perms/templates/perms/asset_permission_create_update.html +++ b/apps/perms/templates/perms/asset_permission_create_update.html @@ -76,7 +76,7 @@ {% endblock %} {% block custom_foot_js %} - + + +
Username IP System userProxy log Datetime Output
{{ command.command_no }}{{ command.id }} {{ command.command }} {{ command.proxy_log.username }} {{ command.proxy_log.ip }} {{ command.proxy_log.system_user }}{{ command.proxy_log.id}} {{ command.datetime }} {{ command.output_decode |safe }}
{% trans 'ID' %} {{ proxy_log.username }} {{ proxy_log.ip }}{{ proxy_log.system_user.name }}{{ proxy_log.command.count }}{{ proxy_log.system_user }}{{ proxy_log.commands.all|length}} {% if proxy_log.was_failed %} @@ -33,25 +82,33 @@ {% if proxy_log.is_finished %} - - {% else %} + {% else %} + {% endif %} {{ proxy_log.date_start }}{{ proxy_log.date_finished }}{{ proxy_log.date_finished|timeuntil:proxy_log.date_start }}