diff --git a/agent/app/service/backup_website.go b/agent/app/service/backup_website.go index ec24dca06..a602f8dbe 100644 --- a/agent/app/service/backup_website.go +++ b/agent/app/service/backup_website.go @@ -184,7 +184,7 @@ func handleWebsiteRecover(website *model.Website, recoverFile string, isRollback } taskName := i18n.GetMsgByKey("TaskRecover") + i18n.GetMsgByKey("websiteDir") t.Log(taskName) - if err = fileOp.TarGzExtractPro(fmt.Sprintf("%s/%s.web.tar.gz", tmpPath, website.Alias), GetOpenrestyDir(SitesRootDir), secret); err != nil { + if err = fileOp.TarGzExtractPro(fmt.Sprintf("%s/%s.web.tar.gz", tmpPath, website.Alias), GetOpenrestyDir(SitesRootDir), ""); err != nil { t.LogFailedWithErr(taskName, err) return err } diff --git a/agent/app/service/cronjob_backup.go b/agent/app/service/cronjob_backup.go index 8ccf4093e..795cdcae1 100644 --- a/agent/app/service/cronjob_backup.go +++ b/agent/app/service/cronjob_backup.go @@ -80,7 +80,7 @@ func (u *CronjobService) handleWebsite(cronjob model.Cronjob, startTime time.Tim record.From = "cronjob" record.Type = "website" record.CronjobID = cronjob.ID - record.Name = web.PrimaryDomain + record.Name = web.Alias record.DetailName = web.Alias record.DownloadAccountID, record.SourceAccountIDs = cronjob.DownloadAccountID, cronjob.SourceAccountIDs backupDir := path.Join(global.Dir.TmpDir, fmt.Sprintf("website/%s", web.PrimaryDomain)) @@ -150,7 +150,7 @@ func (u *CronjobService) handleDirectory(cronjob model.Cronjob, startTime time.T if err != nil { return err } - fileName := fmt.Sprintf("directory%s_%s.tar.gz", strings.ReplaceAll(cronjob.SourceDir, "/", "_"), startTime.Format(constant.DateTimeSlimLayout)+common.RandStrAndNum(5)) + fileName := fmt.Sprintf("%s.tar.gz", startTime.Format(constant.DateTimeSlimLayout)+common.RandStrAndNum(5)) backupDir := path.Join(global.Dir.TmpDir, fmt.Sprintf("%s/%s", cronjob.Type, cronjob.Name)) fileOp := files.NewFileOp() @@ -160,7 +160,7 @@ func (u *CronjobService) handleDirectory(cronjob model.Cronjob, startTime time.T } } else { fileLists := strings.Split(cronjob.SourceDir, ",") - if err := fileOp.Compress(fileLists, backupDir, fileName, files.TarGz, cronjob.Secret); err != nil { + if err := fileOp.TarGzFilesWithCompressPro(fileLists, path.Join(backupDir, fileName), cronjob.Secret); err != nil { return err } } diff --git a/agent/utils/files/file_op.go b/agent/utils/files/file_op.go index 5cd7c68ae..e034f0549 100644 --- a/agent/utils/files/file_op.go +++ b/agent/utils/files/file_op.go @@ -7,7 +7,6 @@ import ( "crypto/tls" "encoding/json" "fmt" - "github.com/1Panel-dev/1Panel/agent/buserr" "io" "io/fs" "net/http" @@ -19,6 +18,8 @@ import ( "strings" "time" + "github.com/1Panel-dev/1Panel/agent/buserr" + "github.com/1Panel-dev/1Panel/agent/constant" "github.com/1Panel-dev/1Panel/agent/utils/cmd" "github.com/1Panel-dev/1Panel/agent/utils/req_helper" @@ -758,6 +759,28 @@ func (f FileOp) TarGzCompressPro(withDir bool, src, dst, secret, exclusionRules return cmd.ExecCmdWithDir(commands, workdir) } +func (f FileOp) TarGzFilesWithCompressPro(list []string, dst, secret string) error { + if !f.Stat(path.Dir(dst)) { + if err := f.Fs.MkdirAll(path.Dir(dst), constant.FilePerm); err != nil { + return err + } + } + + var filelist []string + for _, item := range list { + filelist = append(filelist, "-C "+path.Dir(item)+" "+path.Base(item)) + } + commands := "" + if len(secret) != 0 { + commands = fmt.Sprintf("tar --warning=no-file-changed --ignore-failed-read -zcf - %s | openssl enc -aes-256-cbc -salt -k '%s' -out %s", strings.Join(filelist, " "), secret, dst) + global.LOG.Debug(strings.ReplaceAll(commands, fmt.Sprintf(" %s ", secret), "******")) + } else { + commands = fmt.Sprintf("tar --warning=no-file-changed --ignore-failed-read -zcf %s %s", dst, strings.Join(filelist, " ")) + global.LOG.Debug(commands) + } + return cmd.ExecCmd(commands) +} + func (f FileOp) TarGzExtractPro(src, dst string, secret string) error { if _, err := os.Stat(path.Dir(dst)); err != nil && os.IsNotExist(err) { if err = os.MkdirAll(path.Dir(dst), os.ModePerm); err != nil { diff --git a/frontend/src/components/backup/index.vue b/frontend/src/components/backup/index.vue index f4ea7ac1c..f7ec0347f 100644 --- a/frontend/src/components/backup/index.vue +++ b/frontend/src/components/backup/index.vue @@ -78,7 +78,7 @@ size="small" @close="handleBackupClose" > - + { if (editorRef.value && scrollerElement.value == undefined) { const parentElement = editorRef.value.$el as HTMLElement; scrollerElement.value = parentElement.querySelector('.hljs') as HTMLElement; - scrollerElement.value.style['min-height'] = '500px'; + scrollerElement.value.style['min-height'] = '100px'; scrollerElement.value.style['max-height'] = 'calc(100vh - ' + props.heightDiff + 'px)'; } }; diff --git a/frontend/src/views/container/setting/sock-path/index.vue b/frontend/src/views/container/setting/sock-path/index.vue index 1270c7eaa..c3b1224cb 100644 --- a/frontend/src/views/container/setting/sock-path/index.vue +++ b/frontend/src/views/container/setting/sock-path/index.vue @@ -32,7 +32,7 @@ import { reactive, ref } from 'vue'; import i18n from '@/lang'; import { MsgSuccess } from '@/utils/message'; -import { updateSetting } from '@/api/modules/setting'; +import { updateAgentSetting } from '@/api/modules/setting'; import { ElMessageBox, FormInstance } from 'element-plus'; const emit = defineEmits<{ (e: 'search'): void }>(); @@ -85,7 +85,7 @@ const onSubmit = async (formEl: FormInstance | undefined) => { ? form.dockerSockPath : 'unix://' + form.dockerSockPath, }; - await updateSetting(params) + await updateAgentSetting(params) .then(() => { loading.value = false; handleClose(); diff --git a/frontend/src/views/log/operation/index.vue b/frontend/src/views/log/operation/index.vue index d56f33b82..5973fbf6e 100644 --- a/frontend/src/views/log/operation/index.vue +++ b/frontend/src/views/log/operation/index.vue @@ -12,28 +12,37 @@