|
17 | 17 | from backend.configuration.constants import DBType |
18 | 18 | from backend.db_dirty.models import DirtyMachine |
19 | 19 | from backend.db_meta.enums import ClusterPhase, ClusterType |
| 20 | +from backend.db_meta.models import DBModule |
20 | 21 | from backend.db_services.dbbase.constants import ResourceType |
| 22 | +from backend.db_services.dbbase.resources.query_base import build_q_for_domain_by_cluster |
21 | 23 | from backend.db_services.dbbase.resources.serializers import ListResourceSLZ |
22 | 24 | from backend.db_services.ipchooser.query.resource import ResourceQueryHelper |
23 | 25 | from backend.db_services.redis.resources.redis_cluster.query import RedisListRetrieveResource |
@@ -55,6 +57,83 @@ def get_conditions(self, attr): |
55 | 57 | return conditions |
56 | 58 |
|
57 | 59 |
|
| 60 | +class QueryAllTypeClusterSerializerV2(serializers.Serializer): |
| 61 | + bk_biz_id = serializers.IntegerField(help_text=_("业务ID"), required=False) |
| 62 | + cluster_types = serializers.CharField(help_text=_("集群类型(逗号分隔)"), required=False) |
| 63 | + immute_domain = serializers.CharField(help_text=_("集群域名"), required=False) |
| 64 | + # 额外过滤参数 |
| 65 | + phase = serializers.ChoiceField(help_text=_("集群阶段状态"), required=False, choices=ClusterPhase.get_choices()) |
| 66 | + name = serializers.CharField(help_text=_("集群英文名"), required=False) |
| 67 | + alias = serializers.CharField(help_text=_("集群别名"), required=False) |
| 68 | + db_module_id = serializers.IntegerField(help_text=_("模块id"), required=False) |
| 69 | + major_version = serializers.CharField(help_text=_("主版本号"), required=False) |
| 70 | + status = serializers.CharField(help_text=_("状态"), required=False) |
| 71 | + bk_cloud_id = serializers.IntegerField(help_text=_("云区域 ID"), required=False) |
| 72 | + region = serializers.CharField(help_text=_("地域"), required=False) |
| 73 | + db_module_name = serializers.CharField(help_text=_("模块名"), required=False) |
| 74 | + cluster_type = serializers.CharField(help_text=_("集群类型"), required=False) |
| 75 | + id = serializers.IntegerField(help_text=_("集群ID"), required=False) |
| 76 | + |
| 77 | + _db_module_id_name_map = None |
| 78 | + _db_module_name_id_map = None |
| 79 | + _cloud_info = None |
| 80 | + |
| 81 | + @property |
| 82 | + def db_module_id_name_map(self): |
| 83 | + if self._db_module_id_name_map is None: |
| 84 | + self._db_module_id_name_map = DBModule.db_module_map() |
| 85 | + return self._db_module_id_name_map |
| 86 | + |
| 87 | + @property |
| 88 | + def db_module_name_id_map(self): |
| 89 | + if self._db_module_name_id_map is None: |
| 90 | + self._db_module_name_id_map = { |
| 91 | + module_name: module_id for module_id, module_name in self.db_module_id_name_map |
| 92 | + } |
| 93 | + return self._db_module_name_id_map |
| 94 | + |
| 95 | + @property |
| 96 | + def cloud_info(self): |
| 97 | + if self._cloud_info is None: |
| 98 | + self._cloud_info = ResourceQueryHelper.search_cc_cloud(get_cache=True) |
| 99 | + return self._cloud_info |
| 100 | + |
| 101 | + def get_conditions(self, attr): |
| 102 | + conditions = Q() |
| 103 | + |
| 104 | + if attr.get("cluster_types"): |
| 105 | + conditions &= Q(cluster_type__in=attr["cluster_types"].split(",")) |
| 106 | + attr.pop("cluster_types") |
| 107 | + |
| 108 | + if attr.get("db_module_name"): |
| 109 | + db_module_id = self.db_module_name_id_map.get(attr["db_module_name"]) |
| 110 | + if db_module_id is not None: |
| 111 | + conditions &= Q(db_module_id=db_module_id) |
| 112 | + attr.pop("db_module_name") |
| 113 | + |
| 114 | + if attr.get("immute_domain"): |
| 115 | + # 支持从域名查询 |
| 116 | + conditions &= build_q_for_domain_by_cluster(domains=attr.get("immute_domain", "").split(",")) |
| 117 | + attr.pop("immute_domain") |
| 118 | + |
| 119 | + for field in self.fields.keys(): |
| 120 | + if field in attr: |
| 121 | + conditions &= Q(**{field: attr[field]}) |
| 122 | + |
| 123 | + return conditions |
| 124 | + |
| 125 | + def to_representation(self, instance): |
| 126 | + representation = super().to_representation(instance) |
| 127 | + db_module_id = representation.get("db_module_id") |
| 128 | + representation["db_module_name"] = self.db_module_id_name_map.get(db_module_id, "") |
| 129 | + try: |
| 130 | + representation["bk_cloud_name"] = self.cloud_info[str(representation["bk_cloud_id"])]["bk_cloud_name"] |
| 131 | + except Exception: |
| 132 | + representation["bk_cloud_name"] = "" |
| 133 | + |
| 134 | + return representation |
| 135 | + |
| 136 | + |
58 | 137 | class QueryAllTypeClusterResponseSerializer(serializers.Serializer): |
59 | 138 | class Meta: |
60 | 139 | swagger_schema_fields = {"example": [{"id": 47, "immute_domain": "mysql.dba.db.com"}]} |
|
0 commit comments