mirror of
				https://github.com/TeaOSLab/EdgeNode.git
				synced 2025-11-04 07:40:56 +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