From 518eddebd2526f6f4165e0121b8951572a3bda89 Mon Sep 17 00:00:00 2001 From: GoEdgeLab Date: Fri, 11 Aug 2023 17:47:17 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BD=BF=E7=94=A8edge-node=20start=E5=90=AF?= =?UTF-8?q?=E5=8A=A8=E6=97=B6=E5=85=88=E6=A3=80=E6=9F=A5API=E9=85=8D?= =?UTF-8?q?=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cmd/edge-node/main.go | 10 ++++++++++ internal/apps/app_cmd.go | 22 ++++++++++++++++++---- internal/configs/api_config.go | 21 ++++++++++++++++++++- 3 files changed, 48 insertions(+), 5 deletions(-) diff --git a/cmd/edge-node/main.go b/cmd/edge-node/main.go index 798157b..deea3d0 100644 --- a/cmd/edge-node/main.go +++ b/cmd/edge-node/main.go @@ -5,10 +5,12 @@ import ( "flag" "fmt" "github.com/TeaOSLab/EdgeNode/internal/apps" + "github.com/TeaOSLab/EdgeNode/internal/configs" teaconst "github.com/TeaOSLab/EdgeNode/internal/const" "github.com/TeaOSLab/EdgeNode/internal/nodes" "github.com/TeaOSLab/EdgeNode/internal/utils" fsutils "github.com/TeaOSLab/EdgeNode/internal/utils/fs" + "github.com/iwind/TeaGo/Tea" _ "github.com/iwind/TeaGo/bootstrap" "github.com/iwind/TeaGo/logs" "github.com/iwind/TeaGo/maps" @@ -31,6 +33,14 @@ func main() { Usage(teaconst.ProcessName + " [trackers|goman|conns|gc|bandwidth|disk]"). Usage(teaconst.ProcessName + " [ip.drop|ip.reject|ip.remove|ip.close] IP") + app.On("start:before", func() { + // validate config + _, err := configs.LoadAPIConfig() + if err != nil { + fmt.Println("[ERROR]start failed: load api config from '" + Tea.ConfigFile("api.yaml") + "' failed: " + err.Error()) + os.Exit(0) + } + }) app.On("uninstall", func() { // service fmt.Println("Uninstall service ...") diff --git a/internal/apps/app_cmd.go b/internal/apps/app_cmd.go index 1a4e4bc..cad4bd1 100644 --- a/internal/apps/app_cmd.go +++ b/internal/apps/app_cmd.go @@ -130,7 +130,10 @@ func (this *AppCmd) Run(main func()) { // 获取参数 var args = os.Args[1:] if len(args) > 0 { - switch args[0] { + var mainArg = args[0] + this.callDirective(mainArg + ":before") + + switch mainArg { case "-v", "version", "-version", "--version": this.runVersion() return @@ -153,19 +156,19 @@ func (this *AppCmd) Run(main func()) { // 查找指令 for _, directive := range this.directives { - if directive.Arg == args[0] { + if directive.Arg == mainArg { directive.Callback() return } } - fmt.Println("unknown command '" + args[0] + "'") + fmt.Println("unknown command '" + mainArg + "'") return } // 日志 - writer := new(LogWriter) + var writer = new(LogWriter) writer.Init() logs.SetWriter(writer) @@ -337,3 +340,14 @@ func (this *AppCmd) createSymLinks() error { return nil } + +func (this *AppCmd) callDirective(code string) { + for _, directive := range this.directives { + if directive.Arg == code { + if directive.Callback != nil { + directive.Callback() + } + return + } + } +} diff --git a/internal/configs/api_config.go b/internal/configs/api_config.go index 1f0d712..099b416 100644 --- a/internal/configs/api_config.go +++ b/internal/configs/api_config.go @@ -1,6 +1,7 @@ package configs import ( + "errors" "github.com/iwind/TeaGo/Tea" "gopkg.in/yaml.v3" "os" @@ -20,18 +21,36 @@ func NewAPIConfig() *APIConfig { return &APIConfig{} } +func (this *APIConfig) Init() error { + if len(this.RPC.Endpoints) == 0 { + return errors.New("no valid 'rpc.endpoints'") + } + if len(this.NodeId) == 0 { + return errors.New("'nodeId' required") + } + if len(this.Secret) == 0 { + return errors.New("'secret' required") + } + return nil +} + func LoadAPIConfig() (*APIConfig, error) { data, err := os.ReadFile(Tea.ConfigFile("api.yaml")) if err != nil { return nil, err } - config := &APIConfig{} + var config = &APIConfig{} err = yaml.Unmarshal(data, config) if err != nil { return nil, err } + err = config.Init() + if err != nil { + return nil, errors.New("init error: " + err.Error()) + } + return config, nil }