From cfeb99e38efdaee21d3bfe80c050697be27d2125 Mon Sep 17 00:00:00 2001 From: "qcqcqc@wsl" <1220204124@zust.edu.cn> Date: Tue, 15 Apr 2025 11:30:37 +0800 Subject: [PATCH] =?UTF-8?q?=E6=94=AF=E6=8C=81=E4=BB=8Eserver=E5=8A=A0?= =?UTF-8?q?=E8=BD=BD=E9=85=8D=E7=BD=AE=EF=BC=8C=E5=85=B3=E9=97=ADwelcome?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend-service/pkg/service/service.go | 2 +- config-loader/internal/utils/config_loader.go | 15 +++++++ config-loader/pkg/manager/config_manager.go | 19 ++++++-- config/config.yaml | 6 ++- shared/pkg/client/client.go | 4 +- shared/pkg/constants/server.go | 4 +- updater/cmd/main.go | 44 ++++++++++++------- version/handler/handler.go | 2 +- 8 files changed, 69 insertions(+), 27 deletions(-) diff --git a/backend-service/pkg/service/service.go b/backend-service/pkg/service/service.go index 7f450cc..1088890 100644 --- a/backend-service/pkg/service/service.go +++ b/backend-service/pkg/service/service.go @@ -66,7 +66,7 @@ type Service struct { func NewService() *Service { tasks := []Task{ NewConfigManagerTask(), // 添加配置管理器任务 - NewWelcomeTask(), + // NewWelcomeTask(), NewUnixSocketTask(), } diff --git a/config-loader/internal/utils/config_loader.go b/config-loader/internal/utils/config_loader.go index b0bacdc..e5e73f9 100644 --- a/config-loader/internal/utils/config_loader.go +++ b/config-loader/internal/utils/config_loader.go @@ -5,6 +5,7 @@ import ( "os" "bash_go_service/config-loader/internal/models" + "bash_go_service/shared/pkg/client" "bash_go_service/shared/pkg/constants" "bash_go_service/shared/pkg/logger" ) @@ -56,6 +57,20 @@ func LoadConfigFromFile(filename string) (*models.JSONConfig, error) { return &config, nil } +func LoadConfigFromServer() (*models.JSONConfig, error) { + var config models.JSONConfig + + cli := client.NewClient() + err := cli.Get(constants.GetConfigApi, nil, &config) + if err != nil { + logger.Error("Failed to read config file: %v", err) + return nil, err + } + + logger.Info("Configuration successfully loaded from file with skip rules added") + return &config, nil +} + func ConvertToCConfig(jsonConfig *models.JSONConfig) *models.ConfigData { logger.Debug("Converting JSON config to C config") diff --git a/config-loader/pkg/manager/config_manager.go b/config-loader/pkg/manager/config_manager.go index 8e23238..903e2c9 100644 --- a/config-loader/pkg/manager/config_manager.go +++ b/config-loader/pkg/manager/config_manager.go @@ -10,6 +10,8 @@ import ( "bash_go_service/config-loader/internal/shm" "bash_go_service/config-loader/internal/utils" "bash_go_service/shared/pkg/logger" + + "github.com/spf13/viper" ) // ConfigManager 负责配置的加载和同步 @@ -104,10 +106,19 @@ func (cm *ConfigManager) syncFromFile() error { cm.mu.Lock() defer cm.mu.Unlock() - logger.Debug("Loading configuration from file: %s", cm.configFile) - - // 从文件加载 JSON 配置 - jsonConfig, err := utils.LoadConfigFromFile(cm.configFile) + loader := viper.GetString("bash_config.loader") + var jsonConfig *models.JSONConfig + var err error + if loader == "SERVER" { + logger.Info("Loading configuration from server") + jsonConfig, err = utils.LoadConfigFromServer() + } else if loader == "FILE" { + logger.Info("Loading configuration from file") + jsonConfig, err = utils.LoadConfigFromFile(cm.configFile) + } else { + logger.Info("No loader specified, loading configuration from server by default") + jsonConfig, err = utils.LoadConfigFromServer() + } if err != nil { return fmt.Errorf("failed to load config file: %w", err) } diff --git a/config/config.yaml b/config/config.yaml index bae234e..c3c711c 100644 --- a/config/config.yaml +++ b/config/config.yaml @@ -1,4 +1,6 @@ machine_registry: - endpoint: "http://localhost:9900" + endpoint: "http://localhost:3001/endpoint" log: - level: DEBUG \ No newline at end of file + level: DEBUG +bash_config: + loader: SERVER \ No newline at end of file diff --git a/shared/pkg/client/client.go b/shared/pkg/client/client.go index eafbb0a..a7c4214 100644 --- a/shared/pkg/client/client.go +++ b/shared/pkg/client/client.go @@ -8,6 +8,8 @@ import ( "time" "bash_go_service/shared/pkg/constants" + + "github.com/spf13/viper" ) type Client struct { @@ -53,7 +55,7 @@ func NewClient(opts ...ClientOption) *Client { ctx, cancel := context.WithCancel(context.Background()) client := &Client{ - baseURL: constants.BaseUrl, + baseURL: viper.GetString("machine_registry.endpoint"), ctx: ctx, cancel: cancel, client: &http.Client{ diff --git a/shared/pkg/constants/server.go b/shared/pkg/constants/server.go index 4a87fbc..7efc337 100644 --- a/shared/pkg/constants/server.go +++ b/shared/pkg/constants/server.go @@ -3,13 +3,13 @@ package constants import "time" const ( - BaseUrl = "http://localhost:9956" ConnectionTimeout = 5 * time.Second KeepaliveTimeout = 30 * time.Second IdleConnTimeout = 10 * time.Second ClientTimeout = 30 * time.Second - MachineInfoApi = "/machine/info" + MachineInfoApi = "/machine" GetVersionApi = "/version" QuestionStreamApi = "/question" DownloadNewApi = "/download" + GetConfigApi = "/config" ) diff --git a/updater/cmd/main.go b/updater/cmd/main.go index 1034626..da7a532 100644 --- a/updater/cmd/main.go +++ b/updater/cmd/main.go @@ -5,20 +5,28 @@ import ( "os" "os/exec" "path/filepath" + "strconv" ) func main() { - if len(os.Args) < 4 { - fmt.Println("Usage: updater ") + if len(os.Args) < 5 { + fmt.Println("Usage: updater ") os.Exit(1) } oldPath := os.Args[1] newPath := os.Args[2] targetPath := os.Args[3] + shouldStartStr := os.Args[4] + + shouldStart, err := strconv.ParseBool(shouldStartStr) + if err != nil { + fmt.Printf("Invalid value for shouldStart: %v\n", err) + os.Exit(1) + } // 替换当前程序 - err := os.Rename(newPath, targetPath) + err = os.Rename(newPath, targetPath) if err != nil { fmt.Printf("Failed to replace executable: %v\n", err) _ = os.Rename(oldPath, targetPath) @@ -35,19 +43,23 @@ func main() { os.Exit(1) } - // 启动新程序 - cmd := exec.Command(targetPath) - cmd.Stdout = os.Stdout - cmd.Stderr = os.Stderr - cmd.Dir = filepath.Dir(targetPath) + if shouldStart { + // 启动新程序 + cmd := exec.Command(targetPath) + cmd.Stdout = os.Stdout + cmd.Stderr = os.Stderr + cmd.Dir = filepath.Dir(targetPath) - err = cmd.Start() - if err != nil { - fmt.Printf("Failed to start new process: %v\n", err) - // 回滚 - _ = os.Rename(oldPath, targetPath) - os.Exit(1) + err = cmd.Start() + if err != nil { + fmt.Printf("Failed to start new process: %v\n", err) + // 回滚 + _ = os.Rename(oldPath, targetPath) + os.Exit(1) + } + + fmt.Println("New process started successfully.") + } else { + fmt.Println("Replacement completed. New process not started (shouldStart = false).") } - - fmt.Println("New process started successfully.") } diff --git a/version/handler/handler.go b/version/handler/handler.go index 2ba4d34..074eb68 100644 --- a/version/handler/handler.go +++ b/version/handler/handler.go @@ -95,7 +95,7 @@ func DoUpdate() { // 启动 updater 进行替换 updaterPath := filepath.Join(exeDir, updaterExeName) - cmd := exec.Command(updaterPath, backupPath, newExePath, exePath) + cmd := exec.Command(updaterPath, backupPath, newExePath, exePath, "true") cmd.Stdout = os.Stdout cmd.Stderr = os.Stderr