Skip to content

Commit 0f47e31

Browse files
author
v_ycggyao
committed
fix(backend): mysql定点构造新增query_backup_log_from_handler接口查询备份记录 TencentBlueKing#14188
# Reviewed, transaction id: 64147
1 parent f92221f commit 0f47e31

File tree

4 files changed

+47
-6
lines changed

4 files changed

+47
-6
lines changed

dbm-ui/backend/db_package/admin.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,6 @@
1515

1616
@admin.register(models.Package)
1717
class PackageAdmin(admin.ModelAdmin):
18-
list_display = [field.name for field in models.Package._meta.get_fields()]
18+
list_display = [field.name for field in models.Package._meta.concrete_fields]
1919
search_fields = ("name", "version", "path", "md5")
2020
list_filter = ("db_type", "pkg_type", "mode")

dbm-ui/backend/db_report/mysql_backup/handers.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -243,6 +243,19 @@ def get_tendb_priv_backup_info(self, latest_time: datetime = None) -> Dict[str,
243243
logger.info("{} only part of storage instance get privilege file".format(self.cluster.id))
244244
return backup_priv_info
245245

246+
def get_tendbha_rollback_backup_info(self, latest_time: datetime = None):
247+
"""
248+
tendbha 获取指定集群的备份信息,根据备份时间排序
249+
@param latest_time: 查询备份最迟时间
250+
@param limit_one: 是否限制只返回一条备份记录
251+
@return: 返回集群的各个数据节点的备份记录,且backup_id必须一致
252+
"""
253+
if self.backup_source == MySQLBackupSource.LOCAL:
254+
backup_infos = self.get_local_backup_infos(latest_time=latest_time)
255+
else:
256+
backup_infos = self.get_backup_infos(latest_time)
257+
return backup_infos
258+
246259
def get_spider_rollback_backup_info(self, latest_time: datetime = None, limit_one: bool = False) -> Dict[str, Any]:
247260
"""
248261
tendbCluster 查询当前集群集群各个remote节点点的最新一份远程备份,且要求所有的分片backup_id是一致的。

dbm-ui/backend/db_services/mysql/fixpoint_rollback/views.py

Lines changed: 32 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,9 @@ class FixPointRollbackViewSet(viewsets.SystemViewSet):
5050
default_permission_class = [DBManagePermission()]
5151

5252
@common_swagger_auto_schema(
53-
operation_summary=_("通过日志平台获取集群备份记录"),
53+
operation_summary=_(
54+
"通过日志平台获取集群备份记录 # TODO: 当前api已废弃,替换为query_backup_log_from_handler接口(backup_source传remote)"
55+
),
5456
query_serializer=BackupLogSerializer(),
5557
responses={
5658
status.HTTP_200_OK: BackupLogTendbResponseSerializer(),
@@ -70,7 +72,7 @@ def query_backup_log_from_bklog(self, requests, *args, **kwargs):
7072
return Response(logs)
7173

7274
@common_swagger_auto_schema(
73-
operation_summary=_("查询集群的本地备份记录"),
75+
operation_summary=_("查询集群的本地备份记录 # TODO: 当前api已废弃,替换为query_backup_log_from_handler接口(backup_source传local)"),
7476
query_serializer=BackupLogSerializer(),
7577
responses={status.HTTP_200_OK: BackupLocalLogMySQLResponseSerializer()},
7678
tags=[SWAGGER_TAG],
@@ -82,7 +84,7 @@ def query_backup_log_from_local(self, requests, *args, **kwargs):
8284
return Response(logs)
8385

8486
@common_swagger_auto_schema(
85-
operation_summary=_("查询小于回档时间点最近的备份记录"),
87+
operation_summary=_("查询小于回档时间点最近的备份记录 # TODO: 部分接口还在使用, 新需求替换为latest_time_backup_log接口"),
8688
query_serializer=BackupLogRollbackTimeSerializer(),
8789
responses={
8890
status.HTTP_200_OK: BackupLogRollbackTimeTendbResponseSerializer(),
@@ -101,6 +103,33 @@ def query_latest_backup_log(self, requests, *args, **kwargs):
101103
)
102104
)
103105

106+
@common_swagger_auto_schema(
107+
operation_summary=_("通过handler获取集群备份记录"),
108+
query_serializer=FilterBackupLogSerializer(),
109+
responses={
110+
status.HTTP_200_OK: BackupLogTendbResponseSerializer(),
111+
status.HTTP_202_ACCEPTED: BackupLogMySQLResponseSerializer(),
112+
},
113+
tags=[SWAGGER_TAG],
114+
)
115+
@action(methods=["GET"], detail=False, serializer_class=FilterBackupLogSerializer)
116+
def query_backup_log_from_handler(self, requests, *args, **kwargs):
117+
validated_data = self.params_validate(self.get_serializer_class())
118+
cluster_id = validated_data["cluster_id"]
119+
cluster = Cluster.objects.get(id=cluster_id)
120+
db_type = ClusterType.cluster_type_to_db_type(cluster.cluster_type)
121+
latest_time = validated_data.pop("latest_time", None)
122+
# 初始化备份文件对象
123+
handler = MySQLBackupHandler(**validated_data)
124+
125+
# 获取备份结果
126+
result = {}
127+
if db_type == DBType.MySQL.value:
128+
result = handler.get_tendbha_rollback_backup_info(latest_time)
129+
elif db_type == DBType.TenDBCluster.value:
130+
result = handler.get_spider_rollback_backup_info(latest_time)
131+
return Response(result)
132+
104133
@common_swagger_auto_schema(
105134
operation_summary=_("通过获取集群最迟时间的最新一条备份记录"),
106135
query_serializer=FilterBackupLogSerializer(),

dbm-ui/backend/ticket/builders/mysql/mysql_fixpoint_rollback.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,8 +47,7 @@ class FixPointRollbackSerializer(serializers.Serializer):
4747
tables = serializers.ListField(help_text=_("目标table列表"), child=DBTableField())
4848
tables_ignore = serializers.ListField(help_text=_("忽略table列表"), child=DBTableField())
4949

50-
# display fields
51-
affect_db = serializers.ListField(
50+
affect_database_list = serializers.ListField(
5251
help_text=_("影响的DB"), child=serializers.CharField(), allow_null=True, required=False
5352
)
5453

0 commit comments

Comments
 (0)