From 4a0ee200228d7976df6085ed75b78fe52e41f4a7 Mon Sep 17 00:00:00 2001 From: aby913 Date: Tue, 25 Nov 2025 19:59:24 +0800 Subject: [PATCH] fix: adjust backup policy response structure --- pkg/handlers/handler_backup.go | 14 +++++++++---- pkg/modules/backup/v1/handler.go | 35 +++++++++++++++++++++++++++----- pkg/modules/backup/v1/model.go | 33 ++++++++++-------------------- 3 files changed, 51 insertions(+), 31 deletions(-) diff --git a/pkg/handlers/handler_backup.go b/pkg/handlers/handler_backup.go index 6b9c4fe..ce6fa40 100644 --- a/pkg/handlers/handler_backup.go +++ b/pkg/handlers/handler_backup.go @@ -119,15 +119,21 @@ func (o *BackupHandler) UpdateTotalSize(ctx context.Context, backup *sysv1.Backu return o.update(ctx, backup) } -func (o *BackupHandler) ListBackups(ctx context.Context, owner string, offset, limit int64) (*sysv1.BackupList, error) { +func (o *BackupHandler) ListBackups(ctx context.Context, owner string, offset, limit int64, labelSelector string, fieldSelector string) (*sysv1.BackupList, error) { c, err := o.factory.Sysv1Client() if err != nil { return nil, err } - backups, err := c.SysV1().Backups(constant.DefaultNamespaceOsFramework).List(ctx, metav1.ListOptions{ - LabelSelector: fmt.Sprintf("owner=%s", owner), - }) + var listOpts = metav1.ListOptions{} + if labelSelector != "" { + listOpts.LabelSelector = labelSelector + } + if fieldSelector != "" { + listOpts.FieldSelector = fieldSelector + } + + backups, err := c.SysV1().Backups(constant.DefaultNamespaceOsFramework).List(ctx, listOpts) if err != nil { return nil, err diff --git a/pkg/modules/backup/v1/handler.go b/pkg/modules/backup/v1/handler.go index bf2d541..e18b489 100644 --- a/pkg/modules/backup/v1/handler.go +++ b/pkg/modules/backup/v1/handler.go @@ -49,7 +49,7 @@ func (h *Handler) listBackup(req *restful.Request, resp *restful.Response) { limit := util.ParseToInt64(req.QueryParameter("limit")) offset := util.ParseToInt64(req.QueryParameter("offset")) - backups, err := h.handler.GetBackupHandler().ListBackups(ctx, owner, offset, limit) + backups, err := h.handler.GetBackupHandler().ListBackups(ctx, owner, offset, limit, fmt.Sprintf("owner=%s", owner), "") if err != nil { log.Errorf("get backups error: %v", err) response.Success(resp, parseResponseBackupList(backups, nil, 1)) @@ -215,12 +215,37 @@ func (h *Handler) update(req *restful.Request, resp *restful.Response) { return } - r := &ResponseDescribeBackup{ // TODO - Name: backupId, - BackupPolicies: b.BackupPolicies, + log.Infof("received backup update success, id: %s", backupId) + + backups, err := h.handler.GetBackupHandler().ListBackups(ctx, backupId, 0, 0, "", fmt.Sprintf("metadata.name=%s", backupId)) + if err != nil { + response.HandleError(resp, errors.WithMessagef(err, format, backupId)) + return } - response.Success(resp, r) + result, _, totalPage := handlers.GenericPager(0, 0, backups) + + labelsSelector := h.handler.GetBackupHandler().GetBackupIdForLabels(result) + var allSnapshots = new(sysv1.SnapshotList) + for _, ls := range labelsSelector { + snapshots, err := h.handler.GetSnapshotHandler().ListSnapshots(ctx, 0, 0, ls, "") + if err != nil { + log.Errorf("get snapshots error: %v", err) + continue + } + if snapshots == nil || len(snapshots.Items) == 0 { + continue + } + allSnapshots.Items = append(allSnapshots.Items, snapshots.Items...) + } + + data := parseResponseBackupList(result, allSnapshots, totalPage) + var items = data.Backups + if len(items) == 0 { + response.Success(resp, nil) + } else { + response.Success(resp, items[0]) + } } func (h *Handler) deleteBackupPlan(req *restful.Request, resp *restful.Response) { diff --git a/pkg/modules/backup/v1/model.go b/pkg/modules/backup/v1/model.go index 6c8ea9c..1aef523 100644 --- a/pkg/modules/backup/v1/model.go +++ b/pkg/modules/backup/v1/model.go @@ -148,6 +148,11 @@ type RestoreCancel struct { Event string `json:"event"` } +type ResponseBackupListInfo struct { + TotalPage int64 `json:"totalPage"` + Backups []*ResponseBackupList `json:"backups"` +} + type ResponseBackupList struct { Id string `json:"id"` Name string `json:"name"` @@ -473,10 +478,11 @@ func parseResponseBackupOne(backup *sysv1.Backup, snapshot *sysv1.Snapshot) (map return result, nil } -func parseResponseBackupList(data *sysv1.BackupList, snapshots *sysv1.SnapshotList, totalPage int64) map[string]interface{} { - var result = make(map[string]interface{}) +func parseResponseBackupList(data *sysv1.BackupList, snapshots *sysv1.SnapshotList, totalPage int64) *ResponseBackupListInfo { + var result = new(ResponseBackupListInfo) if data == nil || data.Items == nil || len(data.Items) == 0 { - result["backups"] = []struct{}{} + result.TotalPage = 0 + result.Backups = []*ResponseBackupList{} return result } @@ -535,29 +541,12 @@ func parseResponseBackupList(data *sysv1.BackupList, snapshots *sysv1.SnapshotLi res = append(res, r) } - result["totalPage"] = totalPage - result["backups"] = res + result.TotalPage = totalPage + result.Backups = res return result } -func parseBackupSnapshotDetail(b *SyncBackup) *SnapshotDetails { - return &SnapshotDetails{ - Name: b.Name, - CreationTimestamp: b.CreationTimestamp, - Size: b.Size, - Phase: b.Phase, - FailedMessage: b.FailedMessage, - Owner: b.Owner, - BackupType: b.BackupType, - SnapshotId: b.SnapshotId, - RepositoryPasswordHash: b.RepositoryPasswordHash, - BackupConfigName: b.BackupConfigName, - //RefFullyBackupUid: b.RefFullyBackupUid, - //RefFullyBackupName: b.RefFullyBackupName, - } -} - func parseResponseRestoreDetailFromBackupUrl(restore *sysv1.Restore) (*ResponseRestoreDetail, error) { var result = &ResponseRestoreDetail{} var backupType, _ = handlers.GetRestoreType(restore)