From 4cfc3439cb5ec153519808c96ac0f054d1eea48e Mon Sep 17 00:00:00 2001 From: ssongliu <73214554+ssongliu@users.noreply.github.com> Date: Mon, 3 Mar 2025 17:05:29 +0800 Subject: [PATCH] fix: Modify the recommended application synchronization mode (#8050) --- agent/app/api/v2/dashboard.go | 2 +- agent/app/dto/dashboard.go | 4 ++ agent/app/repo/task.go | 10 +++++ agent/app/service/backup_record.go | 7 +--- agent/app/service/dashboard.go | 37 +++---------------- agent/app/service/device_clean.go | 23 +++++------- core/app/service/app_launcher.go | 34 +++++++---------- frontend/src/components/status/index.vue | 1 + frontend/src/lang/modules/en.ts | 5 +-- frontend/src/lang/modules/ja.ts | 5 +-- frontend/src/lang/modules/ko.ts | 5 +-- frontend/src/lang/modules/ms.ts | 5 +-- frontend/src/lang/modules/pt-br.ts | 5 +-- frontend/src/lang/modules/ru.ts | 5 +-- frontend/src/lang/modules/zh-Hant.ts | 5 +-- frontend/src/lang/modules/zh.ts | 5 +-- .../container/container/operate/index.vue | 2 +- frontend/src/views/cronjob/operate/index.vue | 7 +++- .../setting/backup-account/operate/index.vue | 3 ++ frontend/src/views/setting/license/index.vue | 3 -- frontend/src/views/terminal/setting/index.vue | 2 +- frontend/src/views/toolbox/clean/index.vue | 15 +++++++- .../src/views/website/runtime/java/index.vue | 2 +- .../views/website/runtime/php/check/index.vue | 2 +- 24 files changed, 88 insertions(+), 106 deletions(-) diff --git a/agent/app/api/v2/dashboard.go b/agent/app/api/v2/dashboard.go index 673fb9a50..b9fb3e644 100644 --- a/agent/app/api/v2/dashboard.go +++ b/agent/app/api/v2/dashboard.go @@ -62,7 +62,7 @@ func (b *BaseApi) LoadAppLauncherOption(c *gin.Context) { } func (b *BaseApi) SyncAppLauncher(c *gin.Context) { - var req dto.SyncFromMaster + var req []dto.AppLauncherSync if err := helper.CheckBindAndValidate(&req, c); err != nil { return } diff --git a/agent/app/dto/dashboard.go b/agent/app/dto/dashboard.go index 110feab81..9e43087d5 100644 --- a/agent/app/dto/dashboard.go +++ b/agent/app/dto/dashboard.go @@ -100,6 +100,10 @@ type DashboardCurrent struct { ShotTime time.Time `json:"shotTime"` } +type AppLauncherSync struct { + Key string `json:"key"` +} + type DiskInfo struct { Path string `json:"path"` Type string `json:"type"` diff --git a/agent/app/repo/task.go b/agent/app/repo/task.go index a9bb01d19..5f9f291d0 100644 --- a/agent/app/repo/task.go +++ b/agent/app/repo/task.go @@ -2,6 +2,7 @@ package repo import ( "context" + "github.com/1Panel-dev/1Panel/agent/constant" "github.com/1Panel-dev/1Panel/agent/global" @@ -19,6 +20,7 @@ type ITaskRepo interface { Update(ctx context.Context, task *model.Task) error UpdateRunningTaskToFailed() error CountExecutingTask() (int64, error) + Delete(opts ...DBOption) error WithByID(id string) DBOption WithResourceID(id uint) DBOption @@ -108,3 +110,11 @@ func (t TaskRepo) CountExecutingTask() (int64, error) { err := getTaskDb(t.WithByStatus(constant.StatusExecuting)).Model(&model.Task{}).Count(&count).Error return count, err } + +func (u TaskRepo) Delete(opts ...DBOption) error { + db := global.TaskDB + for _, opt := range opts { + db = opt(db) + } + return db.Delete(&model.Task{}).Error +} diff --git a/agent/app/service/backup_record.go b/agent/app/service/backup_record.go index 47169af05..430b74a20 100644 --- a/agent/app/service/backup_record.go +++ b/agent/app/service/backup_record.go @@ -251,16 +251,13 @@ func (u *BackupRecordService) LoadRecordSize(req dto.SearchForSize) ([]dto.Recor var datas []dto.RecordFileSize var wg sync.WaitGroup for i := 0; i < len(list); i++ { - item := dto.RecordFileSize{ID: list[i].ID} + datas = append(datas, dto.RecordFileSize{ID: list[i].ID}) if val, ok := clientMap[fmt.Sprintf("%v", list[i].DownloadID)]; ok { wg.Add(1) go func(index int) { - item.Size, _ = val.client.Size(path.Join(val.backupPath, list[i].FilePath)) - datas = append(datas, item) + datas[index].Size, _ = val.client.Size(path.Join(val.backupPath, list[i].FilePath)) wg.Done() }(i) - } else { - datas = append(datas, item) } } wg.Wait() diff --git a/agent/app/service/dashboard.go b/agent/app/service/dashboard.go index 23daceb5e..64278d8bf 100644 --- a/agent/app/service/dashboard.go +++ b/agent/app/service/dashboard.go @@ -2,7 +2,6 @@ package service import ( "encoding/json" - "fmt" network "net" "os" "sort" @@ -10,9 +9,6 @@ import ( "sync" "time" - "github.com/1Panel-dev/1Panel/agent/app/repo" - "github.com/1Panel-dev/1Panel/agent/buserr" - "github.com/1Panel-dev/1Panel/agent/app/dto" "github.com/1Panel-dev/1Panel/agent/app/model" "github.com/1Panel-dev/1Panel/agent/constant" @@ -33,7 +29,7 @@ import ( type DashboardService struct{} type IDashboardService interface { - Sync(req dto.SyncFromMaster) error + Sync(req []dto.AppLauncherSync) error LoadOsInfo() (*dto.OsInfo, error) LoadBaseInfo(ioOption string, netOption string) (*dto.DashboardBase, error) @@ -48,33 +44,12 @@ func NewIDashboardService() IDashboardService { return &DashboardService{} } -func (u *DashboardService) Sync(req dto.SyncFromMaster) error { - var launcherItem model.AppLauncher - if err := json.Unmarshal([]byte(req.Data), &launcherItem); err != nil { - return err - } - launcher, _ := launcherRepo.Get(settingRepo.WithByKey(req.Name)) - switch req.Operation { - case "create": - if launcher.ID != 0 { - launcherItem.ID = launcher.ID - return launcherRepo.Save(&launcherItem) - } - return launcherRepo.Create(&launcherItem) - case "delete": - if launcher.ID == 0 { - return buserr.New("ErrRecordNotFound") - } - return launcherRepo.Delete(repo.WithByID(launcher.ID)) - case "update": - if launcher.ID == 0 { - return buserr.New("ErrRecordNotFound") - } - launcherItem.ID = launcher.ID - return launcherRepo.Save(&launcherItem) - default: - return fmt.Errorf("not support such operation %s", req.Operation) +func (u *DashboardService) Sync(req []dto.AppLauncherSync) error { + var launchers []model.AppLauncher + for _, item := range req { + launchers = append(launchers, model.AppLauncher{Key: item.Key}) } + return launcherRepo.SyncAll(launchers) } func (u *DashboardService) LoadOsInfo() (*dto.OsInfo, error) { diff --git a/agent/app/service/device_clean.go b/agent/app/service/device_clean.go index 06d03553d..2cd4d4516 100644 --- a/agent/app/service/device_clean.go +++ b/agent/app/service/device_clean.go @@ -16,6 +16,7 @@ import ( "github.com/docker/docker/api/types/filters" "github.com/1Panel-dev/1Panel/agent/app/dto" + "github.com/1Panel-dev/1Panel/agent/app/repo" "github.com/1Panel-dev/1Panel/agent/app/task" "github.com/1Panel-dev/1Panel/agent/global" "github.com/1Panel-dev/1Panel/agent/utils/cmd" @@ -37,7 +38,6 @@ const ( uploadPath = "1panel/uploads" downloadPath = "1panel/download" logPath = "1panel/log" - taskPath = "1panel/task" ) func (u *DeviceService) Scan() dto.CleanData { @@ -254,18 +254,10 @@ func (u *DeviceService) Clean(req []dto.Clean) { dropFileOrDir(path.Join(global.Dir.BaseDir, logPath, item.Name)) } case "task_log": - pathItem := path.Join(global.Dir.BaseDir, taskPath, item.Name) - dropFileOrDir(path.Join(global.Dir.BaseDir, taskPath, item.Name)) + pathItem := path.Join(global.Dir.BaseDir, logPath, item.Name) + dropFileOrDir(pathItem) if len(item.Name) == 0 { - files, _ := os.ReadDir(pathItem) - if len(files) == 0 { - continue - } - for _, file := range files { - _ = cronjobRepo.DeleteRecord(cronjobRepo.WithByRecordFile(path.Join(pathItem, file.Name()))) - } - } else { - _ = cronjobRepo.DeleteRecord(cronjobRepo.WithByRecordFile(pathItem)) + _ = taskRepo.Delete(repo.WithByType(item.Name)) } case "images": dropImages() @@ -506,8 +498,8 @@ func loadLogTree(fileOp fileUtils.FileOp) []dto.CleanTree { } treeData = append(treeData, dto.CleanTree{ID: uuid.NewString(), Label: "system_log", Size: uint64(size), Children: list1, Type: "system_log", IsRecommend: true}) - path2 := path.Join(global.Dir.BaseDir, taskPath) - list2 := loadTreeWithAllFile(false, path2, "task_log", path2, fileOp) + path2 := path.Join(global.Dir.BaseDir, logPath) + list2 := loadTreeWithDir(false, "task_log", path2, fileOp) size2, _ := fileOp.GetDirSize(path2) treeData = append(treeData, dto.CleanTree{ID: uuid.NewString(), Label: "task_log", Size: uint64(size2), Children: list2, Type: "task_log"}) return treeData @@ -570,6 +562,9 @@ func loadTreeWithDir(isCheck bool, treeType, pathItem string, fileOp fileUtils.F if (treeType == "old_upgrade" || treeType == "upgrade") && !strings.HasPrefix(file.Name(), "upgrade_2023") { continue } + if treeType == "task_log" && file.Name() == "ssl" { + continue + } if file.IsDir() { size, err := fileOp.GetDirSize(path.Join(pathItem, file.Name())) if err != nil { diff --git a/core/app/service/app_launcher.go b/core/app/service/app_launcher.go index 881d58f52..3cbc500c6 100644 --- a/core/app/service/app_launcher.go +++ b/core/app/service/app_launcher.go @@ -9,6 +9,7 @@ import ( "github.com/1Panel-dev/1Panel/core/app/model" "github.com/1Panel-dev/1Panel/core/app/repo" "github.com/1Panel-dev/1Panel/core/constant" + "github.com/1Panel-dev/1Panel/core/utils/req_helper" "github.com/1Panel-dev/1Panel/core/utils/xpack" ) @@ -37,32 +38,23 @@ func (u *LauncherService) Search() ([]string, error) { func (u *LauncherService) ChangeShow(req dto.SettingUpdate) error { launcher, _ := launcherRepo.Get(repo.WithByKey(req.Key)) - if req.Value == constant.StatusEnable { - if launcher.ID != 0 { - go syncLauncherToAgent(launcher, "create") - return nil - } - launcher.Key = req.Key - if err := launcherRepo.Create(&launcher); err != nil { + if req.Value == constant.StatusEnable && launcher.ID == 0 { + if err := launcherRepo.Create(&model.AppLauncher{Key: req.Key}); err != nil { return err } - go syncLauncherToAgent(launcher, "create") - return nil } - if launcher.ID == 0 { - go syncLauncherToAgent(launcher, "delete") - return nil + if req.Value == constant.StatusDisable && launcher.ID != 0 { + if err := launcherRepo.Delete(repo.WithByKey(req.Key)); err != nil { + return err + } } - if err := launcherRepo.Delete(repo.WithByKey(req.Key)); err != nil { - return err - } - go syncLauncherToAgent(launcher, "delete") + go syncLauncherToAgent() return nil } -func syncLauncherToAgent(launcher model.AppLauncher, operation string) { - itemData, _ := json.Marshal(launcher) - itemJson := dto.SyncToAgent{Name: launcher.Key, Operation: operation, Data: string(itemData)} - bodyItem, _ := json.Marshal(itemJson) - _ = xpack.RequestToAllAgent("/api/v2/backups/sync", http.MethodPost, bytes.NewReader((bodyItem))) +func syncLauncherToAgent() { + launchers, _ := launcherRepo.List() + itemData, _ := json.Marshal(launchers) + _, _ = req_helper.NewLocalClient("/api/v2/dashboard/app/launcher/sync", http.MethodPost, bytes.NewReader((itemData))) + _ = xpack.RequestToAllAgent("/api/v2/dashboard/app/launcher/sync", http.MethodPost, bytes.NewReader((itemData))) } diff --git a/frontend/src/components/status/index.vue b/frontend/src/components/status/index.vue index c9362fdf2..77e3366a9 100644 --- a/frontend/src/components/status/index.vue +++ b/frontend/src/components/status/index.vue @@ -63,6 +63,7 @@ const getType = (status: string) => { case 'disable': case 'unhealthy': case 'failed': + case 'lost': return 'danger'; case 'paused': case 'exited': diff --git a/frontend/src/lang/modules/en.ts b/frontend/src/lang/modules/en.ts index d1103a331..5c6689797 100644 --- a/frontend/src/lang/modules/en.ts +++ b/frontend/src/lang/modules/en.ts @@ -3185,9 +3185,8 @@ const message = { 'Detected that there is already 1panel service on this node. Adding this node will use the original service port and installation directory of 1panel. Do you want to continue?', coreExist: 'Detected that there is already 1panel-core service on this node. Unable to add this node, please check and try again!', - agentExist: 'Detected that there is already 1panel-agent service on this node', - forceAdd: 'Force Add', - forceAddHelper: 'Force add will forcibly replace the 1panel-agent service on this node', + agentExist: + 'Detected that the 1panel-agent service already exists on this node. Continuing to add will retain the node data and only replace the 1panel-agent service. Do you want to continue?', reinstallHelper: 'Reinstall node {0}, do you want to continue?', unhealthyCheck: 'Abnormal Check', fixOperation: 'Fix Operation', diff --git a/frontend/src/lang/modules/ja.ts b/frontend/src/lang/modules/ja.ts index 6936a4025..c3e9483bd 100644 --- a/frontend/src/lang/modules/ja.ts +++ b/frontend/src/lang/modules/ja.ts @@ -2997,9 +2997,8 @@ const message = { 'このノードに既に1panelサービスが存在します。このノードを追加すると、1panelの元のサービスポートとインストールディレクトリが使用されます。続行しますか?', coreExist: 'このノードに既に1panel-coreサービスが存在します。このノードを追加できません。確認して再試行してください!', - agentExist: 'このノードに既に1panel-agentサービスが存在します', - forceAdd: '強制追加', - forceAddHelper: '強制追加は、このノードの1panel-agentサービスを強制的に置き換えます', + agentExist: + 'このノードに1panel-agentサービスが既に存在することが検出されました。追加を続行すると、ノードデータは保持され、1panel-agentサービスのみが置き換えられます。続行しますか?', reinstallHelper: 'ノード{0}を再インストールします。続行しますか?', unhealthyCheck: '異常チェック', fixOperation: '修正操作', diff --git a/frontend/src/lang/modules/ko.ts b/frontend/src/lang/modules/ko.ts index d7b5549c9..6f57f80c0 100644 --- a/frontend/src/lang/modules/ko.ts +++ b/frontend/src/lang/modules/ko.ts @@ -2946,9 +2946,8 @@ const message = { '이 노드에 이미 1panel 서비스가 존재합니다. 이 노드를 추가하면 1panel의 원래 서비스 포트와 설치 디렉토리를 사용합니다. 계속하시겠습니까?', coreExist: '이 노드에 이미 1panel-core 서비스가 존재합니다. 이 노드를 추가할 수 없습니다. 확인 후 다시 시도하십시오!', - agentExist: '이 노드에 이미 1panel-agent 서비스가 존재합니다', - forceAdd: '강제 추가', - forceAddHelper: '강제 추가는 이 노드의 1panel-agent 서비스를 강제로 교체합니다', + agentExist: + '이 노드에 1panel-agent 서비스가 이미 존재하는 것으로 감지되었습니다. 추가를 계속하면 노드 데이터는 유지되고 1panel-agent 서비스만 교체됩니다. 계속하시겠습니까?', reinstallHelper: '노드 {0}를 재설치합니다. 계속하시겠습니까?', unhealthyCheck: '비정상 체크', fixOperation: '수정 작업', diff --git a/frontend/src/lang/modules/ms.ts b/frontend/src/lang/modules/ms.ts index f3058f883..17ed8ac5b 100644 --- a/frontend/src/lang/modules/ms.ts +++ b/frontend/src/lang/modules/ms.ts @@ -3065,9 +3065,8 @@ const message = { 'Dikesan bahawa terdapat perkhidmatan 1panel yang sudah ada pada nod ini. Menambah nod ini akan menggunakan port dan direktori pemasangan perkhidmatan asal 1panel. Adakah anda ingin meneruskan?', coreExist: 'Dikesan bahawa terdapat perkhidmatan 1panel-core yang sudah ada pada nod ini. Tidak dapat menambah nod ini, sila semak dan cuba lagi!', - agentExist: 'Dikesan bahawa terdapat perkhidmatan 1panel-agent yang sudah ada pada nod ini', - forceAdd: 'Tambah Secara Paksa', - forceAddHelper: 'Tambah secara paksa akan menggantikan perkhidmatan 1panel-agent pada nod ini', + agentExist: + 'Terbukti bahawa perkhidmatan 1panel-agent sudah wujud pada nod ini. Melanjutkan penambahan akan mengekalkan data nod dan hanya menggantikan perkhidmatan 1panel-agent. Adakah anda ingin meneruskan?', reinstallHelper: 'Pasang semula nod {0}, adakah anda ingin meneruskan?', unhealthyCheck: 'Pemeriksaan Tidak Normal', fixOperation: 'Operasi Pembetulan', diff --git a/frontend/src/lang/modules/pt-br.ts b/frontend/src/lang/modules/pt-br.ts index 71696051d..a899e19d8 100644 --- a/frontend/src/lang/modules/pt-br.ts +++ b/frontend/src/lang/modules/pt-br.ts @@ -3069,9 +3069,8 @@ const message = { 'Detectado que já existe um serviço 1panel neste nó. Adicionar este nó usará a porta e o diretório de instalação do serviço original do 1panel. Deseja continuar?', coreExist: 'Detectado que já existe um serviço 1panel-core neste nó. Não é possível adicionar este nó, por favor verifique e tente novamente!', - agentExist: 'Detectado que já existe um serviço 1panel-agent neste nó', - forceAdd: 'Adicionar Forçadamente', - forceAddHelper: 'Adicionar forçadamente substituirá o serviço 1panel-agent neste nó', + agentExist: + 'Detectado que o serviço 1panel-agent já existe neste nó. Continuar a adicionar irá manter os dados do nó e apenas substituir o serviço 1panel-agent. Você deseja continuar?', reinstallHelper: 'Reinstalar o nó {0}, deseja continuar?', unhealthyCheck: 'Verificação Anormal', fixOperation: 'Operação de Correção', diff --git a/frontend/src/lang/modules/ru.ts b/frontend/src/lang/modules/ru.ts index eb51c96e1..cab5776f6 100644 --- a/frontend/src/lang/modules/ru.ts +++ b/frontend/src/lang/modules/ru.ts @@ -3058,9 +3058,8 @@ const message = { 'Обнаружено, что на этом узле уже существует служба 1panel. Добавление этого узла будет использовать оригинальный порт и каталог установки службы 1panel. Вы хотите продолжить?', coreExist: 'Обнаружено, что на этом узле уже существует служба 1panel-core. Невозможно добавить этот узел, пожалуйста, проверьте и попробуйте снова!', - agentExist: 'Обнаружено, что на этом узле уже существует служба 1panel-agent', - forceAdd: 'Принудительное добавление', - forceAddHelper: 'Принудительное добавление заменит службу 1panel-agent на этом узле', + agentExist: + 'Обнаружено, что служба 1panel-agent уже существует на этом узле. Продолжение добавления сохранит данные узла и только заменит службу 1panel-agent. Вы хотите продолжить?', reinstallHelper: 'Переустановить узел {0}, вы хотите продолжить?', unhealthyCheck: 'Проверка на неисправности', fixOperation: 'Решение проблемы', diff --git a/frontend/src/lang/modules/zh-Hant.ts b/frontend/src/lang/modules/zh-Hant.ts index c535ce612..a5f3f8a4e 100644 --- a/frontend/src/lang/modules/zh-Hant.ts +++ b/frontend/src/lang/modules/zh-Hant.ts @@ -2948,9 +2948,8 @@ const message = { panelExist: '已檢測到該節點上已存在 1panel 服務,新增該節點將沿用 1panel 原服務的埠號及安裝目錄,是否繼續?', coreExist: '已檢測到該節點上已存在 1panel-core 服務,無法新增該節點,請檢查後再試!', - agentExist: '已檢測到該節點上已存在 1panel-agent 服務', - forceAdd: '強制新增', - forceAddHelper: '強制新增將強制替換該節點上的 1panel-agent 服務', + agentExist: + '檢測到該節點上已存在 1panel-agent 服務,繼續添加將保留該節點數據,僅替換 1panel-agent 服務,是否繼續?', reinstallHelper: '重新安裝節點 {0},是否繼續?', unhealthyCheck: '異常檢查', fixOperation: '修復方案', diff --git a/frontend/src/lang/modules/zh.ts b/frontend/src/lang/modules/zh.ts index ce9d1c6d6..5fdb37b70 100644 --- a/frontend/src/lang/modules/zh.ts +++ b/frontend/src/lang/modules/zh.ts @@ -2935,9 +2935,8 @@ const message = { panelExist: '检测到该节点上已存在 1panel 服务,添加该节点将沿用 1panel 原服务的端口以及安装目录,是否继续?', coreExist: '检测到该节点上已存在 1panel-core 服务,无法添加该节点,请检查后重试!', - agentExist: '检测到该节点上已存在 1panel-agent 服务', - forceAdd: '强制添加', - forceAddHelper: '强制添加,将强制替换该节点上的 1panel-agent 服务', + agentExist: + '检测到该节点上已存在 1panel-agent 服务,继续添加将保留该节点数据,仅替换 1panel-agent 服务,是否继续?', reinstallHelper: '重新安装节点 {0}, 是否继续?', unhealthyCheck: '异常检查', fixOperation: '修复方案', diff --git a/frontend/src/views/container/container/operate/index.vue b/frontend/src/views/container/container/operate/index.vue index cb51efedd..09b24b7b3 100644 --- a/frontend/src/views/container/container/operate/index.vue +++ b/frontend/src/views/container/container/operate/index.vue @@ -1,7 +1,7 @@