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,74 @@ 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+
57+ _db_module_id_name_map = None
58+ _db_module_name_id_map = None
59+
60+ @property
61+ def db_module_id_name_map (self ):
62+ if self ._db_module_id_name_map is None :
63+ self ._db_module_id_name_map = DBModule .db_module_map ()
64+ return self ._db_module_id_name_map
65+
66+ @property
67+ def db_module_name_id_map (self ):
68+ if self ._db_module_name_id_map is None :
69+ self ._db_module_name_id_map = {
70+ module_name : module_id for module_id , module_name in self .db_module_id_name_map
71+ }
72+ return self ._db_module_name_id_map
4573
4674 def get_conditions (self , attr ):
47- conditions = {"bk_biz_id" : attr ["bk_biz_id" ]}
75+ conditions = Q ()
76+
4877 if attr .get ("cluster_types" ):
49- conditions ["cluster_type__in" ] = attr ["cluster_types" ].split ("," )
78+ conditions &= Q (cluster_type__in = attr ["cluster_types" ].split ("," ))
79+ attr .pop ("cluster_types" )
80+
81+ if attr .get ("db_module_name" ):
82+ db_module_id = self .db_module_name_id_map .get (attr ["db_module_name" ])
83+ if db_module_id is not None :
84+ conditions &= Q (db_module_id = db_module_id )
85+ attr .pop ("db_module_name" )
86+
5087 if attr .get ("immute_domain" ):
51- conditions ["immute_domain__icontains" ] = attr ["immute_domain" ]
52- # 额外过滤参数
53- if attr .get ("phase" ):
54- conditions ["phase" ] = attr ["phase" ]
88+ # 支持从域名查询
89+ conditions &= build_q_for_domain_by_cluster (domains = attr .get ("immute_domain" , "" ).split ("," ))
90+ attr .pop ("immute_domain" )
91+
92+ for field in self .fields .keys ():
93+ if field in attr :
94+ conditions &= Q (** {field : attr [field ]})
95+
5596 return conditions
5697
98+ def to_representation (self , instance ):
99+ representation = super ().to_representation (instance )
100+ db_module_id = representation .get ("db_module_id" )
101+ cloud_info = ResourceQueryHelper .search_cc_cloud (get_cache = True )
102+ representation ["db_module_name" ] = self .db_module_id_name_map .get (db_module_id , "" )
103+ try :
104+ representation ["bk_cloud_name" ] = cloud_info [str (representation ["bk_cloud_id" ])]["bk_cloud_name" ]
105+ except Exception :
106+ representation ["bk_cloud_name" ] = ""
107+
108+ return representation
109+
57110
58111class QueryAllTypeClusterResponseSerializer (serializers .Serializer ):
59112 class Meta :
0 commit comments