使用edge-node start启动时先检查API配置

This commit is contained in:
GoEdgeLab
2023-08-11 17:47:17 +08:00
parent fdc82542ee
commit 518eddebd2
3 changed files with 48 additions and 5 deletions

View File

@@ -5,10 +5,12 @@ import (
"flag" "flag"
"fmt" "fmt"
"github.com/TeaOSLab/EdgeNode/internal/apps" "github.com/TeaOSLab/EdgeNode/internal/apps"
"github.com/TeaOSLab/EdgeNode/internal/configs"
teaconst "github.com/TeaOSLab/EdgeNode/internal/const" teaconst "github.com/TeaOSLab/EdgeNode/internal/const"
"github.com/TeaOSLab/EdgeNode/internal/nodes" "github.com/TeaOSLab/EdgeNode/internal/nodes"
"github.com/TeaOSLab/EdgeNode/internal/utils" "github.com/TeaOSLab/EdgeNode/internal/utils"
fsutils "github.com/TeaOSLab/EdgeNode/internal/utils/fs" fsutils "github.com/TeaOSLab/EdgeNode/internal/utils/fs"
"github.com/iwind/TeaGo/Tea"
_ "github.com/iwind/TeaGo/bootstrap" _ "github.com/iwind/TeaGo/bootstrap"
"github.com/iwind/TeaGo/logs" "github.com/iwind/TeaGo/logs"
"github.com/iwind/TeaGo/maps" "github.com/iwind/TeaGo/maps"
@@ -31,6 +33,14 @@ func main() {
Usage(teaconst.ProcessName + " [trackers|goman|conns|gc|bandwidth|disk]"). Usage(teaconst.ProcessName + " [trackers|goman|conns|gc|bandwidth|disk]").
Usage(teaconst.ProcessName + " [ip.drop|ip.reject|ip.remove|ip.close] IP") 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() { app.On("uninstall", func() {
// service // service
fmt.Println("Uninstall service ...") fmt.Println("Uninstall service ...")

View File

@@ -130,7 +130,10 @@ func (this *AppCmd) Run(main func()) {
// 获取参数 // 获取参数
var args = os.Args[1:] var args = os.Args[1:]
if len(args) > 0 { if len(args) > 0 {
switch args[0] { var mainArg = args[0]
this.callDirective(mainArg + ":before")
switch mainArg {
case "-v", "version", "-version", "--version": case "-v", "version", "-version", "--version":
this.runVersion() this.runVersion()
return return
@@ -153,19 +156,19 @@ func (this *AppCmd) Run(main func()) {
// 查找指令 // 查找指令
for _, directive := range this.directives { for _, directive := range this.directives {
if directive.Arg == args[0] { if directive.Arg == mainArg {
directive.Callback() directive.Callback()
return return
} }
} }
fmt.Println("unknown command '" + args[0] + "'") fmt.Println("unknown command '" + mainArg + "'")
return return
} }
// 日志 // 日志
writer := new(LogWriter) var writer = new(LogWriter)
writer.Init() writer.Init()
logs.SetWriter(writer) logs.SetWriter(writer)
@@ -337,3 +340,14 @@ func (this *AppCmd) createSymLinks() error {
return nil return nil
} }
func (this *AppCmd) callDirective(code string) {
for _, directive := range this.directives {
if directive.Arg == code {
if directive.Callback != nil {
directive.Callback()
}
return
}
}
}

View File

@@ -1,6 +1,7 @@
package configs package configs
import ( import (
"errors"
"github.com/iwind/TeaGo/Tea" "github.com/iwind/TeaGo/Tea"
"gopkg.in/yaml.v3" "gopkg.in/yaml.v3"
"os" "os"
@@ -20,18 +21,36 @@ func NewAPIConfig() *APIConfig {
return &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) { func LoadAPIConfig() (*APIConfig, error) {
data, err := os.ReadFile(Tea.ConfigFile("api.yaml")) data, err := os.ReadFile(Tea.ConfigFile("api.yaml"))
if err != nil { if err != nil {
return nil, err return nil, err
} }
config := &APIConfig{} var config = &APIConfig{}
err = yaml.Unmarshal(data, config) err = yaml.Unmarshal(data, config)
if err != nil { if err != nil {
return nil, err return nil, err
} }
err = config.Init()
if err != nil {
return nil, errors.New("init error: " + err.Error())
}
return config, nil return config, nil
} }