diff --git a/agent/app/api/v2/backup.go b/agent/app/api/v2/backup.go
index abf1885f7..f15e9f7f7 100644
--- a/agent/app/api/v2/backup.go
+++ b/agent/app/api/v2/backup.go
@@ -17,7 +17,7 @@ func (b *BaseApi) CheckBackupUsed(c *gin.Context) {
return
}
- if err := backupService.CheckUsed(name); err != nil {
+ if err := backupService.CheckUsed(name, true); err != nil {
helper.BadRequest(c, err)
return
}
diff --git a/agent/app/repo/common.go b/agent/app/repo/common.go
index 5b0f7f39e..0917b4dda 100644
--- a/agent/app/repo/common.go
+++ b/agent/app/repo/common.go
@@ -68,13 +68,13 @@ func WithByDetailName(detailName string) DBOption {
func WithByType(tp string) DBOption {
return func(g *gorm.DB) *gorm.DB {
- return g.Where("type = ?", tp)
+ return g.Where("`type` = ?", tp)
}
}
func WithTypes(types []string) DBOption {
return func(db *gorm.DB) *gorm.DB {
- return db.Where("type in (?)", types)
+ return db.Where("`type` in (?)", types)
}
}
diff --git a/agent/app/service/backup.go b/agent/app/service/backup.go
index 41ff90f50..e17e0622a 100644
--- a/agent/app/service/backup.go
+++ b/agent/app/service/backup.go
@@ -28,7 +28,7 @@ import (
type BackupService struct{}
type IBackupService interface {
- CheckUsed(name string) error
+ CheckUsed(name string, isPublic bool) error
Sync(req dto.SyncFromMaster) error
LoadBackupOptions() ([]dto.BackupOption, error)
@@ -152,7 +152,7 @@ func (u *BackupService) Create(req dto.BackupOperate) error {
return err
}
}
- if req.Type != "LOCAL" {
+ if req.Type != constant.Local {
isOk, err := u.checkBackupConn(&backup)
if err != nil || !isOk {
return buserr.WithMap("ErrBackupCheck", map[string]interface{}{"err": err.Error()}, err)
@@ -212,6 +212,9 @@ func (u *BackupService) Delete(id uint) error {
if backup.Type == constant.Local {
return buserr.New("ErrBackupLocalDelete")
}
+ if err := u.CheckUsed(backup.Name, false); err != nil {
+ return err
+ }
return backupRepo.Delete(repo.WithByID(id))
}
@@ -238,15 +241,8 @@ func (u *BackupService) Update(req dto.BackupOperate) error {
}
newBackup.Credential = string(itemCredential)
if backup.Type == constant.Local {
- if newBackup.Vars != backup.Vars {
- oldPath := backup.BackupPath
- newPath := newBackup.BackupPath
- if strings.HasSuffix(newPath, "/") && newPath != "/" {
- newPath = newPath[:strings.LastIndex(newPath, "/")]
- }
- if err := files.NewFileOp().CopyDir(oldPath, newPath); err != nil {
- return err
- }
+ if err := changeLocalBackup(backup.BackupPath, newBackup.BackupPath); err != nil {
+ return err
}
}
@@ -255,7 +251,7 @@ func (u *BackupService) Update(req dto.BackupOperate) error {
return err
}
}
- if backup.Type != "LOCAL" {
+ if backup.Type != constant.Local {
isOk, err := u.checkBackupConn(&newBackup)
if err != nil || !isOk {
return buserr.WithMap("ErrBackupCheck", map[string]interface{}{"err": err.Error()}, err)
@@ -271,6 +267,8 @@ func (u *BackupService) Update(req dto.BackupOperate) error {
return err
}
newBackup.ID = backup.ID
+ newBackup.CreatedAt = backup.CreatedAt
+ newBackup.UpdatedAt = backup.UpdatedAt
if err := backupRepo.Save(&newBackup); err != nil {
return err
}
@@ -372,6 +370,8 @@ func (u *BackupService) Sync(req dto.SyncFromMaster) error {
return buserr.New("ErrRecordNotFound")
}
accountItem.ID = account.ID
+ accountItem.CreatedAt = account.CreatedAt
+ accountItem.UpdatedAt = account.UpdatedAt
return backupRepo.Save(&accountItem)
default:
return fmt.Errorf("not support such operation %s", req.Operation)
@@ -394,8 +394,8 @@ func (u *BackupService) LoadBackupOptions() ([]dto.BackupOption, error) {
return data, nil
}
-func (u *BackupService) CheckUsed(name string) error {
- account, _ := backupRepo.Get(repo.WithByName(name), backupRepo.WithByPublic(true))
+func (u *BackupService) CheckUsed(name string, isPublic bool) error {
+ account, _ := backupRepo.Get(repo.WithByName(name), backupRepo.WithByPublic(isPublic))
if account.ID == 0 {
return nil
}
@@ -542,3 +542,38 @@ func loadBackupNamesByID(accountIDs string, downloadID uint) ([]string, string,
}
return accounts, downloadAccount, nil
}
+
+func changeLocalBackup(oldPath, newPath string) error {
+ fileOp := files.NewFileOp()
+ if fileOp.Stat(path.Join(oldPath, "app")) {
+ if err := fileOp.Mv(path.Join(oldPath, "app"), newPath); err != nil {
+ return err
+ }
+ }
+ if fileOp.Stat(path.Join(oldPath, "database")) {
+ if err := fileOp.Mv(path.Join(oldPath, "database"), newPath); err != nil {
+ return err
+ }
+ }
+ if fileOp.Stat(path.Join(oldPath, "directory")) {
+ if err := fileOp.Mv(path.Join(oldPath, "directory"), newPath); err != nil {
+ return err
+ }
+ }
+ if fileOp.Stat(path.Join(oldPath, "system_snapshot")) {
+ if err := fileOp.Mv(path.Join(oldPath, "system_snapshot"), newPath); err != nil {
+ return err
+ }
+ }
+ if fileOp.Stat(path.Join(oldPath, "website")) {
+ if err := fileOp.CopyDir(path.Join(oldPath, "website"), newPath); err != nil {
+ return err
+ }
+ }
+ if fileOp.Stat(path.Join(oldPath, "log")) {
+ if err := fileOp.Mv(path.Join(oldPath, "log"), newPath); err != nil {
+ return err
+ }
+ }
+ return nil
+}
diff --git a/agent/app/service/backup_record.go b/agent/app/service/backup_record.go
index 28dcb871a..1d0bfacdf 100644
--- a/agent/app/service/backup_record.go
+++ b/agent/app/service/backup_record.go
@@ -112,7 +112,7 @@ func (u *BackupRecordService) DownloadRecord(info dto.DownloadRecord) (string, e
}
if exist, _ := client.Exist(srcPath); exist {
isOK, err := client.Download(srcPath, targetPath)
- if !isOK {
+ if !isOK || err != nil {
return "", fmt.Errorf("cloud storage download failed, err: %v", err)
}
}
diff --git a/agent/app/service/device_clean.go b/agent/app/service/device_clean.go
index 2cd4d4516..d565f31e7 100644
--- a/agent/app/service/device_clean.go
+++ b/agent/app/service/device_clean.go
@@ -256,7 +256,7 @@ func (u *DeviceService) Clean(req []dto.Clean) {
case "task_log":
pathItem := path.Join(global.Dir.BaseDir, logPath, item.Name)
dropFileOrDir(pathItem)
- if len(item.Name) == 0 {
+ if len(item.Name) != 0 {
_ = taskRepo.Delete(repo.WithByType(item.Name))
}
case "images":
diff --git a/agent/log/writer.go b/agent/log/writer.go
index 36f4061ab..bf4f4bbbf 100644
--- a/agent/log/writer.go
+++ b/agent/log/writer.go
@@ -1,7 +1,6 @@
package log
import (
- "github.com/1Panel-dev/1Panel/agent/constant"
"log"
"os"
"path"
@@ -12,6 +11,7 @@ import (
"time"
"unsafe"
+ "github.com/1Panel-dev/1Panel/agent/constant"
"github.com/1Panel-dev/1Panel/agent/global"
)
@@ -85,7 +85,7 @@ func NewWriterFromConfig(c *Config) (RollingWriter, error) {
return nil, err
}
filepath := FilePath(c)
- file, err := os.OpenFile(filepath, os.O_RDWR|os.O_CREATE|os.O_APPEND, constant.DirPerm)
+ file, err := os.OpenFile(filepath, os.O_RDWR|os.O_CREATE|os.O_APPEND, constant.FilePerm)
if err != nil {
return nil, err
}
diff --git a/core/app/service/backup.go b/core/app/service/backup.go
index 83eab8737..6265b01e2 100644
--- a/core/app/service/backup.go
+++ b/core/app/service/backup.go
@@ -229,10 +229,12 @@ func (u *BackupService) Update(req dto.BackupOperate) error {
return err
}
newBackup.ID = backup.ID
+ newBackup.CreatedAt = backup.CreatedAt
+ newBackup.UpdatedAt = backup.UpdatedAt
if err := backupRepo.Save(&newBackup); err != nil {
return err
}
- go syncAccountToAgent(backup, "update")
+ go syncAccountToAgent(newBackup, "update")
return nil
}
diff --git a/core/constant/common.go b/core/constant/common.go
index 587bad8ba..55998fe0c 100644
--- a/core/constant/common.go
+++ b/core/constant/common.go
@@ -62,7 +62,9 @@ var WebUrlMap = map[string]struct{}{
"/containers/setting": {},
"/containers/dashboard": {},
- "/cronjobs": {},
+ "/cronjobs": {},
+ "/cronjobs/cronjob": {},
+ "/cronjobs/library": {},
"/databases": {},
"/databases/mysql": {},
@@ -146,7 +148,7 @@ var WebUrlMap = map[string]struct{}{
}
var DynamicRoutes = []string{
- `^/containers/container/operate/[^/]+$`,
+ `^/containers/container/operate/[^?]+$`,
`^/containers/composeDetail/[^/]+$`,
`^/databases/mysql/setting/[^/]+/[^/]+$`,
`^/databases/postgresql/setting/[^/]+/[^/]+$`,
diff --git a/frontend/src/views/setting/backup-account/index.vue b/frontend/src/views/setting/backup-account/index.vue
index d92aebfcd..87dbc5770 100644
--- a/frontend/src/views/setting/backup-account/index.vue
+++ b/frontend/src/views/setting/backup-account/index.vue
@@ -74,9 +74,13 @@
{{ $t('setting.refreshTime') + ':' + row.varsJson['refresh_time'] }}
-