From 8504c3d2fd0ecb491e007d2dce912f665d5b0ad7 Mon Sep 17 00:00:00 2001 From: BaiJiangjie Date: Wed, 4 Apr 2018 19:38:32 +0800 Subject: [PATCH 1/4] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E8=B5=84=E4=BA=A7?= =?UTF-8?q?=E5=88=97=E8=A1=A8=E5=AF=BC=E5=87=BA=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/assets/templates/assets/asset_list.html | 9 ++++++--- apps/assets/views/asset.py | 8 ++++++++ 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/apps/assets/templates/assets/asset_list.html b/apps/assets/templates/assets/asset_list.html index 25e206c0c..d849d0748 100644 --- a/apps/assets/templates/assets/asset_list.html +++ b/apps/assets/templates/assets/asset_list.html @@ -182,7 +182,6 @@ function initTable() { return asset_table } - function addTreeNode() { hideRMenu(); var parentNode = zTree.getSelectedNodes()[0]; @@ -238,7 +237,6 @@ function editTreeNode() { zTree.editName(current_node); } - function OnRightClick(event, treeId, treeNode) { if (!treeNode && event.target.tagName.toLowerCase() !== "button" && $(event.target).parents("a").length === 0) { zTree.cancelSelectedNode(); @@ -432,6 +430,11 @@ $(document).ready(function(){ .on('click', '.btn_export', function () { var $data_table = $('#asset_list_table').DataTable(); var rows = $data_table.rows('.selected').data(); + var nodes = zTree.getSelectedNodes(); + var current_node; + if (nodes && nodes.length === 1) { + current_node = nodes[0]; + } var assets = []; $.each(rows, function (index, obj) { assets.push(obj.id) @@ -439,7 +442,7 @@ $(document).ready(function(){ $.ajax({ url: "{% url "assets:asset-export" %}", method: 'POST', - data: JSON.stringify({assets_id: assets}), + data: JSON.stringify({assets_id: assets, node_id: current_node.id}), dataType: "json", success: function (data, textStatus) { window.open(data.redirect) diff --git a/apps/assets/views/asset.py b/apps/assets/views/asset.py index 45254c3a4..953f3c8ac 100644 --- a/apps/assets/views/asset.py +++ b/apps/assets/views/asset.py @@ -233,8 +233,16 @@ class AssetExportView(View): def post(self, request, *args, **kwargs): try: assets_id = json.loads(request.body).get('assets_id', []) + assets_node_id = json.loads(request.body).get('node_id', None) except ValueError: return HttpResponse('Json object not valid', status=400) + + if not assets_id and assets_node_id: + assets_node = get_object_or_none(Node, id=assets_node_id) + assets = assets_node.get_all_assets() + for asset in assets: + assets_id.append(asset.id) + spm = uuid.uuid4().hex cache.set(spm, assets_id, 300) url = reverse_lazy('assets:asset-export') + '?spm=%s' % spm From 37c0062fae2ab4fc58f344d7a24c626dec5dfdc7 Mon Sep 17 00:00:00 2001 From: ibuler Date: Fri, 6 Apr 2018 11:27:52 +0800 Subject: [PATCH 2/4] =?UTF-8?q?[Update]=20=E6=B7=BB=E5=8A=A0=E5=AE=A1?= =?UTF-8?q?=E8=AE=A1=E6=A8=A1=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/audits/__init__.py | 0 apps/audits/admin.py | 3 + apps/audits/api.py | 14 ++ apps/audits/apps.py | 5 + apps/audits/models.py | 16 +++ apps/audits/serializers.py | 13 ++ .../audits/templates/audits/ftp_log_list.html | 135 ++++++++++++++++++ apps/audits/tests.py | 3 + apps/audits/urls/__init__.py | 0 apps/audits/urls/api_urls.py | 18 +++ apps/audits/urls/view_urls.py | 14 ++ apps/audits/views.py | 51 +++++++ apps/i18n/zh/LC_MESSAGES/django.mo | Bin 30439 -> 30554 bytes apps/i18n/zh/LC_MESSAGES/django.po | 123 +++++++++------- apps/jumpserver/settings.py | 1 + apps/jumpserver/urls.py | 2 + apps/templates/_nav.html | 8 ++ apps/terminal/views/command.py | 2 +- 18 files changed, 356 insertions(+), 52 deletions(-) create mode 100644 apps/audits/__init__.py create mode 100644 apps/audits/admin.py create mode 100644 apps/audits/api.py create mode 100644 apps/audits/apps.py create mode 100644 apps/audits/models.py create mode 100644 apps/audits/serializers.py create mode 100644 apps/audits/templates/audits/ftp_log_list.html create mode 100644 apps/audits/tests.py create mode 100644 apps/audits/urls/__init__.py create mode 100644 apps/audits/urls/api_urls.py create mode 100644 apps/audits/urls/view_urls.py create mode 100644 apps/audits/views.py diff --git a/apps/audits/__init__.py b/apps/audits/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/apps/audits/admin.py b/apps/audits/admin.py new file mode 100644 index 000000000..8c38f3f3d --- /dev/null +++ b/apps/audits/admin.py @@ -0,0 +1,3 @@ +from django.contrib import admin + +# Register your models here. diff --git a/apps/audits/api.py b/apps/audits/api.py new file mode 100644 index 000000000..0d583d246 --- /dev/null +++ b/apps/audits/api.py @@ -0,0 +1,14 @@ +# -*- coding: utf-8 -*- +# + +from rest_framework import viewsets + +from common.permissions import IsSuperUserOrAppUser +from .models import FTPLog +from .serializers import FTPLogSerializer + + +class FTPLogViewSet(viewsets.ModelViewSet): + queryset = FTPLog.objects.all() + serializer_class = FTPLogSerializer + permission_classes = (IsSuperUserOrAppUser,) diff --git a/apps/audits/apps.py b/apps/audits/apps.py new file mode 100644 index 000000000..f049f49bd --- /dev/null +++ b/apps/audits/apps.py @@ -0,0 +1,5 @@ +from django.apps import AppConfig + + +class AuditsConfig(AppConfig): + name = 'audits' diff --git a/apps/audits/models.py b/apps/audits/models.py new file mode 100644 index 000000000..667087e18 --- /dev/null +++ b/apps/audits/models.py @@ -0,0 +1,16 @@ +import uuid + +from django.db import models +from django.utils.translation import ugettext_lazy as _ + + +class FTPLog(models.Model): + id = models.UUIDField(default=uuid.uuid4, primary_key=True) + user = models.CharField(max_length=128, verbose_name=_('User')) + remote_addr = models.CharField(max_length=15, verbose_name=_("Remote addr"), blank=True, null=True) + asset = models.CharField(max_length=1024, verbose_name=_("Asset")) + system_user = models.CharField(max_length=128, verbose_name=_("System user")) + operate = models.CharField(max_length=16, verbose_name=_("Operate")) + filename = models.CharField(max_length=1024, verbose_name=_("Filename")) + is_success = models.BooleanField(default=True, verbose_name=_("Success")) + date_start = models.DateTimeField(auto_now_add=True) diff --git a/apps/audits/serializers.py b/apps/audits/serializers.py new file mode 100644 index 000000000..8aa0301b0 --- /dev/null +++ b/apps/audits/serializers.py @@ -0,0 +1,13 @@ +# -*- coding: utf-8 -*- +# + +from rest_framework import serializers + +from .models import FTPLog + + +class FTPLogSerializer(serializers.ModelSerializer): + + class Meta: + model = FTPLog + fields = '__all__' diff --git a/apps/audits/templates/audits/ftp_log_list.html b/apps/audits/templates/audits/ftp_log_list.html new file mode 100644 index 000000000..f5d4e5b7f --- /dev/null +++ b/apps/audits/templates/audits/ftp_log_list.html @@ -0,0 +1,135 @@ +{% extends '_base_list.html' %} +{% load i18n %} +{% load static %} +{% load terminal_tags %} +{% load common_tags %} +{% block custom_head_css_js %} + + + + +{% endblock %} + +{% block content_left_head %} +{% endblock %} + + +{% block table_search %} +
+
+
+ + + to + +
+
+
+ +
+
+ +
+
+ +
+
+ +
+
+
+ +
+
+
+{% endblock %} + +{% block table_head %} + +{# {% trans 'ID' %}#} + {% trans 'User' %} + {% trans 'Asset' %} + {% trans 'System user' %} + {% trans 'Remote addr' %} + {% trans 'Operate' %} + {% trans 'Filename' %} + {% trans 'Success' %} + {% trans 'Date start' %} +{# {% trans 'Action' %}#} +{% endblock %} + +{% block table_body %} + {% for object in object_list %} + + +{# #} +{# {{ forloop.counter }}#} +{# #} + {{ object.user }} + {{ object.asset }} + {{ object.system_user }} + {{ object.remote_addr|default:"" }} + {{ object.operate }} + {{ object.filename }} + + {% if object.is_success %} + + {% else %} + + {% endif %} + + {{ object.date_start }} + + {% endfor %} +{% endblock %} + +{% block content_bottom_left %} +{% endblock %} + +{% block custom_foot_js %} + + +{% endblock %} + diff --git a/apps/audits/tests.py b/apps/audits/tests.py new file mode 100644 index 000000000..7ce503c2d --- /dev/null +++ b/apps/audits/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/apps/audits/urls/__init__.py b/apps/audits/urls/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/apps/audits/urls/api_urls.py b/apps/audits/urls/api_urls.py new file mode 100644 index 000000000..f90057ca2 --- /dev/null +++ b/apps/audits/urls/api_urls.py @@ -0,0 +1,18 @@ +# ~*~ coding: utf-8 ~*~ +from __future__ import unicode_literals + +from django.conf.urls import url +from rest_framework.routers import DefaultRouter +from .. import api + + +app_name = "audits" + +router = DefaultRouter() +router.register(r'v1/ftp-log', api.FTPLogViewSet, 'ftp-log') + +urlpatterns = [ +# url(r'^v1/celery/task/(?P[0-9a-zA-Z\-]{36})/log/$', api.CeleryTaskLogApi.as_view(), name='celery-task-log'), +] + +urlpatterns += router.urls diff --git a/apps/audits/urls/view_urls.py b/apps/audits/urls/view_urls.py new file mode 100644 index 000000000..76afbef84 --- /dev/null +++ b/apps/audits/urls/view_urls.py @@ -0,0 +1,14 @@ +# ~*~ coding: utf-8 ~*~ +from __future__ import unicode_literals + + +from django.conf.urls import url +from .. import views + +__all__ = ["urlpatterns"] + +app_name = "audits" + +urlpatterns = [ + url(r'^ftp-log/$', views.FTPLogListView.as_view(), name='ftp-log-list'), +] diff --git a/apps/audits/views.py b/apps/audits/views.py new file mode 100644 index 000000000..072d13f60 --- /dev/null +++ b/apps/audits/views.py @@ -0,0 +1,51 @@ +from django.conf import settings +from django.views.generic import ListView + +from common.mixins import AdminUserRequiredMixin, DatetimeSearchMixin + +from .models import FTPLog + + +class FTPLogListView(AdminUserRequiredMixin, DatetimeSearchMixin, ListView): + model = FTPLog + template_name = 'audits/ftp_log_list.html' + paginate_by = settings.DISPLAY_PER_PAGE + user = asset = system_user = filename = '' + date_from = date_to = None + + def get_queryset(self): + self.queryset = super().get_queryset() + self.user = self.request.GET.get('user') + self.asset = self.request.GET.get('asset') + self.system_user = self.request.GET.get('system_user') + self.filename = self.request.GET.get('filename', '') + + filter_kwargs = dict() + filter_kwargs['date_start__gt'] = self.date_from + filter_kwargs['date_start__lt'] = self.date_to + if self.user: + filter_kwargs['user'] = self.user + if self.asset: + filter_kwargs['asset'] = self.asset + if self.system_user: + filter_kwargs['system_user'] = self.system_user + if self.filename: + filter_kwargs['filename__contains'] = self.filename + if filter_kwargs: + self.queryset = self.queryset.filter(**filter_kwargs).order_by('-date_start') + return self.queryset + + def get_context_data(self, **kwargs): + context = { + 'user_list': FTPLog.objects.values_list('user', flat=True).distinct(), + 'asset_list': FTPLog.objects.values_list('asset', flat=True).distinct(), + 'system_user_list': FTPLog.objects.values_list('system_user', flat=True).distinct(), + 'date_from': self.date_from, + 'date_to': self.date_to, + 'user': self.user, + 'asset': self.asset, + 'system_user': self.system_user, + 'filename': self.filename, + } + kwargs.update(context) + return super().get_context_data(**kwargs) diff --git a/apps/i18n/zh/LC_MESSAGES/django.mo b/apps/i18n/zh/LC_MESSAGES/django.mo index 033a23bea7623cacf4710e00aebdd2095e378a40..57d3d9d926104fc2ec24685a0795b0bbca8eca1d 100644 GIT binary patch delta 10923 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\n" "Language-Team: Jumpserver team\n" @@ -21,11 +21,11 @@ msgstr "" msgid "New node {}" msgstr "新节点 {}" -#: assets/api/node.py:134 +#: assets/api/node.py:133 msgid "更新节点资产硬件信息: {}" msgstr "" -#: assets/api/node.py:147 +#: assets/api/node.py:146 msgid "测试节点下资产是否可连接: {}" msgstr "" @@ -100,7 +100,9 @@ msgstr "选择节点" #: assets/templates/assets/domain_detail.html:60 #: assets/templates/assets/domain_list.html:15 #: assets/templates/assets/label_list.html:16 -#: assets/templates/assets/system_user_list.html:29 perms/models.py:17 +#: assets/templates/assets/system_user_list.html:29 audits/models.py:11 +#: audits/templates/audits/ftp_log_list.html:41 +#: audits/templates/audits/ftp_log_list.html:72 perms/models.py:17 #: terminal/backends/command/models.py:11 terminal/models.py:123 #: terminal/templates/terminal/command_list.html:40 #: terminal/templates/terminal/command_list.html:73 @@ -122,7 +124,7 @@ msgstr "资产" #: assets/templates/assets/system_user_list.html:26 common/models.py:26 #: common/templates/common/terminal_setting.html:67 #: common/templates/common/terminal_setting.html:85 ops/models/adhoc.py:36 -#: ops/templates/ops/task_detail.html:59 ops/templates/ops/task_list.html:34 +#: ops/templates/ops/task_detail.html:59 ops/templates/ops/task_list.html:35 #: perms/models.py:14 perms/templates/perms/asset_permission_detail.html:62 #: perms/templates/perms/asset_permission_user.html:54 terminal/models.py:16 #: terminal/models.py:149 terminal/templates/terminal/terminal_detail.html:43 @@ -402,7 +404,9 @@ msgstr "资产组" msgid "Default asset group" msgstr "默认资产组" -#: assets/models/label.py:14 perms/models.py:15 +#: assets/models/label.py:14 audits/models.py:9 +#: audits/templates/audits/ftp_log_list.html:33 +#: audits/templates/audits/ftp_log_list.html:71 perms/models.py:15 #: terminal/backends/command/models.py:10 terminal/models.py:122 #: terminal/templates/terminal/command_list.html:32 #: terminal/templates/terminal/command_list.html:72 @@ -445,8 +449,11 @@ msgstr "Sudo" msgid "Shell" msgstr "Shell" -#: assets/models/user.py:150 perms/forms.py:25 perms/models.py:19 -#: perms/models.py:76 perms/templates/perms/asset_permission_detail.html:136 +#: assets/models/user.py:150 audits/models.py:12 +#: audits/templates/audits/ftp_log_list.html:49 +#: audits/templates/audits/ftp_log_list.html:73 perms/forms.py:25 +#: perms/models.py:19 perms/models.py:76 +#: perms/templates/perms/asset_permission_detail.html:136 #: perms/templates/perms/asset_permission_list.html:69 templates/_nav.html:26 #: terminal/backends/command/models.py:12 terminal/models.py:124 #: terminal/templates/terminal/command_list.html:48 @@ -493,7 +500,7 @@ msgstr "" msgid "推送系统用户到节点资产: {} => {}" msgstr "" -#: assets/tasks.py:432 +#: assets/tasks.py:433 msgid "推送节点系统用户到新加入资产中: {}" msgstr "" @@ -586,7 +593,6 @@ msgstr "激活中" #: assets/templates/assets/_asset_list_modal.html:24 #: assets/templates/assets/admin_user_assets.html:54 #: assets/templates/assets/admin_user_list.html:26 -#: assets/templates/assets/asset_detail.html:359 #: assets/templates/assets/asset_list.html:90 #: assets/templates/assets/system_user_asset.html:52 #: assets/templates/assets/system_user_list.html:30 @@ -603,7 +609,7 @@ msgstr "可连接" #: assets/templates/assets/label_list.html:17 #: assets/templates/assets/system_user_list.html:34 #: ops/templates/ops/adhoc_history.html:59 ops/templates/ops/task_adhoc.html:64 -#: ops/templates/ops/task_history.html:65 ops/templates/ops/task_list.html:41 +#: ops/templates/ops/task_history.html:65 ops/templates/ops/task_list.html:42 #: perms/templates/perms/asset_permission_list.html:72 #: terminal/templates/terminal/session_list.html:80 #: terminal/templates/terminal/terminal_list.html:36 @@ -672,7 +678,7 @@ msgstr "提交" #: assets/templates/assets/domain_detail.html:24 #: assets/templates/assets/domain_detail.html:103 #: assets/templates/assets/domain_gateway_list.html:90 -#: assets/templates/assets/domain_list.html:38 +#: assets/templates/assets/domain_list.html:42 #: assets/templates/assets/label_list.html:38 #: assets/templates/assets/system_user_detail.html:26 #: assets/templates/assets/system_user_list.html:88 @@ -697,11 +703,11 @@ msgstr "更新" #: assets/templates/assets/domain_detail.html:28 #: assets/templates/assets/domain_detail.html:104 #: assets/templates/assets/domain_gateway_list.html:91 -#: assets/templates/assets/domain_list.html:39 +#: assets/templates/assets/domain_list.html:43 #: assets/templates/assets/label_list.html:39 #: assets/templates/assets/system_user_detail.html:30 #: assets/templates/assets/system_user_list.html:89 -#: ops/templates/ops/task_list.html:71 +#: ops/templates/ops/task_list.html:72 #: perms/templates/perms/asset_permission_detail.html:34 #: perms/templates/perms/asset_permission_list.html:122 #: terminal/templates/terminal/terminal_list.html:73 @@ -812,17 +818,13 @@ msgstr "测试可连接性" msgid "Test" msgstr "测试" -#: assets/templates/assets/admin_user_assets.html:131 -msgid "Task has been send, seen left asset status" -msgstr "任务已下发,查看左侧资产状态" - #: assets/templates/assets/admin_user_detail.html:83 msgid "Replace node assets admin user with this" msgstr "替换资产的管理员" #: assets/templates/assets/admin_user_detail.html:100 #: assets/templates/assets/asset_detail.html:200 -#: assets/templates/assets/asset_list.html:594 +#: assets/templates/assets/asset_list.html:600 #: assets/templates/assets/system_user_detail.html:183 #: assets/templates/assets/system_user_list.html:138 templates/_modal.html:16 #: terminal/templates/terminal/session_detail.html:108 @@ -899,7 +901,7 @@ msgstr "更新硬件信息" msgid "Refresh" msgstr "刷新" -#: assets/templates/assets/asset_detail.html:301 +#: assets/templates/assets/asset_detail.html:300 #: users/templates/users/user_detail.html:273 msgid "Update successfully!" msgstr "更新成功" @@ -955,7 +957,7 @@ msgstr "创建节点失败" msgid "Have child node, cancel" msgstr "存在子节点,不能删除" -#: assets/templates/assets/asset_list.html:589 +#: assets/templates/assets/asset_list.html:595 #: assets/templates/assets/system_user_list.html:133 #: users/templates/users/user_detail.html:334 #: users/templates/users/user_detail.html:359 @@ -964,20 +966,20 @@ msgstr "存在子节点,不能删除" msgid "Are you sure?" msgstr "你确认吗?" -#: assets/templates/assets/asset_list.html:590 +#: assets/templates/assets/asset_list.html:596 msgid "This will delete the selected assets !!!" msgstr "删除选择资产" -#: assets/templates/assets/asset_list.html:598 +#: assets/templates/assets/asset_list.html:604 msgid "Asset Deleted." msgstr "已被删除" -#: assets/templates/assets/asset_list.html:599 -#: assets/templates/assets/asset_list.html:604 +#: assets/templates/assets/asset_list.html:605 +#: assets/templates/assets/asset_list.html:610 msgid "Asset Delete" msgstr "删除" -#: assets/templates/assets/asset_list.html:603 +#: assets/templates/assets/asset_list.html:609 msgid "Asset Deleting failed." msgstr "删除失败" @@ -1045,12 +1047,10 @@ msgid "Test assets connective" msgstr "测试资产可连接性" #: assets/templates/assets/system_user_asset.html:147 -#: assets/templates/assets/system_user_detail.html:303 msgid "Task has been send, Go to ops task list seen result" msgstr "任务已下发,查看ops任务列表" #: assets/templates/assets/system_user_asset.html:159 -#: assets/templates/assets/system_user_detail.html:315 msgid "Task has been send, seen left assets status" msgstr "任务已下发,查看左侧资产状态" @@ -1120,7 +1120,7 @@ msgstr "批量更新资产" msgid "Update asset" msgstr "更新资产" -#: assets/views/asset.py:299 +#: assets/views/asset.py:300 msgid "already exists" msgstr "已经存在" @@ -1172,6 +1172,28 @@ msgstr "资产管理" msgid "System user asset" msgstr "系统用户集群资产" +#: audits/models.py:10 audits/templates/audits/ftp_log_list.html:74 +#: terminal/models.py:126 terminal/templates/terminal/session_list.html:74 +#: terminal/templates/terminal/terminal_detail.html:47 +msgid "Remote addr" +msgstr "远端地址" + +#: audits/models.py:13 audits/templates/audits/ftp_log_list.html:75 +msgid "Operate" +msgstr "操作" + +#: audits/models.py:14 audits/templates/audits/ftp_log_list.html:76 +msgid "Filename" +msgstr "文件名" + +#: audits/templates/audits/ftp_log_list.html:77 +#: ops/templates/ops/adhoc_history.html:52 +#: ops/templates/ops/adhoc_history_detail.html:61 +#: ops/templates/ops/task_history.html:58 terminal/models.py:132 +#: terminal/templates/terminal/session_list.html:77 +msgid "Date start" +msgstr "开始日期" + #: common/api.py:18 msgid "Test mail sent to {}, please check" msgstr "邮件已经发送{}, 请检查" @@ -1381,7 +1403,7 @@ msgid "Type" msgstr "类型" #: common/views.py:21 common/views.py:47 common/views.py:73 common/views.py:103 -#: templates/_nav.html:73 +#: templates/_nav.html:81 msgid "Settings" msgstr "系统设置" @@ -1423,7 +1445,7 @@ msgid "Options" msgstr "选项" #: ops/models/adhoc.py:157 ops/templates/ops/adhoc_detail.html:53 -#: ops/templates/ops/task_adhoc.html:59 ops/templates/ops/task_list.html:37 +#: ops/templates/ops/task_adhoc.html:59 ops/templates/ops/task_list.html:38 msgid "Hosts" msgstr "主机" @@ -1454,7 +1476,7 @@ msgid "End time" msgstr "完成时间" #: ops/models/adhoc.py:325 ops/templates/ops/adhoc_history.html:57 -#: ops/templates/ops/task_history.html:63 ops/templates/ops/task_list.html:40 +#: ops/templates/ops/task_history.html:63 ops/templates/ops/task_list.html:41 msgid "Time" msgstr "时间" @@ -1496,7 +1518,7 @@ msgstr "执行历史" msgid "ID" msgstr "ID" -#: ops/templates/ops/adhoc_detail.html:94 ops/templates/ops/task_list.html:35 +#: ops/templates/ops/adhoc_detail.html:94 ops/templates/ops/task_list.html:36 msgid "Run times" msgstr "执行次数" @@ -1538,13 +1560,6 @@ msgstr "最后运行成功主机" msgid "History of " msgstr "执行历史" -#: ops/templates/ops/adhoc_history.html:52 -#: ops/templates/ops/adhoc_history_detail.html:61 -#: ops/templates/ops/task_history.html:58 terminal/models.py:132 -#: terminal/templates/terminal/session_list.html:77 -msgid "Date start" -msgstr "开始日期" - #: ops/templates/ops/adhoc_history.html:53 #: ops/templates/ops/task_history.html:59 msgid "F/S/T" @@ -1628,7 +1643,7 @@ msgstr "最新版本" msgid "Contents" msgstr "内容" -#: ops/templates/ops/task_list.html:20 ops/templates/ops/task_list.html:25 +#: ops/templates/ops/task_list.html:21 ops/templates/ops/task_list.html:26 #: templates/_base_list.html:43 templates/_header_bar.html:8 #: terminal/templates/terminal/command_list.html:60 #: users/templates/users/login_log_list.html:35 @@ -1636,24 +1651,24 @@ msgstr "内容" msgid "Search" msgstr "搜索" -#: ops/templates/ops/task_list.html:36 +#: ops/templates/ops/task_list.html:37 msgid "Versions" msgstr "版本" -#: ops/templates/ops/task_list.html:38 +#: ops/templates/ops/task_list.html:39 msgid "Success" msgstr "成功" -#: ops/templates/ops/task_list.html:39 +#: ops/templates/ops/task_list.html:40 #: users/templates/users/login_log_list.html:54 msgid "Date" msgstr "日期" -#: ops/templates/ops/task_list.html:70 +#: ops/templates/ops/task_list.html:71 msgid "Run" msgstr "执行" -#: ops/templates/ops/task_list.html:124 +#: ops/templates/ops/task_list.html:125 msgid "Task start: " msgstr "任务开始: " @@ -1910,6 +1925,14 @@ msgstr "终端管理" msgid "Job Center" msgstr "作业中心" +#: templates/_nav.html:64 +msgid "Audits" +msgstr "审计" + +#: templates/_nav.html:67 +msgid "FTP log" +msgstr "FTP日志" + #: templates/captcha/image.html:3 msgid "Play CAPTCHA as audio file" msgstr "语言播放验证码" @@ -1981,11 +2004,6 @@ msgstr "线程数" msgid "Boot Time" msgstr "运行时间" -#: terminal/models.py:126 terminal/templates/terminal/session_list.html:74 -#: terminal/templates/terminal/terminal_detail.html:47 -msgid "Remote addr" -msgstr "远端地址" - #: terminal/models.py:128 terminal/templates/terminal/session_list.html:102 msgid "Replay" msgstr "回放" @@ -2787,3 +2805,6 @@ msgstr "密码更新" #: users/views/user.py:375 msgid "Public key update" msgstr "密钥更新" + +#~ msgid "Task has been send, seen left asset status" +#~ msgstr "任务已下发,查看左侧资产状态" diff --git a/apps/jumpserver/settings.py b/apps/jumpserver/settings.py index b19ac0350..0afcd4e72 100644 --- a/apps/jumpserver/settings.py +++ b/apps/jumpserver/settings.py @@ -62,6 +62,7 @@ INSTALLED_APPS = [ 'ops.apps.OpsConfig', 'common.apps.CommonConfig', 'terminal.apps.TerminalConfig', + 'audits.apps.AuditsConfig', 'rest_framework', 'rest_framework_swagger', 'django_filters', diff --git a/apps/jumpserver/urls.py b/apps/jumpserver/urls.py index fe8a4417a..ced4797d5 100644 --- a/apps/jumpserver/urls.py +++ b/apps/jumpserver/urls.py @@ -19,6 +19,7 @@ urlpatterns = [ url(r'^perms/', include('perms.urls.views_urls', namespace='perms')), url(r'^terminal/', include('terminal.urls.views_urls', namespace='terminal')), url(r'^ops/', include('ops.urls.view_urls', namespace='ops')), + url(r'^audits/', include('audits.urls.view_urls', namespace='audits')), url(r'^settings/', include('common.urls.view_urls', namespace='settings')), url(r'^common/', include('common.urls.view_urls', namespace='common')), @@ -28,6 +29,7 @@ urlpatterns = [ url(r'^api/perms/', include('perms.urls.api_urls', namespace='api-perms')), url(r'^api/terminal/', include('terminal.urls.api_urls', namespace='api-terminal')), url(r'^api/ops/', include('ops.urls.api_urls', namespace='api-ops')), + url(r'^api/audits/', include('audits.urls.api_urls', namespace='api-audits')), url(r'^api/common/', include('common.urls.api_urls', namespace='api-common')), # External apps url diff --git a/apps/templates/_nav.html b/apps/templates/_nav.html index 7b277a251..778578eb2 100644 --- a/apps/templates/_nav.html +++ b/apps/templates/_nav.html @@ -59,6 +59,14 @@
  • {% trans 'Task list' %}
  • +
  • + + {% trans 'Audits' %} + + +
  • {#
  • #} {# #} {# {% trans 'File' %}#} diff --git a/apps/terminal/views/command.py b/apps/terminal/views/command.py index 0af0b5bfd..a77bea37f 100644 --- a/apps/terminal/views/command.py +++ b/apps/terminal/views/command.py @@ -38,7 +38,7 @@ class CommandListView(DatetimeSearchMixin, AdminUserRequiredMixin, ListView): if self.system_user: filter_kwargs['system_user'] = self.system_user if self.command: - filter_kwargs['input'] = self.command + filter_kwargs['input__contains'] = self.command queryset = common_storage.filter(**filter_kwargs) return queryset From 1c0d783eecf96a894d510f6953d80c671fa7d940 Mon Sep 17 00:00:00 2001 From: ibuler Date: Fri, 6 Apr 2018 11:36:47 +0800 Subject: [PATCH 3/4] =?UTF-8?q?[update]=20=E6=B7=BB=E5=8A=A0Migrations?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/audits/migrations/__init__.py | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 apps/audits/migrations/__init__.py diff --git a/apps/audits/migrations/__init__.py b/apps/audits/migrations/__init__.py new file mode 100644 index 000000000..e69de29bb From cb8e59edf20c2d5d1edc216987567433191f7cf0 Mon Sep 17 00:00:00 2001 From: ibuler Date: Fri, 6 Apr 2018 13:23:15 +0800 Subject: [PATCH 4/4] =?UTF-8?q?[Update]=20=E4=BF=AE=E6=94=B9=E6=96=87?= =?UTF-8?q?=E6=A1=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/audits/views.py | 3 +++ apps/i18n/zh/LC_MESSAGES/django.mo | Bin 30554 -> 30560 bytes apps/i18n/zh/LC_MESSAGES/django.po | 2 +- apps/templates/_nav.html | 2 +- 4 files changed, 5 insertions(+), 2 deletions(-) diff --git a/apps/audits/views.py b/apps/audits/views.py index 072d13f60..f8e0a1dd3 100644 --- a/apps/audits/views.py +++ b/apps/audits/views.py @@ -1,5 +1,6 @@ from django.conf import settings from django.views.generic import ListView +from django.utils.translation import ugettext as _ from common.mixins import AdminUserRequiredMixin, DatetimeSearchMixin @@ -46,6 +47,8 @@ class FTPLogListView(AdminUserRequiredMixin, DatetimeSearchMixin, ListView): 'asset': self.asset, 'system_user': self.system_user, 'filename': self.filename, + "app": _("Audits"), + "action": _("FTP log"), } kwargs.update(context) return super().get_context_data(**kwargs) diff --git a/apps/i18n/zh/LC_MESSAGES/django.mo b/apps/i18n/zh/LC_MESSAGES/django.mo index 57d3d9d926104fc2ec24685a0795b0bbca8eca1d..61ef6ec21bb6059e9edbfaf75676af11deac619e 100644 GIT binary patch delta 3547 zcmXZedra3=7{~E1cnJ&xNu8I}G$#|3R&Hu&2BnsnTIret?^h5nh?vugpDD`?!WE;L zvovpP>b#|0oR?CknJ!s4mnjX?yp)CxQ9ZPfYNs2v+x zMB;)VSeY3FO|b$KaVskSJ$A;QJb%O9vG-By8fS(3TVM=v8&tkCs$MF#!3=DKnHY=X zvVus%Alr$2`!1@X4{WLPkj zsF!yMs-X>-fIA%@YA_N6l?+s{+7lNY-?Vp81s|Ypb;5+OU^~HwHLPzj9tU_H`+{CbfRMdP1HoR1JH0sVxLLHco zs=pAUu?Qm?EMt(0#dZ&-6JNF6Ck4SY;u)wyKcfyjD>M=uW}ruK3R~fI)WYcL;Q{eB1(kmp zo8lDnjN|pb6m2H(Fr@6AAO>kw3j1*pQMw%o2l9k9-BNA2I|xDuNY zSKBML&fZ5g5|bO=kv6&h``^Wh9=12Cfplzm=5`e7z=^0r1ss+|j_S2TtxrPTiB#t^P>*=HV=~6f3Fmv+bUO?mV?Gn(F$dMqLc18L8wr+$gP`25wcAh| z_BuXfD^cHfwdWt8uBb^~*hojzg`}W<0S90w9D(}E=3p0Gjy?7L?_{7~vKmyOdQ^dy zbHmP)ur+ZXd*8WsdnbxD$Jw)B1*tf&=3AO_&pKPB=XP^yzop=#bh=*WLoR2ziz1@MI67NUtdu!K_ WPOtZCdU?ghOW&>7wKDVI6aNE1xX7sh delta 3540 zcmXZee{|1P9LMpGt;S{Wu1va5zgkv$wGG2^X2pU>v7-jd++s$aE;w)zx2XNdl1#Y3DgsuvwzuJs5cApY{Su7AQjBP@kipYfW-Bq1_@eEU69oChd8k4^pbk9c_;-8R*5M%LZ#(Xj8}1u` zYUl;j&5h3G{a3-MBvi22zJtmycKos9Rj7^YQBShV9`bw@s?JaLysfkUqJD@P=Y{n< z=5hZ@bRnUQnWzJXd%+~erP|l8&Lbd#%_27TjCAW14T~>&xu3DNf8g) z+shT z{2+|M5st^8_T@O9i^;_0sCAoA53t?tv4=69?_W^GK%Lg0Hq@d%>%UPO8&C(wObcJf zmZ-QlYW?%5{VzH{&gOf*1XX7~>Osq#UyX@+|2Htud%oKf)u;o`*=wjPyJH(q4+|xs z8t94d>-kOvy#MOFCj)(32ctSHMipLUm)hm116J8BsQtSf zAICW2YJ0)f+B>L5q6)(sNi6i=|8`D1WqYC;=#M&ZkR5?KFdJ2<*!fcXk*z?j+vs=? zYW-2ir&0AU7W)0aN`l)BqKd*BD70l5OMW$K!zPT!?RKv{W>4FT_J(c10ql!?BXlUL zUU`H;JcA|pD6YUBxYqe9e1y0Lwc$5=$@8_SZ~r~ix&;2sQN32E^~tE4NOe8~^$}+| zj!br<7`1Sb{oHOt6+CE9U>D*u*bSp*g!5^(za5Irm>-P^n2Tzt#Lh?RMuLUmAXsWw z+Rdm9J00({$5HQhwde1mp6EZ%w|O&skj|)Iz`oc4hoRoG>G&ir#x%YETN&twrUq50 z9(5DVW`><7+`L>2ne^VjVI)Z5T(cDOGEwJsf1cc6XA^J8ao|C*TQ#B6L$T<&rw0Op>8O8PPjhKCZX~vwtFT6ZRqX9bJ(4DFs9)Q)Pbw*7g#~O8?|p_ P<**JTGb-1PKh*Ajx%0&X diff --git a/apps/i18n/zh/LC_MESSAGES/django.po b/apps/i18n/zh/LC_MESSAGES/django.po index e19a33c25..fc8255313 100644 --- a/apps/i18n/zh/LC_MESSAGES/django.po +++ b/apps/i18n/zh/LC_MESSAGES/django.po @@ -1927,7 +1927,7 @@ msgstr "作业中心" #: templates/_nav.html:64 msgid "Audits" -msgstr "审计" +msgstr "日志审计" #: templates/_nav.html:67 msgid "FTP log" diff --git a/apps/templates/_nav.html b/apps/templates/_nav.html index 778578eb2..409a46f15 100644 --- a/apps/templates/_nav.html +++ b/apps/templates/_nav.html @@ -64,7 +64,7 @@ {% trans 'Audits' %}
  • {#
  • #}