mirror of
				https://github.com/TeaOSLab/EdgeCommon.git
				synced 2025-11-04 05:00:24 +08:00 
			
		
		
		
	增加配置分组配置
This commit is contained in:
		@@ -210,8 +210,8 @@ func (this *NodeConfig) Init() error {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// AvailableGroups 根据网络地址和协议分组
 | 
					// AvailableGroups 根据网络地址和协议分组
 | 
				
			||||||
func (this *NodeConfig) AvailableGroups() []*serverconfigs.ServerGroup {
 | 
					func (this *NodeConfig) AvailableGroups() []*serverconfigs.ServerAddressGroup {
 | 
				
			||||||
	groupMapping := map[string]*serverconfigs.ServerGroup{} // protocol://addr => Server Group
 | 
						groupMapping := map[string]*serverconfigs.ServerAddressGroup{} // protocol://addr => Server Group
 | 
				
			||||||
	for _, server := range this.Servers {
 | 
						for _, server := range this.Servers {
 | 
				
			||||||
		if !server.IsOk() || !server.IsOn {
 | 
							if !server.IsOk() || !server.IsOn {
 | 
				
			||||||
			continue
 | 
								continue
 | 
				
			||||||
@@ -221,13 +221,13 @@ func (this *NodeConfig) AvailableGroups() []*serverconfigs.ServerGroup {
 | 
				
			|||||||
			if ok {
 | 
								if ok {
 | 
				
			||||||
				group.Add(server)
 | 
									group.Add(server)
 | 
				
			||||||
			} else {
 | 
								} else {
 | 
				
			||||||
				group = serverconfigs.NewServerGroup(addr)
 | 
									group = serverconfigs.NewServerAddressGroup(addr)
 | 
				
			||||||
				group.Add(server)
 | 
									group.Add(server)
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			groupMapping[addr] = group
 | 
								groupMapping[addr] = group
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	result := []*serverconfigs.ServerGroup{}
 | 
						result := []*serverconfigs.ServerAddressGroup{}
 | 
				
			||||||
	for _, group := range groupMapping {
 | 
						for _, group := range groupMapping {
 | 
				
			||||||
		result = append(result, group)
 | 
							result = append(result, group)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -791,6 +791,7 @@ func (x *UpdateServerWebRequest) GetWebId() int64 {
 | 
				
			|||||||
	return 0
 | 
						return 0
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 修改服务的反向代理设置
 | 
				
			||||||
type UpdateServerReverseProxyRequest struct {
 | 
					type UpdateServerReverseProxyRequest struct {
 | 
				
			||||||
	state         protoimpl.MessageState
 | 
						state         protoimpl.MessageState
 | 
				
			||||||
	sizeCache     protoimpl.SizeCache
 | 
						sizeCache     protoimpl.SizeCache
 | 
				
			||||||
 
 | 
				
			|||||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@@ -199,6 +199,7 @@ message UpdateServerWebRequest {
 | 
				
			|||||||
	int64 webId = 2;
 | 
						int64 webId = 2;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 修改服务的反向代理设置
 | 
				
			||||||
message UpdateServerReverseProxyRequest {
 | 
					message UpdateServerReverseProxyRequest {
 | 
				
			||||||
	int64 serverId = 1;
 | 
						int64 serverId = 1;
 | 
				
			||||||
	bytes reverseProxyJSON = 2;
 | 
						bytes reverseProxyJSON = 2;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -25,6 +25,27 @@ service ServerGroupService {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	// 查找单个分组信息
 | 
						// 查找单个分组信息
 | 
				
			||||||
	rpc findEnabledServerGroup (FindEnabledServerGroupRequest) returns (FindEnabledServerGroupResponse);
 | 
						rpc findEnabledServerGroup (FindEnabledServerGroupRequest) returns (FindEnabledServerGroupResponse);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// 查找HTTP反向代理设置
 | 
				
			||||||
 | 
						rpc findAndInitServerGroupHTTPReverseProxyConfig (FindAndInitServerGroupHTTPReverseProxyConfigRequest) returns (FindAndInitServerGroupHTTPReverseProxyConfigResponse);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// 查找TCP反向代理设置
 | 
				
			||||||
 | 
						rpc findAndInitServerGroupTCPReverseProxyConfig (FindAndInitServerGroupTCPReverseProxyConfigRequest) returns (FindAndInitServerGroupTCPReverseProxyConfigResponse);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// 查找UDP反向代理设置
 | 
				
			||||||
 | 
						rpc findAndInitServerGroupUDPReverseProxyConfig (FindAndInitServerGroupUDPReverseProxyConfigRequest) returns (FindAndInitServerGroupUDPReverseProxyConfigResponse);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// 修改分组的HTTP反向代理设置
 | 
				
			||||||
 | 
						rpc updateServerGroupHTTPReverseProxy (UpdateServerGroupHTTPReverseProxyRequest) returns (RPCSuccess);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// 修改分组的TCP反向代理设置
 | 
				
			||||||
 | 
						rpc updateServerGroupTCPReverseProxy (UpdateServerGroupTCPReverseProxyRequest) returns (RPCSuccess);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// 修改分组的UDP反向代理设置
 | 
				
			||||||
 | 
						rpc updateServerGroupUDPReverseProxy (UpdateServerGroupUDPReverseProxyRequest) returns (RPCSuccess);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// 取得分组的配置概要信息
 | 
				
			||||||
 | 
						rpc findEnabledServerGroupConfigInfo (FindEnabledServerGroupConfigInfoRequest) returns (FindEnabledServerGroupConfigInfoResponse);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// 创建分组
 | 
					// 创建分组
 | 
				
			||||||
@@ -68,3 +89,63 @@ message FindEnabledServerGroupRequest {
 | 
				
			|||||||
message FindEnabledServerGroupResponse {
 | 
					message FindEnabledServerGroupResponse {
 | 
				
			||||||
	ServerGroup serverGroup = 1;
 | 
						ServerGroup serverGroup = 1;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 查找HTTP反向代理设置
 | 
				
			||||||
 | 
					message FindAndInitServerGroupHTTPReverseProxyConfigRequest {
 | 
				
			||||||
 | 
						int64 serverGroupId = 1;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					message FindAndInitServerGroupHTTPReverseProxyConfigResponse {
 | 
				
			||||||
 | 
						bytes reverseProxyJSON = 1;
 | 
				
			||||||
 | 
						bytes reverseProxyRefJSON = 2;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 查找TCP反向代理设置
 | 
				
			||||||
 | 
					message FindAndInitServerGroupTCPReverseProxyConfigRequest {
 | 
				
			||||||
 | 
						int64 serverGroupId = 1;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					message FindAndInitServerGroupTCPReverseProxyConfigResponse {
 | 
				
			||||||
 | 
						bytes reverseProxyJSON = 1;
 | 
				
			||||||
 | 
						bytes reverseProxyRefJSON = 2;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 查找UDP反向代理设置
 | 
				
			||||||
 | 
					message FindAndInitServerGroupUDPReverseProxyConfigRequest {
 | 
				
			||||||
 | 
						int64 serverGroupId = 1;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					message FindAndInitServerGroupUDPReverseProxyConfigResponse {
 | 
				
			||||||
 | 
						bytes reverseProxyJSON = 1;
 | 
				
			||||||
 | 
						bytes reverseProxyRefJSON = 2;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 修改分组的HTTP反向代理设置
 | 
				
			||||||
 | 
					message UpdateServerGroupHTTPReverseProxyRequest {
 | 
				
			||||||
 | 
						int64 serverGroupId = 1;
 | 
				
			||||||
 | 
						bytes reverseProxyJSON = 2;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 修改分组的TCP反向代理设置
 | 
				
			||||||
 | 
					message UpdateServerGroupTCPReverseProxyRequest {
 | 
				
			||||||
 | 
						int64 serverGroupId = 1;
 | 
				
			||||||
 | 
						bytes reverseProxyJSON = 2;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 修改分组的UDP反向代理设置
 | 
				
			||||||
 | 
					message UpdateServerGroupUDPReverseProxyRequest {
 | 
				
			||||||
 | 
						int64 serverGroupId = 1;
 | 
				
			||||||
 | 
						bytes reverseProxyJSON = 2;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 取得分组的配置概要信息
 | 
				
			||||||
 | 
					message FindEnabledServerGroupConfigInfoRequest {
 | 
				
			||||||
 | 
						int64 serverGroupId = 1;
 | 
				
			||||||
 | 
						int64 serverId = 2;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					message FindEnabledServerGroupConfigInfoResponse {
 | 
				
			||||||
 | 
						bool hasHTTPReverseProxy = 1;
 | 
				
			||||||
 | 
						bool hasTCPReverseProxy = 2;
 | 
				
			||||||
 | 
						bool hasUDPReverseProxy = 3;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -1,13 +1,13 @@
 | 
				
			|||||||
package serverconfigs
 | 
					package serverconfigs
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// 反向代理引用
 | 
					// ReverseProxyRef 反向代理引用
 | 
				
			||||||
type ReverseProxyRef struct {
 | 
					type ReverseProxyRef struct {
 | 
				
			||||||
	IsPrior        bool  `yaml:"isPrior" json:"isPrior"`               // 是否覆盖
 | 
						IsPrior        bool  `yaml:"isPrior" json:"isPrior"`               // 是否覆盖
 | 
				
			||||||
	IsOn           bool  `yaml:"isOn" json:"isOn"`                     // 是否启用
 | 
						IsOn           bool  `yaml:"isOn" json:"isOn"`                     // 是否启用
 | 
				
			||||||
	ReverseProxyId int64 `yaml:"reverseProxyId" json:"reverseProxyId"` // 反向代理ID
 | 
						ReverseProxyId int64 `yaml:"reverseProxyId" json:"reverseProxyId"` // 反向代理ID
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// 初始化
 | 
					// Init 初始化
 | 
				
			||||||
func (this *ReverseProxyRef) Init() error {
 | 
					func (this *ReverseProxyRef) Init() error {
 | 
				
			||||||
	return nil
 | 
						return nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -73,6 +73,6 @@ func (this *RandomScheduling) Summary() maps.Map {
 | 
				
			|||||||
		"code":        "random",
 | 
							"code":        "random",
 | 
				
			||||||
		"name":        "Random随机算法",
 | 
							"name":        "Random随机算法",
 | 
				
			||||||
		"description": "根据权重设置随机分配源站",
 | 
							"description": "根据权重设置随机分配源站",
 | 
				
			||||||
		"networks":    []string{"http", "tcp"},
 | 
							"networks":    []string{"http", "tcp", "udp", "unix"},
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -75,6 +75,6 @@ func (this *RoundRobinScheduling) Summary() maps.Map {
 | 
				
			|||||||
		"code":        "roundRobin",
 | 
							"code":        "roundRobin",
 | 
				
			||||||
		"name":        "RoundRobin轮询算法",
 | 
							"name":        "RoundRobin轮询算法",
 | 
				
			||||||
		"description": "根据权重,依次分配源站",
 | 
							"description": "根据权重,依次分配源站",
 | 
				
			||||||
		"networks":    []string{"http", "tcp"},
 | 
							"networks":    []string{"http", "tcp", "udp", "unix"},
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										85
									
								
								pkg/serverconfigs/server_address_group.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										85
									
								
								pkg/serverconfigs/server_address_group.go
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,85 @@
 | 
				
			|||||||
 | 
					package serverconfigs
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import "strings"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					type ServerAddressGroup struct {
 | 
				
			||||||
 | 
						fullAddr string
 | 
				
			||||||
 | 
						Servers  []*ServerConfig
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func NewServerAddressGroup(fullAddr string) *ServerAddressGroup {
 | 
				
			||||||
 | 
						return &ServerAddressGroup{fullAddr: fullAddr}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Add 添加服务
 | 
				
			||||||
 | 
					func (this *ServerAddressGroup) Add(server *ServerConfig) {
 | 
				
			||||||
 | 
						this.Servers = append(this.Servers, server)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// FullAddr 获取完整的地址
 | 
				
			||||||
 | 
					func (this *ServerAddressGroup) FullAddr() string {
 | 
				
			||||||
 | 
						return this.fullAddr
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Protocol 获取当前分组的协议
 | 
				
			||||||
 | 
					func (this *ServerAddressGroup) Protocol() Protocol {
 | 
				
			||||||
 | 
						for _, p := range AllProtocols() {
 | 
				
			||||||
 | 
							if strings.HasPrefix(this.fullAddr, p.String()+":") {
 | 
				
			||||||
 | 
								return p
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return ProtocolHTTP
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Addr 获取当前分组的地址
 | 
				
			||||||
 | 
					func (this *ServerAddressGroup) Addr() string {
 | 
				
			||||||
 | 
						protocol := this.Protocol()
 | 
				
			||||||
 | 
						if protocol == ProtocolUnix {
 | 
				
			||||||
 | 
							return strings.TrimPrefix(this.fullAddr, protocol.String()+":")
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return strings.TrimPrefix(this.fullAddr, protocol.String()+"://")
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// IsHTTP 判断当前分组是否为HTTP
 | 
				
			||||||
 | 
					func (this *ServerAddressGroup) IsHTTP() bool {
 | 
				
			||||||
 | 
						p := this.Protocol()
 | 
				
			||||||
 | 
						return p == ProtocolHTTP || p == ProtocolHTTP4 || p == ProtocolHTTP6
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// IsHTTPS 判断当前分组是否为HTTPS
 | 
				
			||||||
 | 
					func (this *ServerAddressGroup) IsHTTPS() bool {
 | 
				
			||||||
 | 
						p := this.Protocol()
 | 
				
			||||||
 | 
						return p == ProtocolHTTPS || p == ProtocolHTTPS4 || p == ProtocolHTTPS6
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// IsTCP 判断当前分组是否为TCP
 | 
				
			||||||
 | 
					func (this *ServerAddressGroup) IsTCP() bool {
 | 
				
			||||||
 | 
						p := this.Protocol()
 | 
				
			||||||
 | 
						return p == ProtocolTCP || p == ProtocolTCP4 || p == ProtocolTCP6
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// IsTLS 判断当前分组是否为TLS
 | 
				
			||||||
 | 
					func (this *ServerAddressGroup) IsTLS() bool {
 | 
				
			||||||
 | 
						p := this.Protocol()
 | 
				
			||||||
 | 
						return p == ProtocolTLS || p == ProtocolTLS4 || p == ProtocolTLS6
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// IsUnix 判断当前分组是否为Unix
 | 
				
			||||||
 | 
					func (this *ServerAddressGroup) IsUnix() bool {
 | 
				
			||||||
 | 
						p := this.Protocol()
 | 
				
			||||||
 | 
						return p == ProtocolUnix
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// IsUDP 判断当前分组是否为UDP
 | 
				
			||||||
 | 
					func (this *ServerAddressGroup) IsUDP() bool {
 | 
				
			||||||
 | 
						p := this.Protocol()
 | 
				
			||||||
 | 
						return p == ProtocolUDP
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// FirstServer 获取第一个Server
 | 
				
			||||||
 | 
					func (this *ServerAddressGroup) FirstServer() *ServerConfig {
 | 
				
			||||||
 | 
						if len(this.Servers) > 0 {
 | 
				
			||||||
 | 
							return this.Servers[0]
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -5,29 +5,29 @@ import (
 | 
				
			|||||||
	"testing"
 | 
						"testing"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func TestServerGroup_Protocol(t *testing.T) {
 | 
					func TestServerAddressGroup_Protocol(t *testing.T) {
 | 
				
			||||||
	a := assert.NewAssertion(t)
 | 
						a := assert.NewAssertion(t)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		group := NewServerGroup("tcp://127.0.0.1:1234")
 | 
							group := NewServerAddressGroup("tcp://127.0.0.1:1234")
 | 
				
			||||||
		a.IsTrue(group.Protocol() == ProtocolTCP)
 | 
							a.IsTrue(group.Protocol() == ProtocolTCP)
 | 
				
			||||||
		a.IsTrue(group.Addr() == "127.0.0.1:1234")
 | 
							a.IsTrue(group.Addr() == "127.0.0.1:1234")
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		group := NewServerGroup("http4://127.0.0.1:1234")
 | 
							group := NewServerAddressGroup("http4://127.0.0.1:1234")
 | 
				
			||||||
		a.IsTrue(group.Protocol() == ProtocolHTTP4)
 | 
							a.IsTrue(group.Protocol() == ProtocolHTTP4)
 | 
				
			||||||
		a.IsTrue(group.Addr() == "127.0.0.1:1234")
 | 
							a.IsTrue(group.Addr() == "127.0.0.1:1234")
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		group := NewServerGroup("127.0.0.1:1234")
 | 
							group := NewServerAddressGroup("127.0.0.1:1234")
 | 
				
			||||||
		a.IsTrue(group.Protocol() == ProtocolHTTP)
 | 
							a.IsTrue(group.Protocol() == ProtocolHTTP)
 | 
				
			||||||
		a.IsTrue(group.Addr() == "127.0.0.1:1234")
 | 
							a.IsTrue(group.Addr() == "127.0.0.1:1234")
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		group := NewServerGroup("unix:/tmp/my.sock")
 | 
							group := NewServerAddressGroup("unix:/tmp/my.sock")
 | 
				
			||||||
		a.IsTrue(group.Protocol() == ProtocolUnix)
 | 
							a.IsTrue(group.Protocol() == ProtocolUnix)
 | 
				
			||||||
		a.IsTrue(group.Addr() == "/tmp/my.sock")
 | 
							a.IsTrue(group.Addr() == "/tmp/my.sock")
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@@ -41,6 +41,9 @@ type ServerConfig struct {
 | 
				
			|||||||
	HTTPCachePolicyId int64            `yaml:"httpCachePolicyId" json:"httpCachePolicyId"`
 | 
						HTTPCachePolicyId int64            `yaml:"httpCachePolicyId" json:"httpCachePolicyId"`
 | 
				
			||||||
	HTTPCachePolicy   *HTTPCachePolicy `yaml:"httpCachePolicy" json:"httpCachePolicy"` // 通过 HTTPCachePolicyId 获取
 | 
						HTTPCachePolicy   *HTTPCachePolicy `yaml:"httpCachePolicy" json:"httpCachePolicy"` // 通过 HTTPCachePolicyId 获取
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// 分组
 | 
				
			||||||
 | 
						Group *ServerGroupConfig `yaml:"group" json:"group"`
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	isOk bool
 | 
						isOk bool
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -56,6 +59,23 @@ func NewServerConfig() *ServerConfig {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (this *ServerConfig) Init() error {
 | 
					func (this *ServerConfig) Init() error {
 | 
				
			||||||
 | 
						// 分解Group
 | 
				
			||||||
 | 
						if this.Group != nil && this.Group.IsOn {
 | 
				
			||||||
 | 
							// reverse proxy
 | 
				
			||||||
 | 
							if this.IsHTTPFamily() && this.Group.HTTPReverseProxyRef != nil && this.Group.HTTPReverseProxyRef.IsPrior {
 | 
				
			||||||
 | 
								this.ReverseProxyRef = this.Group.HTTPReverseProxyRef
 | 
				
			||||||
 | 
								this.ReverseProxy = this.Group.HTTPReverseProxy
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							if this.IsTCPFamily() && this.Group.TCPReverseProxyRef != nil && this.Group.TCPReverseProxyRef.IsPrior {
 | 
				
			||||||
 | 
								this.ReverseProxyRef = this.Group.TCPReverseProxyRef
 | 
				
			||||||
 | 
								this.ReverseProxy = this.Group.TCPReverseProxy
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							if this.IsUDPFamily() && this.Group.UDPReverseProxyRef != nil && this.Group.UDPReverseProxyRef.IsPrior {
 | 
				
			||||||
 | 
								this.ReverseProxyRef = this.Group.UDPReverseProxyRef
 | 
				
			||||||
 | 
								this.ReverseProxy = this.Group.UDPReverseProxy
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if this.HTTP != nil {
 | 
						if this.HTTP != nil {
 | 
				
			||||||
		err := this.HTTP.Init()
 | 
							err := this.HTTP.Init()
 | 
				
			||||||
		if err != nil {
 | 
							if err != nil {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,85 +0,0 @@
 | 
				
			|||||||
package serverconfigs
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import "strings"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
type ServerGroup struct {
 | 
					 | 
				
			||||||
	fullAddr string
 | 
					 | 
				
			||||||
	Servers  []*ServerConfig
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
func NewServerGroup(fullAddr string) *ServerGroup {
 | 
					 | 
				
			||||||
	return &ServerGroup{fullAddr: fullAddr}
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// 添加服务
 | 
					 | 
				
			||||||
func (this *ServerGroup) Add(server *ServerConfig) {
 | 
					 | 
				
			||||||
	this.Servers = append(this.Servers, server)
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// 获取完整的地址
 | 
					 | 
				
			||||||
func (this *ServerGroup) FullAddr() string {
 | 
					 | 
				
			||||||
	return this.fullAddr
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// 获取当前分组的协议
 | 
					 | 
				
			||||||
func (this *ServerGroup) Protocol() Protocol {
 | 
					 | 
				
			||||||
	for _, p := range AllProtocols() {
 | 
					 | 
				
			||||||
		if strings.HasPrefix(this.fullAddr, p.String()+":") {
 | 
					 | 
				
			||||||
			return p
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	return ProtocolHTTP
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// 获取当前分组的地址
 | 
					 | 
				
			||||||
func (this *ServerGroup) Addr() string {
 | 
					 | 
				
			||||||
	protocol := this.Protocol()
 | 
					 | 
				
			||||||
	if protocol == ProtocolUnix {
 | 
					 | 
				
			||||||
		return strings.TrimPrefix(this.fullAddr, protocol.String()+":")
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	return strings.TrimPrefix(this.fullAddr, protocol.String()+"://")
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// 判断当前分组是否为HTTP
 | 
					 | 
				
			||||||
func (this *ServerGroup) IsHTTP() bool {
 | 
					 | 
				
			||||||
	p := this.Protocol()
 | 
					 | 
				
			||||||
	return p == ProtocolHTTP || p == ProtocolHTTP4 || p == ProtocolHTTP6
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// 判断当前分组是否为HTTPS
 | 
					 | 
				
			||||||
func (this *ServerGroup) IsHTTPS() bool {
 | 
					 | 
				
			||||||
	p := this.Protocol()
 | 
					 | 
				
			||||||
	return p == ProtocolHTTPS || p == ProtocolHTTPS4 || p == ProtocolHTTPS6
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// 判断当前分组是否为TCP
 | 
					 | 
				
			||||||
func (this *ServerGroup) IsTCP() bool {
 | 
					 | 
				
			||||||
	p := this.Protocol()
 | 
					 | 
				
			||||||
	return p == ProtocolTCP || p == ProtocolTCP4 || p == ProtocolTCP6
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// 判断当前分组是否为TLS
 | 
					 | 
				
			||||||
func (this *ServerGroup) IsTLS() bool {
 | 
					 | 
				
			||||||
	p := this.Protocol()
 | 
					 | 
				
			||||||
	return p == ProtocolTLS || p == ProtocolTLS4 || p == ProtocolTLS6
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// 判断当前分组是否为Unix
 | 
					 | 
				
			||||||
func (this *ServerGroup) IsUnix() bool {
 | 
					 | 
				
			||||||
	p := this.Protocol()
 | 
					 | 
				
			||||||
	return p == ProtocolUnix
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// 判断当前分组是否为UDP
 | 
					 | 
				
			||||||
func (this *ServerGroup) IsUDP() bool {
 | 
					 | 
				
			||||||
	p := this.Protocol()
 | 
					 | 
				
			||||||
	return p == ProtocolUDP
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// 获取第一个Server
 | 
					 | 
				
			||||||
func (this *ServerGroup) FirstServer() *ServerConfig {
 | 
					 | 
				
			||||||
	if len(this.Servers) > 0 {
 | 
					 | 
				
			||||||
		return this.Servers[0]
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	return nil
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
							
								
								
									
										18
									
								
								pkg/serverconfigs/server_group_config.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								pkg/serverconfigs/server_group_config.go
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,18 @@
 | 
				
			|||||||
 | 
					// Copyright 2021 Liuxiangchao iwind.liu@gmail.com. All rights reserved.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					package serverconfigs
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// ServerGroupConfig 服务分组配置
 | 
				
			||||||
 | 
					type ServerGroupConfig struct {
 | 
				
			||||||
 | 
						Id   int64  `yaml:"id" json:"id"`
 | 
				
			||||||
 | 
						Name string `yaml:"name" json:"name"`
 | 
				
			||||||
 | 
						IsOn bool   `yaml:"isOn" json:"isOn"`
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// 反向代理配置
 | 
				
			||||||
 | 
						HTTPReverseProxyRef *ReverseProxyRef    `yaml:"httpReverseProxyRef" json:"httpReverseProxyRef"`
 | 
				
			||||||
 | 
						HTTPReverseProxy    *ReverseProxyConfig `yaml:"httpReverseProxy" json:"httpReverseProxy"`
 | 
				
			||||||
 | 
						TCPReverseProxyRef  *ReverseProxyRef    `yaml:"tcpReverseProxyRef" json:"tcpReverseProxyRef"`
 | 
				
			||||||
 | 
						TCPReverseProxy     *ReverseProxyConfig `yaml:"tcpReverseProxy" json:"tcpReverseProxy"`
 | 
				
			||||||
 | 
						UDPReverseProxyRef  *ReverseProxyRef    `yaml:"udpReverseProxyRef" json:"udpReverseProxyRef"`
 | 
				
			||||||
 | 
						UDPReverseProxy     *ReverseProxyConfig `yaml:"udpReverseProxy" json:"udpReverseProxy"`
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
		Reference in New Issue
	
	Block a user