From 302877771c25c82d562b0716235705f3a689089b Mon Sep 17 00:00:00 2001 From: ssongliu <73214554+ssongliu@users.noreply.github.com> Date: Mon, 31 Mar 2025 17:36:33 +0800 Subject: [PATCH] fix: Fix the problem of recovering application and website task logs (#8281) --- agent/app/service/backup_app.go | 2 +- agent/app/service/backup_website.go | 28 ++++++++++++++++++++-------- agent/app/service/cronjob_backup.go | 2 +- core/i18n/lang/en.yaml | 3 +++ core/i18n/lang/ja.yaml | 3 +++ core/i18n/lang/ko.yaml | 3 +++ core/i18n/lang/ms.yml | 3 +++ core/i18n/lang/pt-BR.yaml | 3 +++ core/i18n/lang/ru.yaml | 3 +++ core/i18n/lang/zh-Hant.yaml | 3 +++ core/i18n/lang/zh.yaml | 3 +++ 11 files changed, 46 insertions(+), 10 deletions(-) diff --git a/agent/app/service/backup_app.go b/agent/app/service/backup_app.go index d57c31378..4b8ee9972 100644 --- a/agent/app/service/backup_app.go +++ b/agent/app/service/backup_app.go @@ -204,7 +204,7 @@ func handleAppRecover(install *model.AppInstall, parentTask *task.Task, recoverF fileOp := files.NewFileOp() if !isRollback { rollbackFile = path.Join(global.Dir.TmpDir, fmt.Sprintf("app/%s_%s.tar.gz", install.Name, time.Now().Format(constant.DateTimeSlimLayout))) - if err := handleAppBackup(install, nil, path.Dir(rollbackFile), path.Base(rollbackFile), "", "", ""); err != nil { + if err := handleAppBackup(install, recoverTask, path.Dir(rollbackFile), path.Base(rollbackFile), "", "", taskID); err != nil { t.Log(fmt.Sprintf("backup app %s for rollback before recover failed, err: %v", install.Name, err)) } } diff --git a/agent/app/service/backup_website.go b/agent/app/service/backup_website.go index a602f8dbe..11517363a 100644 --- a/agent/app/service/backup_website.go +++ b/agent/app/service/backup_website.go @@ -39,7 +39,7 @@ func (u *BackupService) WebsiteBackup(req dto.CommonBackup) error { fileName := fmt.Sprintf("%s_%s.tar.gz", website.Alias, timeNow+common.RandStrAndNum(5)) go func() { - if err = handleWebsiteBackup(&website, backupDir, fileName, "", req.Secret, req.TaskID); err != nil { + if err = handleWebsiteBackup(&website, nil, backupDir, fileName, "", req.Secret, req.TaskID); err != nil { global.LOG.Errorf("backup website %s failed, err: %v", website.Alias, err) return } @@ -82,7 +82,7 @@ func handleWebsiteRecover(website *model.Website, recoverFile string, isRollback isOk := false if !isRollback { rollbackFile := path.Join(global.Dir.TmpDir, fmt.Sprintf("website/%s_%s.tar.gz", website.Alias, time.Now().Format(constant.DateTimeSlimLayout))) - if err := handleWebsiteBackup(website, path.Dir(rollbackFile), path.Base(rollbackFile), "", "", ""); err != nil { + if err := handleWebsiteBackup(website, recoverTask, path.Dir(rollbackFile), path.Base(rollbackFile), "", "", taskID); err != nil { return fmt.Errorf("backup website %s for rollback before recover failed, err: %v", website.Alias, err) } defer func() { @@ -202,12 +202,20 @@ func handleWebsiteRecover(website *model.Website, recoverFile string, isRollback return recoverTask.Execute() } -func handleWebsiteBackup(website *model.Website, backupDir, fileName, excludes, secret, taskID string) error { - backupTask, err := task.NewTaskWithOps(website.Alias, task.TaskBackup, task.TaskScopeWebsite, taskID, website.ID) - if err != nil { - return err +func handleWebsiteBackup(website *model.Website, parentTask *task.Task, backupDir, fileName, excludes, secret, taskID string) error { + var ( + err error + backupTask *task.Task + ) + backupTask = parentTask + if parentTask == nil { + backupTask, err = task.NewTaskWithOps(website.Alias, task.TaskBackup, task.TaskScopeWebsite, taskID, website.ID) + if err != nil { + return err + } } - backupTask.AddSubTask(task.GetTaskName(website.Alias, task.TaskBackup, task.TaskScopeWebsite), func(t *task.Task) error { + + backupWebsite := func(t *task.Task) error { fileOp := files.NewFileOp() tmpDir := fmt.Sprintf("%s/%s", backupDir, strings.ReplaceAll(fileName, ".tar.gz", "")) if !fileOp.Stat(tmpDir) { @@ -273,7 +281,11 @@ func handleWebsiteBackup(website *model.Website, backupDir, fileName, excludes, } t.Log(i18n.GetWithName("CompressFileSuccess", fileName)) return nil - }, nil) + } + backupTask.AddSubTask(task.GetTaskName(website.Alias, task.TaskBackup, task.TaskScopeApp), backupWebsite, nil) + if parentTask != nil { + return backupWebsite(parentTask) + } return backupTask.Execute() } diff --git a/agent/app/service/cronjob_backup.go b/agent/app/service/cronjob_backup.go index bb4ae70f6..ccb9321c1 100644 --- a/agent/app/service/cronjob_backup.go +++ b/agent/app/service/cronjob_backup.go @@ -85,7 +85,7 @@ func (u *CronjobService) handleWebsite(cronjob model.Cronjob, startTime time.Tim record.DownloadAccountID, record.SourceAccountIDs = cronjob.DownloadAccountID, cronjob.SourceAccountIDs backupDir := path.Join(global.Dir.TmpDir, fmt.Sprintf("website/%s", web.Alias)) record.FileName = fmt.Sprintf("website_%s_%s.tar.gz", web.Alias, startTime.Format(constant.DateTimeSlimLayout)+common.RandStrAndNum(5)) - if err := handleWebsiteBackup(&web, backupDir, record.FileName, cronjob.ExclusionRules, cronjob.Secret, taskID); err != nil { + if err := handleWebsiteBackup(&web, nil, backupDir, record.FileName, cronjob.ExclusionRules, cronjob.Secret, taskID); err != nil { return err } downloadPath, err := u.uploadCronjobBackFile(cronjob, accountMap, path.Join(backupDir, record.FileName)) diff --git a/core/i18n/lang/en.yaml b/core/i18n/lang/en.yaml index 5375d3c3c..e62d4f2fc 100644 --- a/core/i18n/lang/en.yaml +++ b/core/i18n/lang/en.yaml @@ -43,6 +43,9 @@ ErrBackupPublic: "Detected that this backup account is not public, please check ErrOSSConn: "Unable to get the latest version, please check the server's external network connectivity." #license +LicenseCheck: 'Check if the license is available' +ErrLicenseInUsed: 'The license is already bound. Please check and try again!' +ErrLicenseExpired: 'The license has expired. Please check and try again!' ErrLicense: "License format error, please check and retry!" ErrLicenseCheck: "License validation failed, please check and retry!" ErrXpackVersion: "License validation failed, this license is version-limited, cannot import, please check and retry!" diff --git a/core/i18n/lang/ja.yaml b/core/i18n/lang/ja.yaml index 984cc2f63..f6eec717d 100644 --- a/core/i18n/lang/ja.yaml +++ b/core/i18n/lang/ja.yaml @@ -44,6 +44,9 @@ ErrOSSConn: "最新バージョンを取得できません。外部ネットワ #license +LicenseCheck: 'ライセンスが利用可能か確認する' +ErrLicenseInUsed: 'このライセンスは既に紐付けられています。確認して再試行してください!' +ErrLicenseExpired: 'このライセンスは期限切れです。確認して再試行してください!' ErrLicense: "ライセンスフォーマットエラー、確認して再試行してください!" ErrLicenseCheck: "ライセンスの確認に失敗しました、確認して再試行してください!" ErrXpackVersion: "ライセンスの確認に失敗しました、このライセンスはバージョン制限があり、正常にインポートできません、確認して再試行してください!" diff --git a/core/i18n/lang/ko.yaml b/core/i18n/lang/ko.yaml index 29161293a..17d3e32da 100644 --- a/core/i18n/lang/ko.yaml +++ b/core/i18n/lang/ko.yaml @@ -43,6 +43,9 @@ ErrBackupPublic: "이 백업 계정이 공개된 것으로 감지되지 않았 ErrOSSConn: "최신 버전을 가져올 수 없습니다. 외부 네트워크 연결을 확인하십시오." #license +LicenseCheck: '라이선스 사용 가능 여부 확인' +ErrLicenseInUsed: '해당 라이선스가 이미 연결되었습니다. 확인 후 다시 시도하세요!' +ErrLicenseExpired: '해당 라이선스가 만료되었습니다. 확인 후 다시 시도하세요!' ErrLicense: "라이선스 형식이 잘못되었습니다. 다시 확인하고 시도해 주세요!" ErrLicenseCheck: "라이선스 검증 실패. 다시 확인하고 시도해 주세요!" ErrXpackVersion: "라이선스 검증 실패, 이 라이선스는 버전 제한이 있습니다. 성공적으로 가져올 수 없습니다. 다시 확인하고 시도해 주세요!" diff --git a/core/i18n/lang/ms.yml b/core/i18n/lang/ms.yml index be23a38a6..898bc3c88 100644 --- a/core/i18n/lang/ms.yml +++ b/core/i18n/lang/ms.yml @@ -43,6 +43,9 @@ ErrBackupPublic: "Akaun sandaran ini dikesan tidak awam, sila semak semula dan c ErrOSSConn: "Tidak dapat mendapatkan versi terkini, sila semak sambungan rangkaian luar pelayan." #license +LicenseCheck: 'Periksa sama ada lesen tersedia' +ErrLicenseInUsed: 'Lesen ini telah terikat. Sila periksa dan cuba lagi!' +ErrLicenseExpired: 'Lesen ini telah tamat tempoh. Sila periksa dan cuba lagi!' ErrLicense: "Format lesen tidak sah, sila semak dan cuba lagi!" ErrLicenseCheck: "Pengesahan lesen gagal, sila semak dan cuba lagi!" ErrXpackVersion: "Pengesahan lesen gagal, lesen ini terhad kepada versi tertentu, sila semak dan cuba lagi!" diff --git a/core/i18n/lang/pt-BR.yaml b/core/i18n/lang/pt-BR.yaml index 59a49edaa..03b2269be 100644 --- a/core/i18n/lang/pt-BR.yaml +++ b/core/i18n/lang/pt-BR.yaml @@ -43,6 +43,9 @@ ErrBackupPublic: "A conta de backup detectada não é pública, por favor verifi ErrOSSConn: "Não foi possível obter a versão mais recente, verifique a conectividade externa do servidor." #license +LicenseCheck: 'Verificar se a licença está disponível' +ErrLicenseInUsed: 'Esta licença já está vinculada. Por favor, verifique e tente novamente!' +ErrLicenseExpired: 'Esta licença expirou. Por favor, verifique e tente novamente!' ErrLicense: "Formato de licença inválido, por favor verifique e tente novamente!" ErrLicenseCheck: "Falha na verificação da licença, por favor verifique e tente novamente!" ErrXpackVersion: "Falha na verificação da licença, esta licença é restrita a uma versão específica, por favor verifique e tente novamente!" diff --git a/core/i18n/lang/ru.yaml b/core/i18n/lang/ru.yaml index 63167b8f6..01d10dde3 100644 --- a/core/i18n/lang/ru.yaml +++ b/core/i18n/lang/ru.yaml @@ -43,6 +43,9 @@ ErrBackupPublic: "Обнаружено, что эта учетная запис ErrOSSConn: "Не удалось получить последнюю версию, проверьте подключение сервера к внешней сети." #license +LicenseCheck: 'Проверить доступность лицензии' +ErrLicenseInUsed: 'Лицензия уже привязана. Пожалуйста, проверьте и повторите попытку!' +ErrLicenseExpired: 'Срок действия лицензии истек. Пожалуйста, проверьте и повторите попытку!' ErrLicense: "Неверный формат лицензии, проверьте и повторите попытку!" ErrLicenseCheck: "Ошибка проверки лицензии, проверьте и повторите попытку!" ErrXpackVersion: "Ошибка проверки лицензии, лицензия ограничена по версии, проверьте и повторите попытку!" diff --git a/core/i18n/lang/zh-Hant.yaml b/core/i18n/lang/zh-Hant.yaml index 00263f3b5..63ca4d5bd 100644 --- a/core/i18n/lang/zh-Hant.yaml +++ b/core/i18n/lang/zh-Hant.yaml @@ -43,6 +43,9 @@ ErrBackupPublic: "檢測到該備份帳號為非公用,請檢查後再試!" ErrOSSConn: "無法獲取最新版本,請確認伺服器是否能夠連接外部網路。" #license +LicenseCheck: '檢查許可證是否可用' +ErrLicenseInUsed: '檢測到該許可證已被綁定,請檢查後重試!' +ErrLicenseExpired: '檢測到該許可證已過期,請檢查後重試!' ErrLicense: "許可證格式錯誤,請檢查後重試!" ErrLicenseCheck: "許可證校驗失敗,請檢查後重試!" ErrXpackVersion: "許可證校驗失敗,該許可證受版本限制,無法成功導入,請檢查後重試!" diff --git a/core/i18n/lang/zh.yaml b/core/i18n/lang/zh.yaml index 9c86e4b5d..9f38f9a82 100644 --- a/core/i18n/lang/zh.yaml +++ b/core/i18n/lang/zh.yaml @@ -44,6 +44,9 @@ ErrBackupPublic: "检测到该备份账号为非公用,请检查后重试!" ErrOSSConn: "无法获取最新版本,请确认服务器是否能够连接外部网络。" #license +LicenseCheck: '检查许可证是否可用' +ErrLicenseInUsed: '检查到该许可证已被绑定,请检查后重试!' +ErrLicenseExpired: '检查到该许可证已过期,请检查后重试!' ErrLicense: "许可证格式错误,请检查后重试!" ErrLicenseCheck: "许可证校验失败,请检查后重试!" ErrXpackVersion: "许可证校验失败,该许可证受版本限制,无法成功导入,请检查后重试!"