From b8e6bc932b05fff7aa927b09034f08c5c0296500 Mon Sep 17 00:00:00 2001 From: fit2bot <68588906+fit2bot@users.noreply.github.com> Date: Tue, 29 Mar 2022 17:22:59 +0800 Subject: [PATCH] =?UTF-8?q?perf:=20=E6=B7=BB=E5=8A=A0=20mariadb=20port=20(?= =?UTF-8?q?#7989)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * perf: 添加 mariadb port * perf: 优化 mariadb 树上天津更多信息 * perf: remove mixin Co-authored-by: ibuler --- apps/applications/api/__init__.py | 1 - apps/applications/models/application.py | 3 +- apps/jumpserver/conf.py | 1 + apps/jumpserver/settings/custom.py | 1 + .../user_permission_applications.py | 28 +++++--- apps/perms/tree/__init__.py | 0 .../api/mixin.py => perms/tree/app.py} | 72 +++++++++---------- apps/settings/api/public.py | 1 + apps/settings/serializers/terminal.py | 4 ++ 9 files changed, 60 insertions(+), 51 deletions(-) create mode 100644 apps/perms/tree/__init__.py rename apps/{applications/api/mixin.py => perms/tree/app.py} (61%) diff --git a/apps/applications/api/__init__.py b/apps/applications/api/__init__.py index 3258614fd..7a32ac0a0 100644 --- a/apps/applications/api/__init__.py +++ b/apps/applications/api/__init__.py @@ -1,4 +1,3 @@ from .application import * from .account import * -from .mixin import * from .remote_app import * diff --git a/apps/applications/models/application.py b/apps/applications/models/application.py index a3c50e960..aa2d56f70 100644 --- a/apps/applications/models/application.py +++ b/apps/applications/models/application.py @@ -145,7 +145,6 @@ class ApplicationTreeNodeMixin: pid, counts, show_empty=show_empty, show_count=show_count ) - return tree_nodes @classmethod @@ -183,7 +182,7 @@ class ApplicationTreeNodeMixin: def _attrs_to_tree(self): if self.category == const.AppCategory.db: - return {'database': self.attrs.get('database')} + return self.attrs return {} def _as_tree_node(self, pid): diff --git a/apps/jumpserver/conf.py b/apps/jumpserver/conf.py index 3625f2a41..7aa8dc436 100644 --- a/apps/jumpserver/conf.py +++ b/apps/jumpserver/conf.py @@ -317,6 +317,7 @@ class Config(dict): 'TERMINAL_MAGNUS_ENABLED': True, 'TERMINAL_MAGNUS_HOST': lambda: urlparse(settings.SITE_URL).hostname, 'TERMINAL_MAGNUS_MYSQL_PORT': 33060, + 'TERMINAL_MAGNUS_MARIADB_PORT': 33061, 'TERMINAL_MAGNUS_POSTGRE_PORT': 54320, # 安全配置 diff --git a/apps/jumpserver/settings/custom.py b/apps/jumpserver/settings/custom.py index 4d720349f..2aa05afe5 100644 --- a/apps/jumpserver/settings/custom.py +++ b/apps/jumpserver/settings/custom.py @@ -176,4 +176,5 @@ MAGNUS_ENABLED = CONFIG.MAGNUS_ENABLED TERMINAL_MAGNUS_HOST = CONFIG.TERMINAL_MAGNUS_HOST TERMINAL_MAGNUS_ENABLED = CONFIG.TERMINAL_MAGNUS_ENABLED TERMINAL_MAGNUS_MYSQL_PORT = CONFIG.TERMINAL_MAGNUS_MYSQL_PORT +TERMINAL_MAGNUS_MARIADB_PORT = CONFIG.TERMINAL_MAGNUS_MARIADB_PORT TERMINAL_MAGNUS_POSTGRE_PORT = CONFIG.TERMINAL_MAGNUS_POSTGRE_PORT diff --git a/apps/perms/api/application/user_permission/user_permission_applications.py b/apps/perms/api/application/user_permission/user_permission_applications.py index f1f5e0e66..82b0ab025 100644 --- a/apps/perms/api/application/user_permission/user_permission_applications.py +++ b/apps/perms/api/application/user_permission/user_permission_applications.py @@ -1,18 +1,18 @@ # -*- coding: utf-8 -*- # +from typing import Callable + from rest_framework.generics import ListAPIView from rest_framework.response import Response from common.mixins.api import CommonApiMixin from common.tree import TreeNodeSerializer -from applications.api.mixin import ( - SerializeApplicationToTreeNodeMixin -) from perms import serializers -from .mixin import AppRoleAdminMixin, AppRoleUserMixin +from perms.tree.app import GrantedAppTreeUtil from perms.utils.application.user_permission import ( get_user_granted_all_applications ) +from .mixin import AppRoleAdminMixin, AppRoleUserMixin __all__ = [ @@ -23,7 +23,7 @@ __all__ = [ ] -class AllGrantedApplicationsMixin(CommonApiMixin, ListAPIView): +class AllGrantedApplicationsApi(CommonApiMixin, ListAPIView): only_fields = serializers.AppGrantedSerializer.Meta.only_fields serializer_class = serializers.AppGrantedSerializer filterset_fields = { @@ -41,28 +41,34 @@ class AllGrantedApplicationsMixin(CommonApiMixin, ListAPIView): return queryset.only(*self.only_fields) -class UserAllGrantedApplicationsApi(AppRoleAdminMixin, AllGrantedApplicationsMixin): +class UserAllGrantedApplicationsApi(AppRoleAdminMixin, AllGrantedApplicationsApi): pass -class MyAllGrantedApplicationsApi(AppRoleUserMixin, AllGrantedApplicationsMixin): +class MyAllGrantedApplicationsApi(AppRoleUserMixin, AllGrantedApplicationsApi): pass -class ApplicationsAsTreeMixin(SerializeApplicationToTreeNodeMixin): +class ApplicationsAsTreeMixin: """ 将应用序列化成树的结构返回 """ serializer_class = TreeNodeSerializer user: None + filter_queryset: Callable + get_queryset: Callable + get_serializer: Callable def list(self, request, *args, **kwargs): tree_id = request.query_params.get('tree_id', None) parent_info = request.query_params.get('parentInfo', None) queryset = self.filter_queryset(self.get_queryset()) - tree_nodes = self.serialize_applications_with_org( - queryset, tree_id, parent_info, self.user - ) + util = GrantedAppTreeUtil() + + if not tree_id: + tree_nodes = util.create_tree_nodes(queryset) + else: + tree_nodes = util.get_children_nodes(tree_id, parent_info, self.user) serializer = self.get_serializer(tree_nodes, many=True) return Response(data=serializer.data) diff --git a/apps/perms/tree/__init__.py b/apps/perms/tree/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/apps/applications/api/mixin.py b/apps/perms/tree/app.py similarity index 61% rename from apps/applications/api/mixin.py rename to apps/perms/tree/app.py index 35ec0fdb6..e46d05473 100644 --- a/apps/applications/api/mixin.py +++ b/apps/perms/tree/app.py @@ -6,16 +6,12 @@ from rest_framework.generics import get_object_or_404 from common.tree import TreeNode from orgs.models import Organization from assets.models import SystemUser -from applications.utils import KubernetesClient, KubernetesTree +from applications.utils import KubernetesTree +from applications.models import Application from perms.utils.application.permission import get_application_system_user_ids -from ..models import Application - -__all__ = ['SerializeApplicationToTreeNodeMixin'] - - -class SerializeApplicationToTreeNodeMixin: +class GrantedAppTreeUtil: @staticmethod def filter_organizations(applications): organization_ids = set(applications.values_list('org_id', flat=True)) @@ -39,41 +35,15 @@ class SerializeApplicationToTreeNodeMixin: }) return node - def serialize_applications_with_org(self, applications, tree_id, parent_info, user): + @staticmethod + def get_children_nodes(tree_id, parent_info, user): tree_nodes = [] - if not applications: - return tree_nodes - - if not tree_id: - root_node = self.create_root_node() - tree_nodes.append(root_node) - organizations = self.filter_organizations(applications) - - for i, org in enumerate(organizations): - tree_id = urlencode({'org_id': str(org.id)}) - apps = applications.filter(org_id=org.id) - - # 组织节点 - org_node = org.as_tree_node(oid=tree_id, pid=root_node.id) - org_node.name += '({})'.format(apps.count()) - tree_nodes.append(org_node) - - # 类别节点 - category_type_nodes = Application.create_category_type_tree_nodes( - apps, tree_id, show_empty=False - ) - tree_nodes += category_type_nodes - - for app in apps: - app_node = app.as_tree_node(tree_id, k8s_as_tree=True) - tree_nodes.append(app_node) - return tree_nodes - parent_info = dict(parse_qsl(parent_info)) pod_name = parent_info.get('pod') app_id = parent_info.get('app_id') namespace = parent_info.get('namespace') system_user_id = parent_info.get('system_user_id') + if app_id and not any([pod_name, namespace, system_user_id]): app = get_object_or_404(Application, id=app_id) system_user_ids = get_application_system_user_ids(user, app) @@ -84,6 +54,34 @@ class SerializeApplicationToTreeNodeMixin: ) tree_nodes.append(system_user_node) return tree_nodes - tree_nodes = KubernetesTree(tree_id).async_tree_node(parent_info) return tree_nodes + + def create_tree_nodes(self, applications): + tree_nodes = [] + if not applications: + return tree_nodes + + root_node = self.create_root_node() + tree_nodes.append(root_node) + organizations = self.filter_organizations(applications) + + for i, org in enumerate(organizations): + tree_id = urlencode({'org_id': str(org.id)}) + apps = applications.filter(org_id=org.id) + + # 组织节点 + org_node = org.as_tree_node(oid=tree_id, pid=root_node.id) + org_node.name += '({})'.format(apps.count()) + tree_nodes.append(org_node) + + # 类别节点 + category_type_nodes = Application.create_category_type_tree_nodes( + apps, tree_id, show_empty=False + ) + tree_nodes += category_type_nodes + + for app in apps: + app_node = app.as_tree_node(tree_id, k8s_as_tree=True) + tree_nodes.append(app_node) + return tree_nodes diff --git a/apps/settings/api/public.py b/apps/settings/api/public.py index af811cc72..43acffaf0 100644 --- a/apps/settings/api/public.py +++ b/apps/settings/api/public.py @@ -69,6 +69,7 @@ class PublicSettingApi(generics.RetrieveAPIView): "TERMINAL_MAGNUS_ENABLED": settings.TERMINAL_MAGNUS_ENABLED, "TERMINAL_MAGNUS_HOST": settings.TERMINAL_MAGNUS_HOST, "TERMINAL_MAGNUS_MYSQL_PORT": settings.TERMINAL_MAGNUS_MYSQL_PORT, + "TERMINAL_MAGNUS_MARIADB_PORT": settings.TERMINAL_MAGNUS_MARIADB_PORT, "TERMINAL_MAGNUS_POSTGRE_PORT": settings.TERMINAL_MAGNUS_POSTGRE_PORT, # Announcement "ANNOUNCEMENT_ENABLED": settings.ANNOUNCEMENT_ENABLED, diff --git a/apps/settings/serializers/terminal.py b/apps/settings/serializers/terminal.py index b96e5974b..645c9bcfb 100644 --- a/apps/settings/serializers/terminal.py +++ b/apps/settings/serializers/terminal.py @@ -51,6 +51,10 @@ class TerminalSettingSerializer(serializers.Serializer): required=False, label=_("MySQL port"), default=33060, help_text=_('Database proxy MySQL protocol port') ) + TERMINAL_MAGNUS_MARIADB_PORT = serializers.IntegerField( + required=False, label=_("MariaDB port"), default=33061, + help_text=_('Database proxy MySQL protocol port') + ) TERMINAL_MAGNUS_POSTGRE_PORT = serializers.IntegerField( required=False, label=_("PostgreSQL port"), default=54320, help_text=_('Database proxy PostgreSQL port')