@@ -47,9 +47,7 @@ func (u *CronjobService) HandleJob(cronjob *model.Cronjob) {
4747 case "ntp" :
4848 err = u .handleNtpSync ()
4949 u .HandleRmExpired ("LOCAL" , "" , "" , cronjob , nil )
50- case "website" :
51- record .File , err = u .handleBackup (cronjob , record .StartTime )
52- case "database" :
50+ case "website" , "database" , "app" :
5351 record .File , err = u .handleBackup (cronjob , record .StartTime )
5452 case "directory" :
5553 if len (cronjob .SourceDir ) == 0 {
@@ -120,6 +118,9 @@ func (u *CronjobService) handleBackup(cronjob *model.Cronjob, startTime time.Tim
120118 case "database" :
121119 paths , err := u .handleDatabase (* cronjob , backup , startTime )
122120 return strings .Join (paths , "," ), err
121+ case "app" :
122+ paths , err := u .handleApp (* cronjob , backup , startTime )
123+ return strings .Join (paths , "," ), err
123124 case "website" :
124125 paths , err := u .handleWebsite (* cronjob , backup , startTime )
125126 return strings .Join (paths , "," ), err
@@ -221,7 +222,7 @@ func handleTar(sourceDir, targetDir, name, exclusionRules string) error {
221222 path = sourceDir
222223 }
223224
224- commands := fmt .Sprintf ("tar --warning=no-file-changed - zcf %s %s %s" , targetDir + "/" + name , excludeRules , path )
225+ commands := fmt .Sprintf ("tar -zcf %s %s %s" , targetDir + "/" + name , excludeRules , path )
225226 global .LOG .Debug (commands )
226227 stdout , err := cmd .ExecWithTimeOut (commands , 24 * time .Hour )
227228 if err != nil {
@@ -396,6 +397,84 @@ func (u *CronjobService) handleCutWebsiteLog(cronjob *model.Cronjob, startTime t
396397 return strings .Join (filePaths , "," ), nil
397398}
398399
400+ func (u * CronjobService ) handleApp (cronjob model.Cronjob , backup model.BackupAccount , startTime time.Time ) ([]string , error ) {
401+ var paths []string
402+ localDir , err := loadLocalDir ()
403+ if err != nil {
404+ return paths , err
405+ }
406+
407+ var applist []model.AppInstall
408+ if cronjob .AppID == "all" {
409+ applist , err = appInstallRepo .ListBy ()
410+ if err != nil {
411+ return paths , err
412+ }
413+ } else {
414+ itemID , _ := (strconv .Atoi (cronjob .AppID ))
415+ app , err := appInstallRepo .GetFirst (commonRepo .WithByID (uint (itemID )))
416+ if err != nil {
417+ return paths , err
418+ }
419+ applist = append (applist , app )
420+ }
421+
422+ var client cloud_storage.CloudStorageClient
423+ if backup .Type != "LOCAL" {
424+ client , err = NewIBackupService ().NewClient (& backup )
425+ if err != nil {
426+ return paths , err
427+ }
428+ }
429+
430+ for _ , app := range applist {
431+ var record model.BackupRecord
432+ record .Type = "app"
433+ record .Name = app .App .Key
434+ record .DetailName = app .Name
435+ record .Source = "LOCAL"
436+ record .BackupType = backup .Type
437+ backupDir := path .Join (localDir , fmt .Sprintf ("app/%s/%s" , app .App .Key , app .Name ))
438+ record .FileDir = backupDir
439+ itemFileDir := strings .TrimPrefix (backupDir , localDir + "/" )
440+ if ! cronjob .KeepLocal && backup .Type != "LOCAL" {
441+ record .Source = backup .Type
442+ record .FileDir = strings .TrimPrefix (backupDir , localDir + "/" )
443+ }
444+ record .FileName = fmt .Sprintf ("app_%s_%s.tar.gz" , app .Name , startTime .Format ("20060102150405" ))
445+ if err := handleAppBackup (& app , backupDir , record .FileName ); err != nil {
446+ return paths , err
447+ }
448+ record .Name = app .Name
449+ if err := backupRepo .CreateRecord (& record ); err != nil {
450+ global .LOG .Errorf ("save backup record failed, err: %v" , err )
451+ return paths , err
452+ }
453+ if backup .Type != "LOCAL" {
454+ if ! cronjob .KeepLocal {
455+ defer func () {
456+ _ = os .RemoveAll (fmt .Sprintf ("%s/%s" , backupDir , record .FileName ))
457+ }()
458+ }
459+ if len (backup .BackupPath ) != 0 {
460+ itemPath := strings .TrimPrefix (backup .BackupPath , "/" )
461+ itemPath = strings .TrimSuffix (itemPath , "/" ) + "/"
462+ itemFileDir = itemPath + itemFileDir
463+ }
464+ if _ , err = client .Upload (backupDir + "/" + record .FileName , itemFileDir + "/" + record .FileName ); err != nil {
465+ return paths , err
466+ }
467+ }
468+ if backup .Type == "LOCAL" || cronjob .KeepLocal {
469+ paths = append (paths , fmt .Sprintf ("%s/%s" , record .FileDir , record .FileName ))
470+ } else {
471+ paths = append (paths , fmt .Sprintf ("%s/%s" , itemFileDir , record .FileName ))
472+ }
473+ }
474+ u .HandleRmExpired (backup .Type , backup .BackupPath , localDir , & cronjob , client )
475+ return paths , nil
476+ }
477+
399478func (u * CronjobService ) handleWebsite (cronjob model.Cronjob , backup model.BackupAccount , startTime time.Time ) ([]string , error ) {
400479 var paths []string
401480 localDir , err := loadLocalDir ()
0 commit comments