From 4900891d1c9c9aa21bf67869a48d0a411982e1cb Mon Sep 17 00:00:00 2001 From: GoEdgeLab Date: Fri, 11 Aug 2023 16:41:43 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E9=94=99=E8=AF=AF=E5=A4=84?= =?UTF-8?q?=E7=90=86=E7=9B=B8=E5=85=B3=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- internal/gen/generate.go | 4 +-- internal/nodes/admin_node.go | 7 ++-- internal/rpc/rpc_client.go | 3 +- internal/tasks/task_check_updates.go | 9 ++--- internal/utils/apinodeutils/upgrader.go | 8 ++--- internal/utils/service_windows.go | 15 ++++---- internal/utils/upgrade_manager.go | 25 ++++++------- .../mysql/mysqlinstallers/mysql_installer.go | 36 +++++++++---------- 8 files changed, 56 insertions(+), 51 deletions(-) diff --git a/internal/gen/generate.go b/internal/gen/generate.go index 1d511005..bba6e7b4 100644 --- a/internal/gen/generate.go +++ b/internal/gen/generate.go @@ -5,7 +5,7 @@ package gen import ( "bytes" "encoding/json" - "errors" + "fmt" "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/servers/server/settings/conds/condutils" "github.com/TeaOSLab/EdgeCommon/pkg/nodeconfigs" "github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs" @@ -22,7 +22,7 @@ import ( func Generate() error { err := generateComponentsJSFile() if err != nil { - return errors.New("generate 'components.src.js' failed: " + err.Error()) + return fmt.Errorf("generate 'components.src.js' failed: %w", err) } return nil diff --git a/internal/nodes/admin_node.go b/internal/nodes/admin_node.go index 0ee6eef2..e18ac89e 100644 --- a/internal/nodes/admin_node.go +++ b/internal/nodes/admin_node.go @@ -2,6 +2,7 @@ package nodes import ( "errors" + "fmt" "github.com/TeaOSLab/EdgeAdmin/internal/configs" teaconst "github.com/TeaOSLab/EdgeAdmin/internal/const" "github.com/TeaOSLab/EdgeAdmin/internal/events" @@ -184,7 +185,7 @@ func (this *AdminNode) checkServer() error { if err == nil { err = os.WriteFile(configFile, data, 0666) if err != nil { - return errors.New("create config file failed: " + err.Error()) + return fmt.Errorf("create config file failed: %w", err) } } else { templateYAML := `# environment code @@ -204,11 +205,11 @@ https: ` err = os.WriteFile(configFile, []byte(templateYAML), 0666) if err != nil { - return errors.New("create config file failed: " + err.Error()) + return fmt.Errorf("create config file failed: %w", err) } } } else { - return errors.New("can not read config from 'configs/server.yaml': " + err.Error()) + return fmt.Errorf("can not read config from 'configs/server.yaml': %w", err) } return nil diff --git a/internal/rpc/rpc_client.go b/internal/rpc/rpc_client.go index d13e49fd..6d5d68f9 100644 --- a/internal/rpc/rpc_client.go +++ b/internal/rpc/rpc_client.go @@ -5,6 +5,7 @@ import ( "crypto/tls" "encoding/base64" "errors" + "fmt" "github.com/TeaOSLab/EdgeAdmin/internal/configs" teaconst "github.com/TeaOSLab/EdgeAdmin/internal/const" "github.com/TeaOSLab/EdgeAdmin/internal/encrypt" @@ -525,7 +526,7 @@ func (this *RPCClient) init() error { for _, endpoint := range this.apiConfig.RPC.Endpoints { u, err := url.Parse(endpoint) if err != nil { - return errors.New("parse endpoint failed: " + err.Error()) + return fmt.Errorf("parse endpoint failed: %w", err) } var apiHost = u.Host diff --git a/internal/tasks/task_check_updates.go b/internal/tasks/task_check_updates.go index fe2b2d6d..383f2635 100644 --- a/internal/tasks/task_check_updates.go +++ b/internal/tasks/task_check_updates.go @@ -5,6 +5,7 @@ package tasks import ( "encoding/json" "errors" + "fmt" teaconst "github.com/TeaOSLab/EdgeAdmin/internal/const" "github.com/TeaOSLab/EdgeAdmin/internal/events" "github.com/TeaOSLab/EdgeAdmin/internal/goman" @@ -63,7 +64,7 @@ func (this *CheckUpdatesTask) Loop() error { if len(valueJSON) > 0 { err = json.Unmarshal(valueJSON, config) if err != nil { - return errors.New("decode config failed: " + err.Error()) + return fmt.Errorf("decode config failed: %w", err) } if !config.AutoCheck { return nil @@ -90,7 +91,7 @@ func (this *CheckUpdatesTask) Loop() error { apiURL = strings.ReplaceAll(apiURL, "${version}", teaconst.Version) resp, err := http.Get(apiURL) if err != nil { - return errors.New("read api failed: " + err.Error()) + return fmt.Errorf("read api failed: %w", err) } defer func() { @@ -98,13 +99,13 @@ func (this *CheckUpdatesTask) Loop() error { }() data, err := io.ReadAll(resp.Body) if err != nil { - return errors.New("read api failed: " + err.Error()) + return fmt.Errorf("read api failed: %w", err) } var apiResponse = &Response{} err = json.Unmarshal(data, apiResponse) if err != nil { - return errors.New("decode version data failed: " + err.Error()) + return fmt.Errorf("decode version data failed: %w", err) } if apiResponse.Code != 200 { diff --git a/internal/utils/apinodeutils/upgrader.go b/internal/utils/apinodeutils/upgrader.go index ae46dd5e..730f1802 100644 --- a/internal/utils/apinodeutils/upgrader.go +++ b/internal/utils/apinodeutils/upgrader.go @@ -79,7 +79,7 @@ func (this *Upgrader) Upgrade() error { // 升级API节点 err = this.upgradeAPINode(sharedClient.Context(0), rpcClient) if err != nil { - return errors.New("upgrade api node failed: " + err.Error()) + return fmt.Errorf("upgrade api node failed: %w", err) } return nil @@ -109,7 +109,7 @@ func (this *Upgrader) upgradeAPINode(ctx context.Context, rpcClient *rpc.RPCClie localVersion, err := lookupLocalVersion() if err != nil { - return errors.New("lookup version failed: " + err.Error()) + return fmt.Errorf("lookup version failed: %w", err) } // 检查要升级的文件 @@ -251,7 +251,7 @@ func (this *Upgrader) upgradeNodes(ctx context.Context, rpcClient *rpc.RPCClient if !ok || stringutil.VersionCompare(remoteDeployFile.Version, deployFile.Version) < 0 { err = this.uploadNodeDeployFile(ctx, rpcClient, deployFile.Path) if err != nil { - return errors.New("upload deploy file '" + filepath.Base(deployFile.Path) + "' failed: " + err.Error()) + return fmt.Errorf("upload deploy file '%s' failed: %w", filepath.Base(deployFile.Path), err) } } } @@ -284,7 +284,7 @@ func (this *Upgrader) upgradeNSNodes(ctx context.Context, rpcClient *rpc.RPCClie if !ok || stringutil.VersionCompare(remoteDeployFile.Version, deployFile.Version) < 0 { err = this.uploadNodeDeployFile(ctx, rpcClient, deployFile.Path) if err != nil { - return errors.New("upload deploy file '" + filepath.Base(deployFile.Path) + "' failed: " + err.Error()) + return fmt.Errorf("upload deploy file '%s' failed: %w", filepath.Base(deployFile.Path), err) } } } diff --git a/internal/utils/service_windows.go b/internal/utils/service_windows.go index ac04e9c4..e82aa461 100644 --- a/internal/utils/service_windows.go +++ b/internal/utils/service_windows.go @@ -4,6 +4,7 @@ package utils import ( "fmt" + teaconst "github.com/TeaOSLab/EdgeAdmin/internal/const" "github.com/iwind/TeaGo/Tea" "golang.org/x/sys/windows" "golang.org/x/sys/windows/svc" @@ -15,7 +16,7 @@ import ( func (this *ServiceManager) Install(exePath string, args []string) error { m, err := mgr.Connect() if err != nil { - return fmt.Errorf("connecting: %s please 'Run as administrator' again", err.Error()) + return fmt.Errorf("connecting: %w please 'Run as administrator' again", err) } defer m.Disconnect() s, err := m.OpenService(this.Name) @@ -30,7 +31,7 @@ func (this *ServiceManager) Install(exePath string, args []string) error { StartType: windows.SERVICE_AUTO_START, }, args...) if err != nil { - return fmt.Errorf("creating: %s", err.Error()) + return fmt.Errorf("creating: %w", err) } defer s.Close() @@ -46,12 +47,12 @@ func (this *ServiceManager) Start() error { defer m.Disconnect() s, err := m.OpenService(this.Name) if err != nil { - return fmt.Errorf("could not access service: %v", err) + return fmt.Errorf("could not access service: %w", err) } defer s.Close() err = s.Start("service") if err != nil { - return fmt.Errorf("could not start service: %v", err) + return fmt.Errorf("could not start service: %w", err) } return nil @@ -61,12 +62,12 @@ func (this *ServiceManager) Start() error { func (this *ServiceManager) Uninstall() error { m, err := mgr.Connect() if err != nil { - return fmt.Errorf("connecting: %s please 'Run as administrator' again", err.Error()) + return fmt.Errorf("connecting: %w please 'Run as administrator' again", err) } defer m.Disconnect() s, err := m.OpenService(this.Name) if err != nil { - return fmt.Errorf("open service: %s", err.Error()) + return fmt.Errorf("open service: %w", err) } // shutdown service @@ -78,7 +79,7 @@ func (this *ServiceManager) Uninstall() error { defer s.Close() err = s.Delete() if err != nil { - return fmt.Errorf("deleting: %s", err.Error()) + return fmt.Errorf("deleting: %w", err) } return nil } diff --git a/internal/utils/upgrade_manager.go b/internal/utils/upgrade_manager.go index 5e78a951..1dfef983 100644 --- a/internal/utils/upgrade_manager.go +++ b/internal/utils/upgrade_manager.go @@ -7,6 +7,7 @@ import ( "crypto/tls" "encoding/json" "errors" + "fmt" teaconst "github.com/TeaOSLab/EdgeAdmin/internal/const" "github.com/iwind/TeaGo/Tea" "github.com/iwind/TeaGo/maps" @@ -111,13 +112,13 @@ func (this *UpgradeManager) Start() error { url = strings.ReplaceAll(url, "${version}", teaconst.Version) req, err := http.NewRequest(http.MethodGet, url, nil) if err != nil { - return errors.New("create url request failed: " + err.Error()) + return fmt.Errorf("create url request failed: %w", err) } req.Header.Set("User-Agent", "Edge-Admin/"+teaconst.Version) resp, err := this.client.Do(req) if err != nil { - return errors.New("read latest version failed: " + err.Error()) + return fmt.Errorf("read latest version failed: %w", err) } defer func() { @@ -130,13 +131,13 @@ func (this *UpgradeManager) Start() error { data, err := io.ReadAll(resp.Body) if err != nil { - return errors.New("read latest version failed: " + err.Error()) + return fmt.Errorf("read latest version failed: %w", err) } var m = maps.Map{} err = json.Unmarshal(data, &m) if err != nil { - return errors.New("invalid response data: " + err.Error() + ", origin data: " + string(data)) + return fmt.Errorf("invalid response data: %w, origin data: %s", err, string(data)) } var code = m.GetInt("code") @@ -172,13 +173,13 @@ func (this *UpgradeManager) Start() error { { req, err := http.NewRequest(http.MethodGet, downloadURL, nil) if err != nil { - return errors.New("create download request failed: " + err.Error()) + return fmt.Errorf("create download request failed: %w", err) } req.Header.Set("User-Agent", "Edge-Admin/"+teaconst.Version) resp, err := this.client.Do(req) if err != nil { - return errors.New("download failed: " + downloadURL + ": " + err.Error()) + return fmt.Errorf("download failed: '%s': %w", downloadURL, err) } defer func() { @@ -201,7 +202,7 @@ func (this *UpgradeManager) Start() error { fp, err := os.Create(destFile) if err != nil { - return errors.New("create file failed: " + err.Error()) + return fmt.Errorf("create file failed: %w", err) } defer func() { @@ -217,7 +218,7 @@ func (this *UpgradeManager) Start() error { if this.isCancelled { return nil } - return errors.New("download failed: " + err.Error()) + return fmt.Errorf("download failed: %w", err) } _ = fp.Close() @@ -228,7 +229,7 @@ func (this *UpgradeManager) Start() error { if err == nil && stat.IsDir() { err = os.RemoveAll(unzipDir) if err != nil { - return errors.New("remove old dir '" + unzipDir + "' failed: " + err.Error()) + return fmt.Errorf("remove old dir '%s' failed: %w", unzipDir, err) } } var unzipCmd = exec.Command(unzipExe, "-q", "-o", destFile, "-d", unzipDir) @@ -236,18 +237,18 @@ func (this *UpgradeManager) Start() error { unzipCmd.Stderr = unzipStderr err = unzipCmd.Run() if err != nil { - return errors.New("unzip installation file failed: " + err.Error() + ": " + unzipStderr.String()) + return fmt.Errorf("unzip installation file failed: %w: %s", err, unzipStderr.String()) } installationFiles, err := filepath.Glob(unzipDir + "/edge-" + this.component + "/*") if err != nil { - return errors.New("lookup installation files failed: " + err.Error()) + return fmt.Errorf("lookup installation files failed: %w", err) } // cp to target dir currentExe, err := os.Executable() if err != nil { - return errors.New("reveal current executable file path failed: " + err.Error()) + return fmt.Errorf("reveal current executable file path failed: %w", err) } var targetDir = filepath.Dir(filepath.Dir(currentExe)) if !Tea.IsTesting() { diff --git a/internal/web/actions/default/setup/mysql/mysqlinstallers/mysql_installer.go b/internal/web/actions/default/setup/mysql/mysqlinstallers/mysql_installer.go index 94cf2531..623ea7c2 100644 --- a/internal/web/actions/default/setup/mysql/mysqlinstallers/mysql_installer.go +++ b/internal/web/actions/default/setup/mysql/mysqlinstallers/mysql_installer.go @@ -50,7 +50,7 @@ func (this *MySQLInstaller) InstallFromFile(xzFilePath string, targetDir string) } else { err = os.Remove(targetDir) if err != nil { - return errors.New("clean target dir '" + targetDir + "' failed: " + err.Error()) + return fmt.Errorf("clean target dir '%s' failed: %w", targetDir, err) } } } @@ -140,7 +140,7 @@ func (this *MySQLInstaller) InstallFromFile(xzFilePath string, targetDir string) { data, err := os.ReadFile("/etc/group") if err != nil { - return errors.New("check user group failed: " + err.Error()) + return fmt.Errorf("check user group failed: %w", err) } if !bytes.Contains(data, []byte("\nmysql:")) { var cmd = utils.NewCmd(groupAddExe, "mysql") @@ -157,7 +157,7 @@ func (this *MySQLInstaller) InstallFromFile(xzFilePath string, targetDir string) { data, err := os.ReadFile("/etc/passwd") if err != nil { - return errors.New("check user failed: " + err.Error()) + return fmt.Errorf("check user failed: %w", err) } if !bytes.Contains(data, []byte("\nmysql:")) { var cmd *utils.Cmd @@ -182,10 +182,10 @@ func (this *MySQLInstaller) InstallFromFile(xzFilePath string, targetDir string) if os.IsNotExist(err) { err = os.MkdirAll(parentDir, 0777) if err != nil { - return errors.New("try to create dir '" + parentDir + "' failed: " + err.Error()) + return fmt.Errorf("try to create dir '%s' failed: %w", parentDir, err) } } else { - return errors.New("check dir '" + parentDir + "' failed: " + err.Error()) + return fmt.Errorf("check dir '%s' failed: %w", parentDir, err) } } else { if !stat.IsDir() { @@ -199,7 +199,7 @@ func (this *MySQLInstaller) InstallFromFile(xzFilePath string, targetDir string) { stat, err := os.Stat(xzFilePath) if err != nil { - return errors.New("could not open the installer file: " + err.Error()) + return fmt.Errorf("could not open the installer file: %w", err) } if stat.IsDir() { return errors.New("'" + xzFilePath + "' not a valid file") @@ -219,12 +219,12 @@ func (this *MySQLInstaller) InstallFromFile(xzFilePath string, targetDir string) if err == nil { err = os.RemoveAll(tmpDir) if err != nil { - return errors.New("clean temporary directory '" + tmpDir + "' failed: " + err.Error()) + return fmt.Errorf("clean temporary directory '%s' failed: %w", tmpDir, err) } } err = os.Mkdir(tmpDir, 0777) if err != nil { - return errors.New("create temporary directory '" + tmpDir + "' failed: " + err.Error()) + return fmt.Errorf("create temporary directory '%s' failed: %w", tmpDir, err) } } @@ -249,10 +249,10 @@ func (this *MySQLInstaller) InstallFromFile(xzFilePath string, targetDir string) if os.IsNotExist(err) { err = os.Mkdir(dataDir, 0777) if err != nil { - return errors.New("create data dir '" + dataDir + "' failed: " + err.Error()) + return fmt.Errorf("create data dir '%s' failed: %w", dataDir, err) } } else { - return errors.New("check data dir '" + dataDir + "' failed: " + err.Error()) + return fmt.Errorf("check data dir '%s' failed: %w", dataDir, err) } } @@ -262,7 +262,7 @@ func (this *MySQLInstaller) InstallFromFile(xzFilePath string, targetDir string) cmd.WithStderr() err = cmd.Run() if err != nil { - return errors.New("chown data dir '" + dataDir + "' failed: " + err.Error()) + return fmt.Errorf("chown data dir '%s' failed: %w", dataDir, err) } } @@ -273,7 +273,7 @@ func (this *MySQLInstaller) InstallFromFile(xzFilePath string, targetDir string) // backup it err = os.Rename(myCnfFile, "/etc/my.cnf."+timeutil.Format("YmdHis")) if err != nil { - return errors.New("backup '/etc/my.cnf' failed: " + err.Error()) + return fmt.Errorf("backup '/etc/my.cnf' failed: %w", err) } } @@ -281,7 +281,7 @@ func (this *MySQLInstaller) InstallFromFile(xzFilePath string, targetDir string) var myCnfTemplate = this.createMyCnf(baseDir, dataDir) err = os.WriteFile(myCnfFile, []byte(myCnfTemplate), 0666) if err != nil { - return errors.New("write '" + myCnfFile + "' failed: " + err.Error()) + return fmt.Errorf("write '%s' failed: %w", myCnfFile, err) } // initialize @@ -312,7 +312,7 @@ func (this *MySQLInstaller) InstallFromFile(xzFilePath string, targetDir string) var passwordFile = baseDir + "/generated-password.txt" err = os.WriteFile(passwordFile, []byte(generatedPassword), 0666) if err != nil { - return errors.New("write password failed: " + err.Error()) + return fmt.Errorf("write password failed: %w", err) } } @@ -320,7 +320,7 @@ func (this *MySQLInstaller) InstallFromFile(xzFilePath string, targetDir string) this.log("moving files to target dir ...") err = os.Rename(baseDir, targetDir) if err != nil { - return errors.New("move '" + baseDir + "' to '" + targetDir + "' failed: " + err.Error()) + return fmt.Errorf("move '%s' to '%s' failed: %w", baseDir, targetDir, err) } baseDir = targetDir @@ -328,7 +328,7 @@ func (this *MySQLInstaller) InstallFromFile(xzFilePath string, targetDir string) myCnfTemplate = this.createMyCnf(baseDir, baseDir+"/data") err = os.WriteFile(myCnfFile, []byte(myCnfTemplate), 0666) if err != nil { - return errors.New("create new '" + myCnfFile + "' failed: " + err.Error()) + return fmt.Errorf("create new '%s' failed: %w", myCnfFile, err) } // start mysql @@ -356,7 +356,7 @@ func (this *MySQLInstaller) InstallFromFile(xzFilePath string, targetDir string) // change password newPassword, err := this.generatePassword() if err != nil { - return errors.New("generate new password failed: " + err.Error()) + return fmt.Errorf("generate new password failed: %w", err) } this.log("changing mysql password ...") @@ -373,7 +373,7 @@ func (this *MySQLInstaller) InstallFromFile(xzFilePath string, targetDir string) var passwordFile = baseDir + "/generated-password.txt" err = os.WriteFile(passwordFile, []byte(this.password), 0666) if err != nil { - return errors.New("write generated file failed: " + err.Error()) + return fmt.Errorf("write generated file failed: %w", err) } // remove temporary directory