mirror of
https://github.com/TeaOSLab/EdgeNode.git
synced 2025-11-03 23:20:25 +08:00
使用edge-node start启动时先检查API配置
This commit is contained in:
@@ -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 ...")
|
||||||
|
|||||||
@@ -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
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -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
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user