From 6d879b94bd0ed1c6162c0785a5234f359be0a8f0 Mon Sep 17 00:00:00 2001 From: ssongliu Date: Thu, 7 Aug 2025 14:05:34 +0800 Subject: [PATCH] feat: Optimize backup filename format for cronjob --- agent/app/service/cronjob_backup.go | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/agent/app/service/cronjob_backup.go b/agent/app/service/cronjob_backup.go index 495efd7c494b..45fdd47886a6 100644 --- a/agent/app/service/cronjob_backup.go +++ b/agent/app/service/cronjob_backup.go @@ -44,7 +44,7 @@ func (u *CronjobService) handleApp(cronjob model.Cronjob, startTime time.Time, t record.DetailName = app.Name record.DownloadAccountID, record.SourceAccountIDs = cronjob.DownloadAccountID, cronjob.SourceAccountIDs backupDir := path.Join(global.Dir.LocalBackupDir, fmt.Sprintf("tmp/app/%s/%s", app.App.Key, app.Name)) - record.FileName = fmt.Sprintf("app_%s_%s.tar.gz", app.Name, startTime.Format(constant.DateTimeSlimLayout)+common.RandStrAndNum(5)) + record.FileName = simplifiedFileName(fmt.Sprintf("app_%s_%s.tar.gz", app.Name, startTime.Format(constant.DateTimeSlimLayout)+common.RandStrAndNum(5))) if err := doAppBackup(&app, task, backupDir, record.FileName, cronjob.ExclusionRules, cronjob.Secret); err != nil { if retry < int(cronjob.RetryTimes) || !cronjob.IgnoreErr { retry++ @@ -95,7 +95,7 @@ func (u *CronjobService) handleWebsite(cronjob model.Cronjob, startTime time.Tim record.DetailName = web.Alias record.DownloadAccountID, record.SourceAccountIDs = cronjob.DownloadAccountID, cronjob.SourceAccountIDs backupDir := path.Join(global.Dir.LocalBackupDir, fmt.Sprintf("tmp/website/%s", web.Alias)) - record.FileName = fmt.Sprintf("website_%s_%s.tar.gz", web.Alias, startTime.Format(constant.DateTimeSlimLayout)+common.RandStrAndNum(5)) + record.FileName = simplifiedFileName(fmt.Sprintf("website_%s_%s.tar.gz", web.Alias, startTime.Format(constant.DateTimeSlimLayout)+common.RandStrAndNum(5))) if err := doWebsiteBackup(&web, taskItem, backupDir, record.FileName, cronjob.ExclusionRules, cronjob.Secret); err != nil { if retry < int(cronjob.RetryTimes) || !cronjob.IgnoreErr { @@ -150,7 +150,7 @@ func (u *CronjobService) handleDatabase(cronjob model.Cronjob, startTime time.Ti record.DownloadAccountID, record.SourceAccountIDs = cronjob.DownloadAccountID, cronjob.SourceAccountIDs backupDir := path.Join(global.Dir.LocalBackupDir, fmt.Sprintf("tmp/database/%s/%s/%s", dbInfo.DBType, record.Name, dbInfo.Name)) - record.FileName = fmt.Sprintf("db_%s_%s.sql.gz", dbInfo.Name, startTime.Format(constant.DateTimeSlimLayout)+common.RandStrAndNum(5)) + record.FileName = simplifiedFileName(fmt.Sprintf("db_%s_%s.sql.gz", dbInfo.Name, startTime.Format(constant.DateTimeSlimLayout)+common.RandStrAndNum(5))) if cronjob.DBType == "mysql" || cronjob.DBType == "mariadb" || cronjob.DBType == "mysql-cluster" { if err := doMysqlBackup(dbInfo, backupDir, record.FileName); err != nil { if retry < int(cronjob.RetryTimes) || !cronjob.IgnoreErr { @@ -204,6 +204,7 @@ func (u *CronjobService) handleDirectory(cronjob model.Cronjob, startTime time.T if cronjob.IsDir || len(strings.Split(cronjob.SourceDir, ",")) == 1 { fileName = loadFileName(cronjob.SourceDir) } + fileName = simplifiedFileName(fileName) backupDir := path.Join(global.Dir.LocalBackupDir, fmt.Sprintf("tmp/%s/%s", cronjob.Type, cronjob.Name)) fileOp := files.NewFileOp() @@ -563,3 +564,15 @@ func loadFileName(src string) string { timestamp := time.Now().Format(constant.DateTimeSlimLayout) return fmt.Sprintf("%s_%s_%s.tar.gz", cleanName, timestamp, common.RandStrAndNum(2)) } + +func simplifiedFileName(name string) string { + name = strings.ReplaceAll(name, "/", "_") + name = strings.ReplaceAll(name, ":", "_") + name = strings.ReplaceAll(name, "*", "_") + name = strings.ReplaceAll(name, "?", "_") + name = strings.ReplaceAll(name, "\"", "_") + name = strings.ReplaceAll(name, "<", "_") + name = strings.ReplaceAll(name, ">", "_") + name = strings.ReplaceAll(name, "|", "_") + return name +}