mirror of https://github.com/jumpserver/jumpserver
[Feature] 支持es存储
commit
17181db8a5
|
@ -78,9 +78,6 @@ class BasicSettingForm(BaseForm):
|
|||
max_length=1024, label=_("Email Subject Prefix"),
|
||||
initial="[Jumpserver] "
|
||||
)
|
||||
AUTH_LDAP = forms.BooleanField(
|
||||
label=_("Enable LDAP Auth"), initial=False, required=False
|
||||
)
|
||||
|
||||
|
||||
class EmailSettingForm(BaseForm):
|
||||
|
|
|
@ -28,8 +28,6 @@ class BasicSettingView(AdminUserRequiredMixin, TemplateView):
|
|||
form = self.form_class(request.POST)
|
||||
if form.is_valid():
|
||||
form.save()
|
||||
if "AUTH_LDAP" in form.cleaned_data:
|
||||
ldap_auth_enable.send(form.cleaned_data["AUTH_LDAP"])
|
||||
msg = _("Update setting successfully, please restart program")
|
||||
messages.success(request, msg)
|
||||
return redirect('settings:basic-setting')
|
||||
|
@ -82,6 +80,8 @@ class LDAPSettingView(AdminUserRequiredMixin, TemplateView):
|
|||
form = self.form_class(request.POST)
|
||||
if form.is_valid():
|
||||
form.save()
|
||||
if "AUTH_LDAP" in form.cleaned_data:
|
||||
ldap_auth_enable.send(form.cleaned_data["AUTH_LDAP"])
|
||||
msg = _("Update setting successfully, please restart program")
|
||||
messages.success(request, msg)
|
||||
return redirect('settings:ldap-setting')
|
||||
|
|
|
@ -391,6 +391,7 @@ TERMINAL_COMMAND_STORAGE = {
|
|||
# }
|
||||
}
|
||||
|
||||
|
||||
# Django bootstrap3 setting, more see http://django-bootstrap3.readthedocs.io/en/latest/settings.html
|
||||
BOOTSTRAP3 = {
|
||||
'horizontal_label_class': 'col-md-2',
|
||||
|
|
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-01-12 18:51+0800\n"
|
||||
"POT-Creation-Date: 2018-01-17 17:26+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"
|
||||
|
@ -129,7 +129,7 @@ msgid "Password or private key password"
|
|||
msgstr "密码或秘钥不合法"
|
||||
|
||||
#: assets/forms.py:201 assets/forms.py:262 assets/models/user.py:30
|
||||
#: common/forms.py:110 users/forms.py:16 users/forms.py:24
|
||||
#: common/forms.py:107 users/forms.py:16 users/forms.py:24
|
||||
#: users/templates/users/login.html:56
|
||||
#: users/templates/users/reset_password.html:52
|
||||
#: users/templates/users/user_create.html:11
|
||||
|
@ -661,7 +661,7 @@ msgstr "其它"
|
|||
#: assets/templates/assets/asset_group_create.html:16
|
||||
#: assets/templates/assets/asset_update.html:55
|
||||
#: assets/templates/assets/cluster_create_update.html:54
|
||||
#: common/templates/common/basic_setting.html:56
|
||||
#: common/templates/common/basic_setting.html:55
|
||||
#: common/templates/common/email_setting.html:56
|
||||
#: common/templates/common/ldap_setting.html:56
|
||||
#: perms/templates/perms/asset_permission_create_update.html:67
|
||||
|
@ -681,10 +681,10 @@ msgstr "重置"
|
|||
#: assets/templates/assets/asset_bulk_update.html:24
|
||||
#: assets/templates/assets/asset_create.html:41
|
||||
#: assets/templates/assets/asset_group_create.html:17
|
||||
#: assets/templates/assets/asset_list.html:55
|
||||
#: assets/templates/assets/asset_list.html:53
|
||||
#: assets/templates/assets/asset_update.html:56
|
||||
#: assets/templates/assets/cluster_create_update.html:55
|
||||
#: common/templates/common/basic_setting.html:57
|
||||
#: common/templates/common/basic_setting.html:56
|
||||
#: common/templates/common/email_setting.html:57
|
||||
#: common/templates/common/ldap_setting.html:57
|
||||
#: perms/templates/perms/asset_permission_create_update.html:68
|
||||
|
@ -726,8 +726,8 @@ msgstr "资产列表"
|
|||
#: assets/templates/assets/asset_detail.html:24
|
||||
#: assets/templates/assets/asset_group_detail.html:18
|
||||
#: assets/templates/assets/asset_group_detail.html:177
|
||||
#: assets/templates/assets/asset_group_list.html:42
|
||||
#: assets/templates/assets/asset_list.html:95
|
||||
#: assets/templates/assets/asset_group_list.html:38
|
||||
#: assets/templates/assets/asset_list.html:98
|
||||
#: assets/templates/assets/cluster_assets.html:170
|
||||
#: assets/templates/assets/cluster_detail.html:25
|
||||
#: assets/templates/assets/cluster_list.html:43
|
||||
|
@ -750,8 +750,8 @@ msgstr "更新"
|
|||
#: assets/templates/assets/admin_user_list.html:84
|
||||
#: assets/templates/assets/asset_detail.html:28
|
||||
#: assets/templates/assets/asset_group_detail.html:22
|
||||
#: assets/templates/assets/asset_group_list.html:43
|
||||
#: assets/templates/assets/asset_list.html:96
|
||||
#: assets/templates/assets/asset_group_list.html:39
|
||||
#: assets/templates/assets/asset_list.html:99
|
||||
#: assets/templates/assets/cluster_detail.html:29
|
||||
#: assets/templates/assets/cluster_list.html:44
|
||||
#: assets/templates/assets/system_user_detail.html:30
|
||||
|
@ -776,7 +776,6 @@ msgstr "资产列表"
|
|||
|
||||
#: assets/templates/assets/admin_user_assets.html:62
|
||||
#: assets/templates/assets/asset_group_detail.html:53
|
||||
#: assets/templates/assets/asset_list.html:34
|
||||
#: assets/templates/assets/cluster_assets.html:54
|
||||
#: assets/templates/assets/user_asset_list.html:22
|
||||
#: users/templates/users/login_log_list.html:50
|
||||
|
@ -786,7 +785,7 @@ msgstr "类型"
|
|||
#: assets/templates/assets/admin_user_assets.html:63
|
||||
#: assets/templates/assets/admin_user_list.html:25
|
||||
#: assets/templates/assets/asset_detail.html:376
|
||||
#: assets/templates/assets/asset_list.html:38
|
||||
#: assets/templates/assets/asset_list.html:36
|
||||
#: assets/templates/assets/system_user_asset.html:55
|
||||
#: assets/templates/assets/system_user_list.html:27
|
||||
msgid "Reachable"
|
||||
|
@ -827,8 +826,8 @@ msgstr "使用集群管理用户"
|
|||
|
||||
#: assets/templates/assets/admin_user_detail.html:101
|
||||
#: assets/templates/assets/asset_detail.html:230
|
||||
#: assets/templates/assets/asset_group_list.html:85
|
||||
#: assets/templates/assets/asset_list.html:214
|
||||
#: assets/templates/assets/asset_group_list.html:81
|
||||
#: assets/templates/assets/asset_list.html:220
|
||||
#: assets/templates/assets/cluster_assets.html:104
|
||||
#: assets/templates/assets/cluster_list.html:89
|
||||
#: assets/templates/assets/system_user_detail.html:164
|
||||
|
@ -859,7 +858,7 @@ msgstr "比例"
|
|||
#: assets/templates/assets/admin_user_list.html:29
|
||||
#: assets/templates/assets/asset_group_detail.html:55
|
||||
#: assets/templates/assets/asset_group_list.html:18
|
||||
#: assets/templates/assets/asset_list.html:39
|
||||
#: assets/templates/assets/asset_list.html:37
|
||||
#: assets/templates/assets/cluster_assets.html:56
|
||||
#: assets/templates/assets/cluster_list.html:23
|
||||
#: assets/templates/assets/system_user_list.html:31
|
||||
|
@ -909,7 +908,7 @@ msgid "Quick modify"
|
|||
msgstr "快速修改"
|
||||
|
||||
#: assets/templates/assets/asset_detail.html:175
|
||||
#: assets/templates/assets/asset_list.html:37
|
||||
#: assets/templates/assets/asset_list.html:35
|
||||
#: assets/templates/assets/user_asset_list.html:25 perms/models.py:20
|
||||
#: perms/templates/perms/asset_permission_create_update.html:47
|
||||
#: perms/templates/perms/asset_permission_detail.html:116
|
||||
|
@ -970,8 +969,8 @@ msgstr "移除"
|
|||
msgid "Create asset group"
|
||||
msgstr "创建资产组"
|
||||
|
||||
#: assets/templates/assets/asset_group_list.html:80
|
||||
#: assets/templates/assets/asset_list.html:209
|
||||
#: assets/templates/assets/asset_group_list.html:76
|
||||
#: assets/templates/assets/asset_list.html:215
|
||||
#: assets/templates/assets/cluster_list.html:84
|
||||
#: assets/templates/assets/system_user_list.html:129
|
||||
#: users/templates/users/user_detail.html:333
|
||||
|
@ -981,29 +980,29 @@ msgstr "创建资产组"
|
|||
msgid "Are you sure?"
|
||||
msgstr "你确认吗?"
|
||||
|
||||
#: assets/templates/assets/asset_group_list.html:81
|
||||
#: assets/templates/assets/asset_group_list.html:77
|
||||
#: users/templates/users/user_group_list.html:78
|
||||
msgid "This will delete the selected groups !!!"
|
||||
msgstr "删除选择组"
|
||||
|
||||
#: assets/templates/assets/asset_group_list.html:89
|
||||
#: assets/templates/assets/asset_group_list.html:85
|
||||
msgid "Group deleted"
|
||||
msgstr "组已被删除"
|
||||
|
||||
#: assets/templates/assets/asset_group_list.html:90
|
||||
#: assets/templates/assets/asset_group_list.html:95
|
||||
#: assets/templates/assets/asset_group_list.html:86
|
||||
#: assets/templates/assets/asset_group_list.html:91
|
||||
msgid "Group Delete"
|
||||
msgstr "删除"
|
||||
|
||||
#: assets/templates/assets/asset_group_list.html:94
|
||||
#: assets/templates/assets/asset_group_list.html:90
|
||||
msgid "Group deleting failed."
|
||||
msgstr "删除失败"
|
||||
|
||||
#: assets/templates/assets/asset_group_list.html:157
|
||||
#: assets/templates/assets/asset_group_list.html:153
|
||||
msgid "The selected asset groups has been updated successfully."
|
||||
msgstr "更新成功"
|
||||
|
||||
#: assets/templates/assets/asset_group_list.html:158
|
||||
#: assets/templates/assets/asset_group_list.html:154
|
||||
msgid "AssetGroup Updated"
|
||||
msgstr "资产组更新"
|
||||
|
||||
|
@ -1021,52 +1020,47 @@ msgstr "导出"
|
|||
msgid "Create asset"
|
||||
msgstr "创建资产"
|
||||
|
||||
#: assets/templates/assets/asset_list.html:35
|
||||
#: assets/templates/assets/user_asset_list.html:23
|
||||
msgid "Env"
|
||||
msgstr "环境"
|
||||
|
||||
#: assets/templates/assets/asset_list.html:36
|
||||
#: assets/templates/assets/asset_list.html:34
|
||||
#: assets/templates/assets/user_asset_list.html:24
|
||||
msgid "Hardware"
|
||||
msgstr "硬件"
|
||||
|
||||
#: assets/templates/assets/asset_list.html:48
|
||||
#: assets/templates/assets/asset_list.html:46
|
||||
#: users/templates/users/user_list.html:37
|
||||
msgid "Delete selected"
|
||||
msgstr "批量删除"
|
||||
|
||||
#: assets/templates/assets/asset_list.html:49
|
||||
#: assets/templates/assets/asset_list.html:47
|
||||
#: users/templates/users/user_list.html:38
|
||||
msgid "Update selected"
|
||||
msgstr "批量更新"
|
||||
|
||||
#: assets/templates/assets/asset_list.html:50
|
||||
#: assets/templates/assets/asset_list.html:48
|
||||
#: users/templates/users/user_list.html:39
|
||||
msgid "Deactive selected"
|
||||
msgstr "禁用所选"
|
||||
|
||||
#: assets/templates/assets/asset_list.html:51
|
||||
#: assets/templates/assets/asset_list.html:49
|
||||
#: users/templates/users/user_list.html:40
|
||||
msgid "Active selected"
|
||||
msgstr "激活所选"
|
||||
|
||||
#: assets/templates/assets/asset_list.html:210
|
||||
#: assets/templates/assets/asset_list.html:216
|
||||
msgid "This will delete the selected assets !!!"
|
||||
msgstr "删除选择资产"
|
||||
|
||||
# msgid "Deleted!"
|
||||
# msgstr "删除"
|
||||
#: assets/templates/assets/asset_list.html:218
|
||||
#: assets/templates/assets/asset_list.html:224
|
||||
msgid "Asset Deleted."
|
||||
msgstr "已被删除"
|
||||
|
||||
#: assets/templates/assets/asset_list.html:219
|
||||
#: assets/templates/assets/asset_list.html:224
|
||||
#: assets/templates/assets/asset_list.html:225
|
||||
#: assets/templates/assets/asset_list.html:230
|
||||
msgid "Asset Delete"
|
||||
msgstr "删除"
|
||||
|
||||
#: assets/templates/assets/asset_list.html:223
|
||||
#: assets/templates/assets/asset_list.html:229
|
||||
msgid "Asset Deleting failed."
|
||||
msgstr "删除失败"
|
||||
|
||||
|
@ -1202,6 +1196,10 @@ msgstr "删除系统用户"
|
|||
msgid "System Users Deleting failed."
|
||||
msgstr "系统用户删除失败"
|
||||
|
||||
#: assets/templates/assets/user_asset_list.html:23
|
||||
msgid "Env"
|
||||
msgstr "环境"
|
||||
|
||||
#: assets/templates/assets/user_asset_list.html:26
|
||||
msgid "Connective"
|
||||
msgstr "连接性"
|
||||
|
@ -1317,58 +1315,62 @@ msgstr "LDAP认证"
|
|||
msgid "SMTP host"
|
||||
msgstr "SMTP主机"
|
||||
|
||||
#: common/forms.py:84
|
||||
#: common/forms.py:81
|
||||
msgid "SMTP port"
|
||||
msgstr "SMTP端口"
|
||||
|
||||
#: common/forms.py:86
|
||||
#: common/forms.py:83
|
||||
msgid "SMTP user"
|
||||
msgstr "SMTP账号"
|
||||
|
||||
#: common/forms.py:89
|
||||
#: common/forms.py:86
|
||||
msgid "SMTP password"
|
||||
msgstr "SMTP密码"
|
||||
|
||||
#: common/forms.py:90
|
||||
#: common/forms.py:87
|
||||
msgid "Some provider use token except password"
|
||||
msgstr "一些邮件提供商需要输入的是Token"
|
||||
|
||||
#: common/forms.py:93 common/forms.py:130
|
||||
#: common/forms.py:90 common/forms.py:127
|
||||
msgid "Use SSL"
|
||||
msgstr "使用SSL"
|
||||
|
||||
#: common/forms.py:94
|
||||
#: common/forms.py:91
|
||||
msgid "If SMTP port is 465, may be select"
|
||||
msgstr "如果SMTP端口是465,通常需要启用SSL"
|
||||
|
||||
#: common/forms.py:97
|
||||
#: common/forms.py:94
|
||||
msgid "Use TLS"
|
||||
msgstr "使用TLS"
|
||||
|
||||
#: common/forms.py:98
|
||||
#: common/forms.py:95
|
||||
msgid "If SMTP port is 587, may be select"
|
||||
msgstr "如果SMTP端口是587,通常需要启用TLS"
|
||||
|
||||
#: common/forms.py:104
|
||||
#: common/forms.py:101
|
||||
msgid "LDAP server"
|
||||
msgstr "LDAP地址"
|
||||
|
||||
#: common/forms.py:107
|
||||
#: common/forms.py:104
|
||||
msgid "Bind DN"
|
||||
msgstr "绑定DN"
|
||||
|
||||
#: common/forms.py:114
|
||||
#: common/forms.py:111
|
||||
msgid "User OU"
|
||||
msgstr "用户OU"
|
||||
|
||||
#: common/forms.py:117
|
||||
#: common/forms.py:114
|
||||
msgid "User search filter"
|
||||
msgstr "用户过滤器"
|
||||
|
||||
#: common/forms.py:120
|
||||
#: common/forms.py:117
|
||||
msgid "User attr map"
|
||||
msgstr "LDAP属性映射"
|
||||
|
||||
#: common/forms.py:130
|
||||
msgid "Enable LDAP Auth"
|
||||
msgstr "开启LDAP认证"
|
||||
|
||||
#: common/mixins.py:29
|
||||
msgid "is discard"
|
||||
msgstr ""
|
||||
|
@ -1393,7 +1395,7 @@ msgstr "基本设置"
|
|||
|
||||
#: common/templates/common/basic_setting.html:18
|
||||
#: common/templates/common/email_setting.html:18
|
||||
#: common/templates/common/ldap_setting.html:18 common/views.py:45
|
||||
#: common/templates/common/ldap_setting.html:18 common/views.py:44
|
||||
msgid "Email setting"
|
||||
msgstr "邮件设置"
|
||||
|
||||
|
@ -1403,20 +1405,19 @@ msgstr "邮件设置"
|
|||
msgid "LDAP setting"
|
||||
msgstr "LDAP设置"
|
||||
|
||||
#: common/templates/common/basic_setting.html:55
|
||||
#: common/templates/common/email_setting.html:55
|
||||
#: common/templates/common/ldap_setting.html:55
|
||||
msgid "Test connection"
|
||||
msgstr "测试连接"
|
||||
|
||||
#: common/views.py:17 common/views.py:44 common/views.py:69
|
||||
#: common/views.py:17 common/views.py:43 common/views.py:69
|
||||
#: templates/_nav.html:69
|
||||
msgid "Settings"
|
||||
msgstr "系统设置"
|
||||
|
||||
#: common/views.py:30 common/views.py:55 common/views.py:80
|
||||
msgid "Update setting successfully"
|
||||
msgstr "更新设置成功"
|
||||
#: common/views.py:28 common/views.py:54 common/views.py:82
|
||||
msgid "Update setting successfully, please restart program"
|
||||
msgstr "更新设置成功, 请手动重启程序"
|
||||
|
||||
#: ops/models.py:32
|
||||
msgid "Interval"
|
||||
|
@ -1912,8 +1913,8 @@ msgid "Close"
|
|||
msgstr "关闭"
|
||||
|
||||
#: templates/_nav.html:9 users/views/group.py:28 users/views/group.py:44
|
||||
#: users/views/group.py:62 users/views/group.py:79 users/views/login.py:194
|
||||
#: users/views/login.py:243 users/views/user.py:57 users/views/user.py:72
|
||||
#: users/views/group.py:62 users/views/group.py:79 users/views/login.py:197
|
||||
#: users/views/login.py:246 users/views/user.py:57 users/views/user.py:72
|
||||
#: users/views/user.py:91 users/views/user.py:147 users/views/user.py:304
|
||||
#: users/views/user.py:318 users/views/user.py:355 users/views/user.py:377
|
||||
msgid "Users"
|
||||
|
@ -2740,48 +2741,48 @@ msgstr "编辑用户组"
|
|||
msgid "Please enable cookies and try again."
|
||||
msgstr "设置你的浏览器支持cookie"
|
||||
|
||||
#: users/views/login.py:84
|
||||
#: users/views/login.py:87
|
||||
msgid "Logout success"
|
||||
msgstr "退出登录成功"
|
||||
|
||||
#: users/views/login.py:85
|
||||
#: users/views/login.py:88
|
||||
msgid "Logout success, return login page"
|
||||
msgstr "退出登录成功,返回到登录页面"
|
||||
|
||||
#: users/views/login.py:101
|
||||
#: users/views/login.py:104
|
||||
msgid "Email address invalid, please input again"
|
||||
msgstr "邮箱地址错误,重新输入"
|
||||
|
||||
#: users/views/login.py:114
|
||||
#: users/views/login.py:117
|
||||
msgid "Send reset password message"
|
||||
msgstr "发送重置密码邮件"
|
||||
|
||||
#: users/views/login.py:115
|
||||
#: users/views/login.py:118
|
||||
msgid "Send reset password mail success, login your mail box and follow it "
|
||||
msgstr ""
|
||||
"发送重置邮件成功, 请登录邮箱查看, 按照提示操作 (如果没收到,请等待3-5分钟)"
|
||||
|
||||
#: users/views/login.py:129
|
||||
#: users/views/login.py:132
|
||||
msgid "Reset password success"
|
||||
msgstr "重置密码成功"
|
||||
|
||||
#: users/views/login.py:130
|
||||
#: users/views/login.py:133
|
||||
msgid "Reset password success, return to login page"
|
||||
msgstr "重置密码成功,返回到登录页面"
|
||||
|
||||
#: users/views/login.py:147 users/views/login.py:160
|
||||
#: users/views/login.py:150 users/views/login.py:163
|
||||
msgid "Token invalid or expired"
|
||||
msgstr "Token错误或失效"
|
||||
|
||||
#: users/views/login.py:156
|
||||
#: users/views/login.py:159
|
||||
msgid "Password not same"
|
||||
msgstr "密码不一致"
|
||||
|
||||
#: users/views/login.py:194
|
||||
#: users/views/login.py:197
|
||||
msgid "First login"
|
||||
msgstr "首次登陆"
|
||||
|
||||
#: users/views/login.py:244
|
||||
#: users/views/login.py:247
|
||||
msgid "Login log list"
|
||||
msgstr "登录日志"
|
||||
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
#
|
||||
from collections import OrderedDict
|
||||
import copy
|
||||
import logging
|
||||
import os
|
||||
import uuid
|
||||
|
@ -21,7 +20,8 @@ from .serializers import TerminalSerializer, StatusSerializer, \
|
|||
SessionSerializer, TaskSerializer, ReplaySerializer
|
||||
from .hands import IsSuperUserOrAppUser, IsAppUser, \
|
||||
IsSuperUserOrAppUserOrUserReadonly
|
||||
from .backends import get_terminal_command_store, SessionCommandSerializer
|
||||
from .backends import get_command_store, get_multi_command_store, \
|
||||
SessionCommandSerializer
|
||||
|
||||
logger = logging.getLogger(__file__)
|
||||
|
||||
|
@ -196,7 +196,8 @@ class CommandViewSet(viewsets.ViewSet):
|
|||
}
|
||||
|
||||
"""
|
||||
command_store = get_terminal_command_store()
|
||||
command_store = get_command_store()
|
||||
multi_command_storage = get_multi_command_store()
|
||||
serializer_class = SessionCommandSerializer
|
||||
permission_classes = (IsSuperUserOrAppUser,)
|
||||
|
||||
|
@ -217,7 +218,7 @@ class CommandViewSet(viewsets.ViewSet):
|
|||
return Response({"msg": msg}, status=401)
|
||||
|
||||
def list(self, request, *args, **kwargs):
|
||||
queryset = list(self.command_store.all())
|
||||
queryset = self.multi_command_storage.filter()
|
||||
serializer = self.serializer_class(queryset, many=True)
|
||||
return Response(serializer.data)
|
||||
|
||||
|
|
|
@ -3,7 +3,7 @@ from django.conf import settings
|
|||
from .command.serializers import SessionCommandSerializer
|
||||
|
||||
TYPE_ENGINE_MAPPING = {
|
||||
'elasticsearch': 'terminal.backends.command.db',
|
||||
'elasticsearch': 'terminal.backends.command.es',
|
||||
}
|
||||
|
||||
|
||||
|
@ -31,4 +31,10 @@ def get_terminal_command_store():
|
|||
return storage_list
|
||||
|
||||
|
||||
def get_multi_command_store():
|
||||
from .command.multi import CommandStore
|
||||
storage_list = get_terminal_command_store().values()
|
||||
storage = CommandStore(storage_list)
|
||||
return storage
|
||||
|
||||
|
||||
|
|
|
@ -73,7 +73,7 @@ class CommandStore(CommandBase):
|
|||
session=session,
|
||||
)
|
||||
queryset = self.model.objects.filter(**filter_kwargs)
|
||||
return queryset
|
||||
return [command.to_dict() for command in queryset]
|
||||
|
||||
def count(self, date_from=None, date_to=None,
|
||||
user=None, asset=None, system_user=None,
|
||||
|
|
|
@ -0,0 +1,38 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
#
|
||||
|
||||
from jms_es_sdk import ESStore
|
||||
from .base import CommandBase
|
||||
|
||||
|
||||
class CommandStore(CommandBase, ESStore):
|
||||
def __init__(self, params):
|
||||
hosts = params.get('HOSTS', ['http://localhost'])
|
||||
ESStore.__init__(self, hosts=hosts)
|
||||
|
||||
def save(self, command):
|
||||
return ESStore.save(self, command)
|
||||
|
||||
def bulk_save(self, commands):
|
||||
return ESStore.bulk_save(self, commands)
|
||||
|
||||
def filter(self, date_from=None, date_to=None,
|
||||
user=None, asset=None, system_user=None,
|
||||
input=None, session=None):
|
||||
|
||||
data = ESStore.filter(
|
||||
self, date_from=date_from, date_to=date_to,
|
||||
user=user, asset=asset, system_user=system_user,
|
||||
input=input, session=session
|
||||
)
|
||||
return [item["_source"] for item in data["hits"] if item]
|
||||
|
||||
def count(self, date_from=None, date_to=None,
|
||||
user=None, asset=None, system_user=None,
|
||||
input=None, session=None):
|
||||
amount = ESStore.count(
|
||||
self, date_from=date_from, date_to=date_to,
|
||||
user=user, asset=asset, system_user=system_user,
|
||||
input=input, session=session
|
||||
)
|
||||
return amount
|
|
@ -33,5 +33,11 @@ class AbstractSessionCommand(models.Model):
|
|||
commands.append(command)
|
||||
return commands
|
||||
|
||||
def to_dict(self):
|
||||
d = {}
|
||||
for field in self._meta.fields:
|
||||
d[field.name] = getattr(self, field.name)
|
||||
return d
|
||||
|
||||
def __str__(self):
|
||||
return self.input
|
||||
|
|
|
@ -0,0 +1,27 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
#
|
||||
|
||||
from .base import CommandBase
|
||||
|
||||
|
||||
class CommandStore(CommandBase):
|
||||
def __init__(self, storage_list):
|
||||
self.storage_list = storage_list
|
||||
|
||||
def filter(self, **kwargs):
|
||||
queryset = []
|
||||
for storage in self.storage_list:
|
||||
queryset.extend(storage.filter(**kwargs))
|
||||
return sorted(queryset, key=lambda command: command["timestamp"])
|
||||
|
||||
def count(self, **kwargs):
|
||||
amount = 0
|
||||
for storage in self.storage_list:
|
||||
amount += storage.count(**kwargs)
|
||||
return amount
|
||||
|
||||
def save(self, command):
|
||||
pass
|
||||
|
||||
def bulk_save(self, commands):
|
||||
pass
|
|
@ -11,10 +11,11 @@ from .backends.command.models import AbstractSessionCommand
|
|||
|
||||
|
||||
def get_all_command_storage():
|
||||
storage_choices = []
|
||||
# storage_choices = []
|
||||
from common.models import Setting
|
||||
Setting.refresh_all_settings()
|
||||
for k, v in settings.TERMINAL_COMMAND_STORAGE.items():
|
||||
storage_choices.append((k, k))
|
||||
return storage_choices
|
||||
yield (k, k)
|
||||
|
||||
|
||||
class Terminal(models.Model):
|
||||
|
|
|
@ -5,7 +5,7 @@ from django.utils import timezone
|
|||
from rest_framework import serializers
|
||||
|
||||
from .models import Terminal, Status, Session, Task
|
||||
from .backends import get_terminal_command_store
|
||||
from .backends import get_multi_command_store
|
||||
|
||||
|
||||
class TerminalSerializer(serializers.ModelSerializer):
|
||||
|
@ -43,14 +43,14 @@ class TerminalSerializer(serializers.ModelSerializer):
|
|||
|
||||
class SessionSerializer(serializers.ModelSerializer):
|
||||
command_amount = serializers.SerializerMethodField()
|
||||
command_store = get_terminal_command_store()
|
||||
command_store = get_multi_command_store()
|
||||
|
||||
class Meta:
|
||||
model = Session
|
||||
fields = '__all__'
|
||||
|
||||
def get_command_amount(self, obj):
|
||||
return len(self.command_store.filter(session=obj.session))
|
||||
return self.command_store.count(session=str(obj.id))
|
||||
|
||||
|
||||
class StatusSerializer(serializers.ModelSerializer):
|
||||
|
|
|
@ -1,15 +1,12 @@
|
|||
# ~*~ coding: utf-8 ~*~
|
||||
|
||||
from django import template
|
||||
from ..backends import get_terminal_command_store
|
||||
from ..backends import get_multi_command_store
|
||||
|
||||
register = template.Library()
|
||||
command_store_dict = get_terminal_command_store()
|
||||
command_store = get_multi_command_store()
|
||||
|
||||
|
||||
@register.filter
|
||||
def get_session_command_amount(session_id):
|
||||
amount = 0
|
||||
for name, store in command_store_dict.items():
|
||||
amount += store.count(session=str(session_id))
|
||||
return amount
|
||||
return command_store.count(session=session_id)
|
||||
|
|
|
@ -9,10 +9,10 @@ from django.utils.translation import ugettext as _
|
|||
from common.mixins import DatetimeSearchMixin
|
||||
from ..models import Command
|
||||
from .. import utils
|
||||
from ..backends import get_terminal_command_store
|
||||
from ..backends import get_multi_command_store
|
||||
|
||||
__all__ = ['CommandListView']
|
||||
command_store_list = get_terminal_command_store()
|
||||
common_storage = get_multi_command_store()
|
||||
|
||||
|
||||
class CommandListView(DatetimeSearchMixin, ListView):
|
||||
|
@ -39,10 +39,7 @@ class CommandListView(DatetimeSearchMixin, ListView):
|
|||
filter_kwargs['system_user'] = self.system_user
|
||||
if self.command:
|
||||
filter_kwargs['input'] = self.command
|
||||
queryset = []
|
||||
for store in command_store_list:
|
||||
queryset.extend(store.filter(**filter_kwargs))
|
||||
queryset = sorted(queryset, key=lambda c: c.timestamp, reverse=True)
|
||||
queryset = common_storage.filter(**filter_kwargs)
|
||||
return queryset
|
||||
|
||||
def get_context_data(self, **kwargs):
|
||||
|
|
|
@ -10,7 +10,7 @@ from django.conf import settings
|
|||
from users.utils import AdminUserRequiredMixin
|
||||
from common.mixins import DatetimeSearchMixin
|
||||
from ..models import Session, Command, Terminal
|
||||
from ..backends import get_terminal_command_store
|
||||
from ..backends import get_multi_command_store
|
||||
from .. import utils
|
||||
|
||||
|
||||
|
@ -19,7 +19,7 @@ __all__ = [
|
|||
'SessionDetailView',
|
||||
]
|
||||
|
||||
command_store = get_terminal_command_store()
|
||||
command_store = get_multi_command_store()
|
||||
|
||||
|
||||
class SessionListView(AdminUserRequiredMixin, DatetimeSearchMixin, ListView):
|
||||
|
|
Loading…
Reference in New Issue