perf: 添加 session 在线数量 (#11464)

* perf: 添加 session 在线数量

* perf: 优化会话数量

* perf: 优化会话数量

---------

Co-authored-by: ibuler <ibuler@qq.com>
pull/11481/head
fit2bot 2023-08-31 17:00:03 +08:00 committed by GitHub
parent db0b43ee84
commit 1138cd3334
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 78 additions and 62 deletions

View File

@ -22,7 +22,7 @@ class VirtualAccountSerializer(serializers.ModelSerializer):
'secret_from_login': {
'help_text': _(
'Current only support login from AD/LDAP. Secret priority: '
'Same account in asset secret > Login secret > Manual input. '
'Same account in asset secret > Login secret > Manual input. <br/ >'
'For security, please set config CACHE_LOGIN_PASSWORD_ENABLED to true'
)
},

View File

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:adfc307a827a5299030378017f8c1b840276711dcf1a0cf55d3bce47aafa0f1f
size 156109
oid sha256:e73f77a5898c8626b05360d32778643c5b77502da22e90f956be0f6aa2a45aa4
size 156006

View File

@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-08-30 15:59+0800\n"
"POT-Creation-Date: 2023-08-28 10:55+0800\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@ -823,12 +823,12 @@ msgstr "コメント"
#: accounts/serializers/account/virtual.py:24
msgid ""
"Current only support login from AD/LDAP. Secret priority: Same account in "
"asset secret > Login secret > Manual input. For security, please set config "
"CACHE_LOGIN_PASSWORD_ENABLED to true"
"asset secret > Login secret > Manual input. <br/ >For security, please set "
"config CACHE_LOGIN_PASSWORD_ENABLED to true"
msgstr ""
"現在、AD/LDAPからのログインのみをサポートしています。シークレットの優先順位: "
"資産シークレット内の同じアカウント > ログインシークレット > 手動入力, セキュ"
"リティのために、コンフィギュレーション項目CACHE _LOGIN_PASSWORD_ENABLEDはtrue"
"資産シークレット内の同じアカウント > ログインシークレット > 手動入力. <br/> "
"セキュリティのために、「config CACHE_LOGIN_PASSWORD_ENABLED」をtrueに設定してください。 "
#: accounts/serializers/automations/base.py:23
#: assets/models/asset/common.py:155 assets/models/automations/base.py:18
@ -1240,8 +1240,8 @@ msgid "Cloud service"
msgstr "クラウド サービス"
#: assets/const/category.py:14 assets/models/asset/gpt.py:11
#: assets/models/asset/web.py:16 audits/const.py:35
#: terminal/models/applet/applet.py:27
#: assets/models/asset/web.py:16 audits/const.py:34
#: terminal/models/applet/applet.py:26
msgid "Web"
msgstr "Web"
@ -6037,8 +6037,8 @@ msgstr "一括作成非サポート"
msgid "Storage is invalid"
msgstr "ストレージが無効です"
#: terminal/models/applet/applet.py:30 xpack/plugins/license/models.py:86
msgid "Community Edition"
#: terminal/models/applet/applet.py:29
msgid "Community"
msgstr "コミュニティ版"
#: terminal/models/applet/applet.py:31

View File

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:20793cf634d9d59e0c1e1b903712223422dd42e1b7f6b7859015e0b83aaa4a96
size 127733
oid sha256:0b96e0625afb1562c735097ed1ed4e5a0a5496e4578b208dd2ed24a67928ceb2
size 127664

View File

@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: JumpServer 0.3.3\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-08-30 15:59+0800\n"
"POT-Creation-Date: 2023-08-28 10:55+0800\n"
"PO-Revision-Date: 2021-05-20 10:54+0800\n"
"Last-Translator: ibuler <ibuler@qq.com>\n"
"Language-Team: JumpServer team<ibuler@qq.com>\n"
@ -92,7 +92,7 @@ msgid "Update"
msgstr "更新"
#: accounts/const/account.py:33
#: accounts/serializers/automations/change_secret.py:156 audits/const.py:55
#: accounts/serializers/automations/change_secret.py:156 audits/const.py:54
#: audits/signal_handlers/activity_log.py:33 common/const/choices.py:19
#: ops/const.py:61 terminal/const.py:77 xpack/plugins/cloud/const.py:43
msgid "Failed"
@ -244,7 +244,7 @@ msgstr "切换自"
#: accounts/models/account.py:54 assets/const/protocol.py:162
#: settings/serializers/auth/cas.py:20 settings/serializers/auth/feishu.py:20
#: terminal/models/applet/applet.py:35
#: terminal/models/applet/applet.py:34
msgid "Version"
msgstr "版本"
@ -348,56 +348,56 @@ msgstr "是否成功"
msgid "Account backup execution"
msgstr "账号备份执行"
#: accounts/models/automations/base.py:19
#: accounts/models/automations/base.py:20
msgid "Account automation task"
msgstr "账号自动化任务"
#: accounts/models/automations/base.py:33
#: accounts/models/automations/base.py:34
msgid "Automation execution"
msgstr "自动化执行"
#: accounts/models/automations/base.py:34
#: accounts/models/automations/base.py:35
msgid "Automation executions"
msgstr "自动化执行"
#: accounts/models/automations/base.py:36
#: accounts/models/automations/base.py:37
msgid "Can view change secret execution"
msgstr "查看改密执行"
#: accounts/models/automations/base.py:37
#: accounts/models/automations/base.py:38
msgid "Can add change secret execution"
msgstr "创建改密执行"
#: accounts/models/automations/base.py:39
#: accounts/models/automations/base.py:40
msgid "Can view gather accounts execution"
msgstr "查看收集账号执行"
#: accounts/models/automations/base.py:40
#: accounts/models/automations/base.py:41
msgid "Can add gather accounts execution"
msgstr "创建收集账号执行"
#: accounts/models/automations/base.py:42
#: accounts/models/automations/base.py:43
msgid "Can view push account execution"
msgstr "查看推送账号执行"
#: accounts/models/automations/base.py:43
#: accounts/models/automations/base.py:44
msgid "Can add push account execution"
msgstr "创建推送账号执行"
#: accounts/models/automations/base.py:55 accounts/models/template.py:21
#: accounts/models/automations/base.py:56 accounts/models/template.py:21
#: accounts/serializers/automations/change_secret.py:40
msgid "Secret strategy"
msgstr "密文策略"
#: accounts/models/automations/base.py:57
#: accounts/models/automations/base.py:58
msgid "Password rules"
msgstr "密码规则"
#: accounts/models/automations/base.py:60
#: accounts/models/automations/base.py:61
msgid "SSH key change strategy"
msgstr "SSH 密钥推送方式"
#: accounts/models/automations/base.py:70 accounts/models/base.py:36
#: accounts/models/automations/base.py:71 accounts/models/base.py:36
#: accounts/serializers/account/account.py:429
#: accounts/serializers/account/base.py:16
#: accounts/serializers/automations/change_secret.py:46
@ -406,7 +406,7 @@ msgstr "SSH 密钥推送方式"
msgid "Secret type"
msgstr "密文类型"
#: accounts/models/automations/base.py:72 accounts/models/mixins/vault.py:48
#: accounts/models/automations/base.py:73 accounts/models/mixins/vault.py:48
#: accounts/serializers/account/base.py:19
#: authentication/models/temp_token.py:10
#: authentication/templates/authentication/_access_key_modal.html:31
@ -527,7 +527,7 @@ msgstr "账号验证"
#: ops/models/job.py:126 ops/models/playbook.py:28 ops/serializers/job.py:20
#: orgs/models.py:82 perms/models/asset_permission.py:56 rbac/models/role.py:29
#: settings/models.py:32 settings/serializers/msg.py:82
#: terminal/models/applet/applet.py:33 terminal/models/component/endpoint.py:12
#: terminal/models/applet/applet.py:32 terminal/models/component/endpoint.py:12
#: terminal/models/component/endpoint.py:94
#: terminal/models/component/storage.py:26 terminal/models/component/task.py:13
#: terminal/models/component/terminal.py:84 users/forms/profile.py:33
@ -545,7 +545,7 @@ msgstr "特权账号"
#: assets/models/automations/base.py:21 assets/models/cmd_filter.py:39
#: assets/models/label.py:22
#: authentication/serializers/connect_token_secret.py:114
#: terminal/models/applet/applet.py:40
#: terminal/models/applet/applet.py:39
#: terminal/models/component/endpoint.py:105 users/serializers/user.py:170
msgid "Is active"
msgstr "激活"
@ -668,7 +668,7 @@ msgstr "类别"
#: assets/serializers/asset/common.py:122 assets/serializers/platform.py:112
#: assets/serializers/platform.py:127 audits/serializers.py:49
#: authentication/serializers/connect_token_secret.py:123 ops/models/job.py:137
#: perms/serializers/user_permission.py:27 terminal/models/applet/applet.py:39
#: perms/serializers/user_permission.py:27 terminal/models/applet/applet.py:38
#: terminal/models/component/storage.py:57
#: terminal/models/component/storage.py:146 terminal/serializers/applet.py:29
#: terminal/serializers/session.py:21 terminal/serializers/storage.py:226
@ -808,8 +808,8 @@ msgstr "关联平台,可配置推送参数,如果不关联,将使用默认
#: assets/models/cmd_filter.py:40 assets/models/cmd_filter.py:88
#: assets/models/group.py:20 common/db/models.py:36 ops/models/adhoc.py:26
#: ops/models/job.py:145 ops/models/playbook.py:31 rbac/models/role.py:37
#: settings/models.py:37 terminal/models/applet/applet.py:45
#: terminal/models/applet/applet.py:302 terminal/models/applet/host.py:142
#: settings/models.py:37 terminal/models/applet/applet.py:44
#: terminal/models/applet/applet.py:284 terminal/models/applet/host.py:142
#: terminal/models/component/endpoint.py:24
#: terminal/models/component/endpoint.py:104
#: terminal/models/session/session.py:46 tickets/models/comment.py:32
@ -818,15 +818,14 @@ msgstr "关联平台,可配置推送参数,如果不关联,将使用默认
msgid "Comment"
msgstr "备注"
#: accounts/serializers/account/virtual.py:24
#: accounts/serializers/account/virtual.py:22
msgid ""
"Current only support login from AD/LDAP. Secret priority: Same account in "
"asset secret > Login secret > Manual input. For security, please set config "
"CACHE_LOGIN_PASSWORD_ENABLED to true"
"asset secret > Login secret > Manual input. <br/ >For security, please set "
"config CACHE_LOGIN_PASSWORD_ENABLED to true"
msgstr ""
"当前仅支持 AD/LDAP 登录方式用户。 同名账号密码生效顺序: 资产上存在的同名账号"
"密码 > 登录密码 > 手动输入, 为了安全起见,请设置配置项 "
"CACHE_LOGIN_PASSWORD_ENABLED 为 true"
"密码 > 登录密码 > 手动输入 <br/> 为了安全起见,请设置配置项 CACHE_LOGIN_PASSWORD_ENABLED=true重启服务才能开启"
#: accounts/serializers/automations/base.py:23
#: assets/models/asset/common.py:155 assets/models/automations/base.py:18
@ -862,7 +861,7 @@ msgstr "* 密码长度范围 6-30 位"
msgid "Automation task execution"
msgstr "自动化任务执行历史"
#: accounts/serializers/automations/change_secret.py:155 audits/const.py:54
#: accounts/serializers/automations/change_secret.py:155 audits/const.py:53
#: audits/models.py:59 audits/signal_handlers/activity_log.py:33
#: common/const/choices.py:18 ops/const.py:59 ops/serializers/celery.py:40
#: terminal/const.py:76 terminal/models/session/sharing.py:121
@ -870,8 +869,8 @@ msgstr "自动化任务执行历史"
msgid "Success"
msgstr "成功"
#: accounts/signal_handlers.py:46
#, python-format
#: accounts/signal_handlers.py:47
#, fpython-format
msgid "Push related accounts to assets: %s, by system"
msgstr "推送账号到资产: %s, 由系统执行"
@ -1182,7 +1181,7 @@ msgstr "认证失败"
msgid "Connect failed"
msgstr "连接失败"
#: assets/const/automation.py:6 audits/const.py:6 audits/const.py:37
#: assets/const/automation.py:6 audits/const.py:6 audits/const.py:36
#: audits/signal_handlers/activity_log.py:62 common/utils/ip/geoip/utils.py:31
#: common/utils/ip/geoip/utils.py:37 common/utils/ip/utils.py:104
msgid "Unknown"
@ -1204,7 +1203,7 @@ msgstr "测试网关"
msgid "Gather facts"
msgstr "收集资产信息"
#: assets/const/base.py:33 audits/const.py:48
#: assets/const/base.py:33 audits/const.py:47
#: terminal/serializers/applet_host.py:32
msgid "Disabled"
msgstr "禁用"
@ -1235,8 +1234,8 @@ msgid "Cloud service"
msgstr "云服务"
#: assets/const/category.py:14 assets/models/asset/gpt.py:11
#: assets/models/asset/web.py:16 audits/const.py:35
#: terminal/models/applet/applet.py:27
#: assets/models/asset/web.py:16 audits/const.py:34
#: terminal/models/applet/applet.py:26
msgid "Web"
msgstr "Web"
@ -1256,7 +1255,7 @@ msgstr "私有云"
msgid "Kubernetes"
msgstr "Kubernetes"
#: assets/const/device.py:7 terminal/models/applet/applet.py:26
#: assets/const/device.py:7 terminal/models/applet/applet.py:25
#: tickets/const.py:8
msgid "General"
msgstr "一般"
@ -1450,7 +1449,7 @@ msgstr "用户名与用户相同"
#: assets/models/_user.py:52 authentication/models/connection_token.py:41
#: authentication/serializers/connect_token_secret.py:111
#: terminal/models/applet/applet.py:42 terminal/serializers/session.py:19
#: terminal/models/applet/applet.py:41 terminal/serializers/session.py:19
#: terminal/serializers/session.py:42 terminal/serializers/storage.py:70
msgid "Protocol"
msgstr "协议"
@ -1589,7 +1588,7 @@ msgstr "资产自动化任务"
#: assets/models/automations/base.py:113 audits/models.py:199
#: audits/serializers.py:50 ops/models/base.py:49 ops/models/job.py:220
#: terminal/models/applet/applet.py:301 terminal/models/applet/host.py:139
#: terminal/models/applet/applet.py:283 terminal/models/applet/host.py:139
#: terminal/models/component/status.py:30 terminal/serializers/applet.py:18
#: terminal/serializers/applet_host.py:115 tickets/models/ticket/general.py:283
#: tickets/serializers/super_ticket.py:13
@ -1734,7 +1733,7 @@ msgstr "开放的"
msgid "Setting"
msgstr "设置"
#: assets/models/platform.py:38 audits/const.py:49 settings/models.py:36
#: assets/models/platform.py:38 audits/const.py:48 settings/models.py:36
#: terminal/serializers/applet_host.py:33
msgid "Enabled"
msgstr "启用"
@ -2137,8 +2136,7 @@ msgstr "重命名"
msgid "Symlink"
msgstr "建立软链接"
#: audits/const.py:18 audits/const.py:28 perms/const.py:14
#: terminal/api/session/session.py:141
#: audits/const.py:18 perms/const.py:14
msgid "Download"
msgstr "下载"
@ -2146,7 +2144,7 @@ msgstr "下载"
msgid "Rename dir"
msgstr "映射目录"
#: audits/const.py:23 rbac/tree.py:232 terminal/api/session/session.py:234
#: audits/const.py:23 rbac/tree.py:232
#: terminal/templates/terminal/_msg_command_warning.html:18
#: terminal/templates/terminal/_msg_session_sharing.html:10
msgid "View"
@ -2158,7 +2156,7 @@ msgstr "查看"
msgid "Create"
msgstr "创建"
#: audits/const.py:29 perms/const.py:12
#: audits/const.py:28 perms/const.py:12
msgid "Connect"
msgstr "连接"
@ -5952,8 +5950,8 @@ msgstr "不支持批量创建"
msgid "Storage is invalid"
msgstr "存储无效"
#: terminal/models/applet/applet.py:30 xpack/plugins/license/models.py:86
msgid "Community Edition"
#: terminal/models/applet/applet.py:29
msgid "Community"
msgstr "社区版"
#: terminal/models/applet/applet.py:31
@ -7747,7 +7745,7 @@ msgstr "规则值"
#: xpack/plugins/cloud/models.py:317 xpack/plugins/cloud/serializers/task.py:70
msgid "Strategy rule"
msgstr "策略规则"
msgstr "条件"
#: xpack/plugins/cloud/models.py:332
msgid "Action attr"
@ -7759,7 +7757,7 @@ msgstr "动作值"
#: xpack/plugins/cloud/models.py:341 xpack/plugins/cloud/serializers/task.py:73
msgid "Strategy action"
msgstr "策略动作"
msgstr "动作"
#: xpack/plugins/cloud/providers/aws_international.py:18
msgid "China (Beijing)"

View File

@ -90,7 +90,7 @@ class SessionViewSet(RecordViewLogMixin, OrgBulkModelViewSet):
]
extra_filter_backends = [DatetimeRangeFilterBackend]
rbac_perms = {
'download': ['terminal.download_sessionreplay']
'download': ['terminal.download_sessionreplay'],
}
permission_classes = [RBACPermission | IsSessionAssignee]
@ -146,8 +146,26 @@ class SessionViewSet(RecordViewLogMixin, OrgBulkModelViewSet):
)
return response
@action(methods=[GET], detail=False, permission_classes=[IsAuthenticated], url_path='online-info', )
def online_info(self, request, *args, **kwargs):
asset = self.request.query_params.get('asset_id')
account = self.request.query_params.get('account')
if asset is None or account is None:
return Response({'count': None})
queryset = Session.objects.filter(is_finished=True) \
.filter(asset_id=asset) \
.filter(protocol='rdp') # 当前只统计 rdp 协议的会话
if '(' in account and ')' in account:
queryset = queryset.filter(account=account)
else:
queryset = queryset.filter(account__endswith='({})'.format(account))
count = queryset.count()
return Response({'count': count})
def get_queryset(self):
queryset = super().get_queryset().prefetch_related('terminal') \
queryset = super().get_queryset() \
.prefetch_related('terminal') \
.annotate(terminal_display=F('terminal__name'))
return queryset