mirror of https://github.com/jumpserver/jumpserver
[Update] 添加审计模块
parent
1d7ba3e204
commit
37c0062fae
|
@ -0,0 +1,3 @@
|
|||
from django.contrib import admin
|
||||
|
||||
# Register your models here.
|
|
@ -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,)
|
|
@ -0,0 +1,5 @@
|
|||
from django.apps import AppConfig
|
||||
|
||||
|
||||
class AuditsConfig(AppConfig):
|
||||
name = 'audits'
|
|
@ -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)
|
|
@ -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__'
|
|
@ -0,0 +1,135 @@
|
|||
{% extends '_base_list.html' %}
|
||||
{% load i18n %}
|
||||
{% load static %}
|
||||
{% load terminal_tags %}
|
||||
{% load common_tags %}
|
||||
{% block custom_head_css_js %}
|
||||
<link href="{% static 'css/plugins/datepicker/datepicker3.css' %}" rel="stylesheet">
|
||||
<link href="{% static 'css/plugins/select2/select2.min.css' %}" rel="stylesheet">
|
||||
<script src="{% static 'js/plugins/select2/select2.full.min.js' %}"></script>
|
||||
<style>
|
||||
#search_btn {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
</style>
|
||||
{% endblock %}
|
||||
|
||||
{% block content_left_head %}
|
||||
{% endblock %}
|
||||
|
||||
|
||||
{% block table_search %}
|
||||
<form id="search_form" method="get" action="" class="pull-right form-inline">
|
||||
<div class="form-group" id="date">
|
||||
<div class="input-daterange input-group" id="datepicker">
|
||||
<span class="input-group-addon"><i class="fa fa-calendar"></i></span>
|
||||
<input type="text" class="input-sm form-control" style="width: 100px;" name="date_from" value="{{ date_from|date:'Y-m-d' }}">
|
||||
<span class="input-group-addon">to</span>
|
||||
<input type="text" class="input-sm form-control" style="width: 100px;" name="date_to" value="{{ date_to|date:'Y-m-d' }}">
|
||||
</div>
|
||||
</div>
|
||||
<div class="input-group">
|
||||
<select class="select2 form-control" name="user">
|
||||
<option value="">{% trans 'User' %}</option>
|
||||
{% for u in user_list %}
|
||||
<option value="{{ u }}" {% if u == user %} selected {% endif %}>{{ u }}</option>
|
||||
{% endfor %}
|
||||
</select>
|
||||
</div>
|
||||
<div class="input-group">
|
||||
<select class="select2 form-control" name="asset">
|
||||
<option value="">{% trans 'Asset' %}</option>
|
||||
{% for a in asset_list %}
|
||||
<option value="{{ a }}" {% if a == asset %} selected {% endif %}>{{ a }}</option>
|
||||
{% endfor %}
|
||||
</select>
|
||||
</div>
|
||||
<div class="input-group">
|
||||
<select class="select2 form-control" name="system_user">
|
||||
<option value="">{% trans 'System user' %}</option>
|
||||
{% for su in system_user_list %}
|
||||
<option value="{{ su }}" {% if su == system_user %} selected {% endif %}>{{ su }}</option>
|
||||
{% endfor %}
|
||||
</select>
|
||||
</div>
|
||||
<div class="input-group">
|
||||
<input type="text" class="form-control input-sm" name="filename" placeholder="{% trans 'Filename' %}" value="{{ filename }}">
|
||||
</div>
|
||||
<div class="input-group">
|
||||
<div class="input-group-btn">
|
||||
<button id='search_btn' type="submit" class="btn btn-sm btn-primary">
|
||||
搜索
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
{% endblock %}
|
||||
|
||||
{% block table_head %}
|
||||
<th class="text-center"></th>
|
||||
{# <th class="text-center">{% trans 'ID' %}</th>#}
|
||||
<th class="text-center">{% trans 'User' %}</th>
|
||||
<th class="text-center">{% trans 'Asset' %}</th>
|
||||
<th class="text-center">{% trans 'System user' %}</th>
|
||||
<th class="text-center">{% trans 'Remote addr' %}</th>
|
||||
<th class="text-center">{% trans 'Operate' %}</th>
|
||||
<th class="text-center">{% trans 'Filename' %}</th>
|
||||
<th class="text-center">{% trans 'Success' %}</th>
|
||||
<th class="text-center">{% trans 'Date start' %}</th>
|
||||
{# <th class="text-center">{% trans 'Action' %}</th>#}
|
||||
{% endblock %}
|
||||
|
||||
{% block table_body %}
|
||||
{% for object in object_list %}
|
||||
<tr class="gradeX">
|
||||
<td class="text-center"><input type="checkbox" value="{{ object.id }}"></td>
|
||||
{# <td class="text-center">#}
|
||||
{# <a href="{% url 'terminal:object-detail' pk=object.id %}">{{ forloop.counter }}</a>#}
|
||||
{# </td>#}
|
||||
<td class="text-center">{{ object.user }}</td>
|
||||
<td class="text-center">{{ object.asset }}</td>
|
||||
<td class="text-center">{{ object.system_user }}</td>
|
||||
<td class="text-center">{{ object.remote_addr|default:"" }}</td>
|
||||
<td class="text-center">{{ object.operate }}</td>
|
||||
<td class="text-center">{{ object.filename }}</td>
|
||||
<td class="text-center">
|
||||
{% if object.is_success %}
|
||||
<i class="fa fa-check text-navy"></i>
|
||||
{% else %}
|
||||
<i class="fa fa-times text-danger"></i>
|
||||
{% endif %}
|
||||
</td>
|
||||
<td class="text-center">{{ object.date_start }}</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
{% endblock %}
|
||||
|
||||
{% block content_bottom_left %}
|
||||
{% endblock %}
|
||||
|
||||
{% block custom_foot_js %}
|
||||
<script src="{% static 'js/plugins/datepicker/bootstrap-datepicker.js' %}"></script>
|
||||
<script>
|
||||
$(document).ready(function() {
|
||||
$('table').DataTable({
|
||||
"searching": false,
|
||||
"paging": false,
|
||||
"bInfo" : false,
|
||||
"order": []
|
||||
});
|
||||
$('.select2').select2({
|
||||
dropdownAutoWidth: true,
|
||||
width: "auto"
|
||||
});
|
||||
$('.input-daterange.input-group').datepicker({
|
||||
format: "yyyy-mm-dd",
|
||||
todayBtn: "linked",
|
||||
keyboardNavigation: false,
|
||||
forceParse: false,
|
||||
calendarWeeks: true,
|
||||
autoclose: true
|
||||
});
|
||||
})
|
||||
</script>
|
||||
{% endblock %}
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
from django.test import TestCase
|
||||
|
||||
# Create your tests here.
|
|
@ -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<pk>[0-9a-zA-Z\-]{36})/log/$', api.CeleryTaskLogApi.as_view(), name='celery-task-log'),
|
||||
]
|
||||
|
||||
urlpatterns += router.urls
|
|
@ -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'),
|
||||
]
|
|
@ -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)
|
Binary file not shown.
|
@ -8,7 +8,7 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: Jumpserver 0.3.3\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2018-04-02 15:49+0800\n"
|
||||
"POT-Creation-Date: 2018-04-06 10:24+0800\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: ibuler <ibuler@qq.com>\n"
|
||||
"Language-Team: Jumpserver team<ibuler@qq.com>\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 "任务已下发,查看左侧资产状态"
|
||||
|
|
|
@ -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',
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -59,6 +59,14 @@
|
|||
<li id="task"><a href="{% url 'ops:task-list' %}">{% trans 'Task list' %}</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li id="audits">
|
||||
<a>
|
||||
<i class="fa fa-coffee" style="width: 14px"></i> <span class="nav-label">{% trans 'Audits' %}</span><span class="fa arrow"></span>
|
||||
</a>
|
||||
<ul class="nav nav-second-level">
|
||||
<li id="task"><a href="{% url 'audits:ftp-log-list' %}">{% trans 'FTP log' %}</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
{#<li id="">#}
|
||||
{# <a href="#">#}
|
||||
{# <i class="fa fa-download"></i> <span class="nav-label">{% trans 'File' %}</span><span class="fa arrow"></span>#}
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
Loading…
Reference in New Issue