1717from backend .configuration .constants import DBType
1818from backend .db_dirty .models import DirtyMachine
1919from backend .db_meta .enums import ClusterPhase , ClusterType
20+ from backend .db_meta .models import DBModule
2021from backend .db_services .dbbase .constants import ResourceType
22+ from backend .db_services .dbbase .resources .query_base import build_q_for_domain_by_cluster
2123from backend .db_services .dbbase .resources .serializers import ListResourceSLZ
2224from backend .db_services .ipchooser .query .resource import ResourceQueryHelper
2325from backend .db_services .redis .resources .redis_cluster .query import RedisListRetrieveResource
@@ -37,23 +39,81 @@ class Meta:
3739
3840
3941class QueryAllTypeClusterSerializer (serializers .Serializer ):
40- bk_biz_id = serializers .IntegerField (help_text = _ ("业务ID" ))
42+ bk_biz_id = serializers .IntegerField (help_text = _ ("业务ID" ), required = False )
4143 cluster_types = serializers .CharField (help_text = _ ("集群类型(逗号分隔)" ), required = False )
4244 immute_domain = serializers .CharField (help_text = _ ("集群域名" ), required = False )
4345 # 额外过滤参数
4446 phase = serializers .ChoiceField (help_text = _ ("集群阶段状态" ), required = False , choices = ClusterPhase .get_choices ())
47+ name = serializers .CharField (help_text = _ ("集群英文名" ), required = False )
48+ alias = serializers .CharField (help_text = _ ("集群别名" ), required = False )
49+ db_module_id = serializers .IntegerField (help_text = _ ("模块id" ), required = False )
50+ major_version = serializers .CharField (help_text = _ ("主版本号" ), required = False )
51+ status = serializers .CharField (help_text = _ ("状态" ), required = False )
52+ bk_cloud_id = serializers .IntegerField (help_text = _ ("云区域 ID" ), required = False )
53+ region = serializers .CharField (help_text = _ ("地域" ), required = False )
54+ db_module_name = serializers .CharField (help_text = _ ("模块名" ), required = False )
55+ cluster_type = serializers .CharField (help_text = _ ("集群类型" ), required = False )
56+ id = serializers .IntegerField (help_text = _ ("集群ID" ), required = False )
57+
58+ _db_module_id_name_map = None
59+ _db_module_name_id_map = None
60+ _cloud_info = None
61+
62+ @property
63+ def db_module_id_name_map (self ):
64+ if self ._db_module_id_name_map is None :
65+ self ._db_module_id_name_map = DBModule .db_module_map ()
66+ return self ._db_module_id_name_map
67+
68+ @property
69+ def db_module_name_id_map (self ):
70+ if self ._db_module_name_id_map is None :
71+ self ._db_module_name_id_map = {
72+ module_name : module_id for module_id , module_name in self .db_module_id_name_map
73+ }
74+ return self ._db_module_name_id_map
75+
76+ @property
77+ def cloud_info (self ):
78+ if self ._cloud_info is None :
79+ self ._cloud_info = ResourceQueryHelper .search_cc_cloud (get_cache = True )
80+ return self ._cloud_info
4581
4682 def get_conditions (self , attr ):
47- conditions = {"bk_biz_id" : attr ["bk_biz_id" ]}
83+ conditions = Q ()
84+
4885 if attr .get ("cluster_types" ):
49- conditions ["cluster_type__in" ] = attr ["cluster_types" ].split ("," )
86+ conditions &= Q (cluster_type__in = attr ["cluster_types" ].split ("," ))
87+ attr .pop ("cluster_types" )
88+
89+ if attr .get ("db_module_name" ):
90+ db_module_id = self .db_module_name_id_map .get (attr ["db_module_name" ])
91+ if db_module_id is not None :
92+ conditions &= Q (db_module_id = db_module_id )
93+ attr .pop ("db_module_name" )
94+
5095 if attr .get ("immute_domain" ):
51- conditions ["immute_domain__icontains" ] = attr ["immute_domain" ]
52- # 额外过滤参数
53- if attr .get ("phase" ):
54- conditions ["phase" ] = attr ["phase" ]
96+ # 支持从域名查询
97+ conditions &= build_q_for_domain_by_cluster (domains = attr .get ("immute_domain" , "" ).split ("," ))
98+ attr .pop ("immute_domain" )
99+
100+ for field in self .fields .keys ():
101+ if field in attr :
102+ conditions &= Q (** {field : attr [field ]})
103+
55104 return conditions
56105
106+ def to_representation (self , instance ):
107+ representation = super ().to_representation (instance )
108+ db_module_id = representation .get ("db_module_id" )
109+ representation ["db_module_name" ] = self .db_module_id_name_map .get (db_module_id , "" )
110+ try :
111+ representation ["bk_cloud_name" ] = self .cloud_info [str (representation ["bk_cloud_id" ])]["bk_cloud_name" ]
112+ except Exception :
113+ representation ["bk_cloud_name" ] = ""
114+
115+ return representation
116+
57117
58118class QueryAllTypeClusterResponseSerializer (serializers .Serializer ):
59119 class Meta :
0 commit comments