diff --git a/apps/common/forms.py b/apps/common/forms.py index ab3dadba3..bb708c2f7 100644 --- a/apps/common/forms.py +++ b/apps/common/forms.py @@ -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): diff --git a/apps/common/views.py b/apps/common/views.py index 8e7dc8341..1e8ad503d 100644 --- a/apps/common/views.py +++ b/apps/common/views.py @@ -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') diff --git a/apps/jumpserver/settings.py b/apps/jumpserver/settings.py index d023b587a..a164d3355 100644 --- a/apps/jumpserver/settings.py +++ b/apps/jumpserver/settings.py @@ -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', diff --git a/apps/locale/zh/LC_MESSAGES/django.mo b/apps/locale/zh/LC_MESSAGES/django.mo index 5b01e493b..7be8a996a 100644 Binary files a/apps/locale/zh/LC_MESSAGES/django.mo and b/apps/locale/zh/LC_MESSAGES/django.mo differ diff --git a/apps/locale/zh/LC_MESSAGES/django.po b/apps/locale/zh/LC_MESSAGES/django.po index 55e035bfe..c69f1340a 100644 --- a/apps/locale/zh/LC_MESSAGES/django.po +++ b/apps/locale/zh/LC_MESSAGES/django.po @@ -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 \n" "Language-Team: Jumpserver team\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 "登录日志" diff --git a/apps/terminal/api.py b/apps/terminal/api.py index 25408b6b4..279ec0121 100644 --- a/apps/terminal/api.py +++ b/apps/terminal/api.py @@ -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) diff --git a/apps/terminal/backends/__init__.py b/apps/terminal/backends/__init__.py index 8b09f0c55..33f63f4de 100644 --- a/apps/terminal/backends/__init__.py +++ b/apps/terminal/backends/__init__.py @@ -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 + diff --git a/apps/terminal/backends/command/db.py b/apps/terminal/backends/command/db.py index 85b99ce80..18652a26f 100644 --- a/apps/terminal/backends/command/db.py +++ b/apps/terminal/backends/command/db.py @@ -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, diff --git a/apps/terminal/backends/command/es.py b/apps/terminal/backends/command/es.py new file mode 100644 index 000000000..2e0995ad9 --- /dev/null +++ b/apps/terminal/backends/command/es.py @@ -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 diff --git a/apps/terminal/backends/command/models.py b/apps/terminal/backends/command/models.py index cc0d375e6..186769b48 100644 --- a/apps/terminal/backends/command/models.py +++ b/apps/terminal/backends/command/models.py @@ -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 diff --git a/apps/terminal/backends/command/multi.py b/apps/terminal/backends/command/multi.py new file mode 100644 index 000000000..8d51cfd38 --- /dev/null +++ b/apps/terminal/backends/command/multi.py @@ -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 \ No newline at end of file diff --git a/apps/terminal/models.py b/apps/terminal/models.py index 4c5244bcb..617977946 100644 --- a/apps/terminal/models.py +++ b/apps/terminal/models.py @@ -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): diff --git a/apps/terminal/serializers.py b/apps/terminal/serializers.py index ecea7edfd..275853411 100644 --- a/apps/terminal/serializers.py +++ b/apps/terminal/serializers.py @@ -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): diff --git a/apps/terminal/templatetags/terminal_tags.py b/apps/terminal/templatetags/terminal_tags.py index 72822b00a..cd7120fec 100644 --- a/apps/terminal/templatetags/terminal_tags.py +++ b/apps/terminal/templatetags/terminal_tags.py @@ -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) diff --git a/apps/terminal/views/command.py b/apps/terminal/views/command.py index 79b2eb2cc..6fdf905bd 100644 --- a/apps/terminal/views/command.py +++ b/apps/terminal/views/command.py @@ -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): diff --git a/apps/terminal/views/session.py b/apps/terminal/views/session.py index 63fcf5eb7..0970cade2 100644 --- a/apps/terminal/views/session.py +++ b/apps/terminal/views/session.py @@ -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):