实现域名服务器集群管理

This commit is contained in:
GoEdgeLab
2021-05-25 15:49:13 +08:00
parent 4c58e69794
commit edd4fd8e64
24 changed files with 787 additions and 82 deletions

View File

@@ -0,0 +1,114 @@
package nameservers
import (
"github.com/TeaOSLab/EdgeAPI/internal/errors"
_ "github.com/go-sql-driver/mysql"
"github.com/iwind/TeaGo/Tea"
"github.com/iwind/TeaGo/dbs"
)
const (
NSClusterStateEnabled = 1 // 已启用
NSClusterStateDisabled = 0 // 已禁用
)
type NSClusterDAO dbs.DAO
func NewNSClusterDAO() *NSClusterDAO {
return dbs.NewDAO(&NSClusterDAO{
DAOObject: dbs.DAOObject{
DB: Tea.Env,
Table: "edgeNSClusters",
Model: new(NSCluster),
PkName: "id",
},
}).(*NSClusterDAO)
}
var SharedNSClusterDAO *NSClusterDAO
func init() {
dbs.OnReady(func() {
SharedNSClusterDAO = NewNSClusterDAO()
})
}
// EnableNSCluster 启用条目
func (this *NSClusterDAO) EnableNSCluster(tx *dbs.Tx, id int64) error {
_, err := this.Query(tx).
Pk(id).
Set("state", NSClusterStateEnabled).
Update()
return err
}
// DisableNSCluster 禁用条目
func (this *NSClusterDAO) DisableNSCluster(tx *dbs.Tx, id int64) error {
_, err := this.Query(tx).
Pk(id).
Set("state", NSClusterStateDisabled).
Update()
return err
}
// FindEnabledNSCluster 查找启用中的条目
func (this *NSClusterDAO) FindEnabledNSCluster(tx *dbs.Tx, id int64) (*NSCluster, error) {
result, err := this.Query(tx).
Pk(id).
Attr("state", NSClusterStateEnabled).
Find()
if result == nil {
return nil, err
}
return result.(*NSCluster), err
}
// CreateCluster 创建集群
func (this *NSClusterDAO) CreateCluster(tx *dbs.Tx, name string) (int64, error) {
op := NewNSClusterOperator()
op.Name = name
op.IsOn = true
op.State = NSClusterStateEnabled
return this.SaveInt64(tx, op)
}
// UpdateCluster 修改集群
func (this *NSClusterDAO) UpdateCluster(tx *dbs.Tx, clusterId int64, name string, isOn bool) error {
if clusterId <= 0 {
return errors.New("invalid clusterId")
}
op := NewNSClusterOperator()
op.Id = clusterId
op.Name = name
op.IsOn = isOn
return this.Save(tx, op)
}
// CountAllEnabledClusters 计算可用集群数量
func (this *NSClusterDAO) CountAllEnabledClusters(tx *dbs.Tx) (int64, error) {
return this.Query(tx).
State(NSClusterStateEnabled).
Count()
}
// ListEnabledNSClusters 列出单页集群
func (this *NSClusterDAO) ListEnabledNSClusters(tx *dbs.Tx, offset int64, size int64) (result []*NSCluster, err error) {
_, err = this.Query(tx).
State(NSClusterStateEnabled).
Offset(offset).
Limit(size).
DescPk().
Slice(&result).
FindAll()
return
}
// FindAllEnabledNSClusters 列出所有集群
func (this *NSClusterDAO) FindAllEnabledNSClusters(tx *dbs.Tx) (result []*NSCluster, err error) {
_, err = this.Query(tx).
State(NSClusterStateEnabled).
DescPk().
Slice(&result).
FindAll()
return
}

View File

@@ -0,0 +1,6 @@
package nameservers
import (
_ "github.com/go-sql-driver/mysql"
_ "github.com/iwind/TeaGo/bootstrap"
)

View File

@@ -0,0 +1,20 @@
package nameservers
// NSCluster 域名服务器集群
type NSCluster struct {
Id uint32 `field:"id"` // ID
IsOn uint8 `field:"isOn"` // 是否启用
Name string `field:"name"` // 集群名
State uint8 `field:"state"` // 状态
}
type NSClusterOperator struct {
Id interface{} // ID
IsOn interface{} // 是否启用
Name interface{} // 集群名
State interface{} // 状态
}
func NewNSClusterOperator() *NSClusterOperator {
return &NSClusterOperator{}
}

View File

@@ -0,0 +1 @@
package nameservers

View File

@@ -0,0 +1,71 @@
package nameservers
import (
_ "github.com/go-sql-driver/mysql"
"github.com/iwind/TeaGo/Tea"
"github.com/iwind/TeaGo/dbs"
)
const (
NSDomainStateEnabled = 1 // 已启用
NSDomainStateDisabled = 0 // 已禁用
)
type NSDomainDAO dbs.DAO
func NewNSDomainDAO() *NSDomainDAO {
return dbs.NewDAO(&NSDomainDAO{
DAOObject: dbs.DAOObject{
DB: Tea.Env,
Table: "edgeNSDomains",
Model: new(NSDomain),
PkName: "id",
},
}).(*NSDomainDAO)
}
var SharedNSDomainDAO *NSDomainDAO
func init() {
dbs.OnReady(func() {
SharedNSDomainDAO = NewNSDomainDAO()
})
}
// EnableNSDomain 启用条目
func (this *NSDomainDAO) EnableNSDomain(tx *dbs.Tx, id uint32) error {
_, err := this.Query(tx).
Pk(id).
Set("state", NSDomainStateEnabled).
Update()
return err
}
// DisableNSDomain 禁用条目
func (this *NSDomainDAO) DisableNSDomain(tx *dbs.Tx, id uint32) error {
_, err := this.Query(tx).
Pk(id).
Set("state", NSDomainStateDisabled).
Update()
return err
}
// FindEnabledNSDomain 查找启用中的条目
func (this *NSDomainDAO) FindEnabledNSDomain(tx *dbs.Tx, id uint32) (*NSDomain, error) {
result, err := this.Query(tx).
Pk(id).
Attr("state", NSDomainStateEnabled).
Find()
if result == nil {
return nil, err
}
return result.(*NSDomain), err
}
// FindNSDomainName 根据主键查找名称
func (this *NSDomainDAO) FindNSDomainName(tx *dbs.Tx, id uint32) (string, error) {
return this.Query(tx).
Pk(id).
Result("name").
FindStringCol("")
}

View File

@@ -0,0 +1,6 @@
package nameservers
import (
_ "github.com/go-sql-driver/mysql"
_ "github.com/iwind/TeaGo/bootstrap"
)

View File

@@ -0,0 +1,26 @@
package nameservers
// NSDomain DNS域名
type NSDomain struct {
Id uint32 `field:"id"` // ID
ClusterId uint32 `field:"clusterId"` // 集群ID
UserId uint32 `field:"userId"` // 用户ID
IsOn uint8 `field:"isOn"` // 是否启用
Name string `field:"name"` // 域名
CreatedAt uint64 `field:"createdAt"` // 创建时间
State uint8 `field:"state"` // 状态
}
type NSDomainOperator struct {
Id interface{} // ID
ClusterId interface{} // 集群ID
UserId interface{} // 用户ID
IsOn interface{} // 是否启用
Name interface{} // 域名
CreatedAt interface{} // 创建时间
State interface{} // 状态
}
func NewNSDomainOperator() *NSDomainOperator {
return &NSDomainOperator{}
}

View File

@@ -0,0 +1 @@
package nameservers

View File

@@ -0,0 +1,63 @@
package nameservers
import (
_ "github.com/go-sql-driver/mysql"
"github.com/iwind/TeaGo/Tea"
"github.com/iwind/TeaGo/dbs"
)
const (
NSNodeStateEnabled = 1 // 已启用
NSNodeStateDisabled = 0 // 已禁用
)
type NSNodeDAO dbs.DAO
func NewNSNodeDAO() *NSNodeDAO {
return dbs.NewDAO(&NSNodeDAO{
DAOObject: dbs.DAOObject{
DB: Tea.Env,
Table: "edgeNSNodes",
Model: new(NSNode),
PkName: "id",
},
}).(*NSNodeDAO)
}
var SharedNSNodeDAO *NSNodeDAO
func init() {
dbs.OnReady(func() {
SharedNSNodeDAO = NewNSNodeDAO()
})
}
// EnableNSNode 启用条目
func (this *NSNodeDAO) EnableNSNode(tx *dbs.Tx, id uint32) error {
_, err := this.Query(tx).
Pk(id).
Set("state", NSNodeStateEnabled).
Update()
return err
}
// DisableNSNode 禁用条目
func (this *NSNodeDAO) DisableNSNode(tx *dbs.Tx, id uint32) error {
_, err := this.Query(tx).
Pk(id).
Set("state", NSNodeStateDisabled).
Update()
return err
}
// FindEnabledNSNode 查找启用中的条目
func (this *NSNodeDAO) FindEnabledNSNode(tx *dbs.Tx, id uint32) (*NSNode, error) {
result, err := this.Query(tx).
Pk(id).
Attr("state", NSNodeStateEnabled).
Find()
if result == nil {
return nil, err
}
return result.(*NSNode), err
}

View File

@@ -0,0 +1,6 @@
package nameservers
import (
_ "github.com/go-sql-driver/mysql"
_ "github.com/iwind/TeaGo/bootstrap"
)

View File

@@ -0,0 +1,26 @@
package nameservers
// NSNode 域名服务器节点
type NSNode struct {
Id uint32 `field:"id"` // ID
ClusterId uint32 `field:"clusterId"` // 集群ID
IsOn uint8 `field:"isOn"` // 是否启用
Status string `field:"status"` // 运行状态
UniqueId string `field:"uniqueId"` // 节点ID
Secret string `field:"secret"` // 密钥
State uint8 `field:"state"` // 状态
}
type NSNodeOperator struct {
Id interface{} // ID
ClusterId interface{} // 集群ID
IsOn interface{} // 是否启用
Status interface{} // 运行状态
UniqueId interface{} // 节点ID
Secret interface{} // 密钥
State interface{} // 状态
}
func NewNSNodeOperator() *NSNodeOperator {
return &NSNodeOperator{}
}

View File

@@ -0,0 +1 @@
package nameservers

View File

@@ -0,0 +1,71 @@
package nameservers
import (
_ "github.com/go-sql-driver/mysql"
"github.com/iwind/TeaGo/Tea"
"github.com/iwind/TeaGo/dbs"
)
const (
NSRecordStateEnabled = 1 // 已启用
NSRecordStateDisabled = 0 // 已禁用
)
type NSRecordDAO dbs.DAO
func NewNSRecordDAO() *NSRecordDAO {
return dbs.NewDAO(&NSRecordDAO{
DAOObject: dbs.DAOObject{
DB: Tea.Env,
Table: "edgeNSRecords",
Model: new(NSRecord),
PkName: "id",
},
}).(*NSRecordDAO)
}
var SharedNSRecordDAO *NSRecordDAO
func init() {
dbs.OnReady(func() {
SharedNSRecordDAO = NewNSRecordDAO()
})
}
// EnableNSRecord 启用条目
func (this *NSRecordDAO) EnableNSRecord(tx *dbs.Tx, id uint64) error {
_, err := this.Query(tx).
Pk(id).
Set("state", NSRecordStateEnabled).
Update()
return err
}
// DisableNSRecord 禁用条目
func (this *NSRecordDAO) DisableNSRecord(tx *dbs.Tx, id uint64) error {
_, err := this.Query(tx).
Pk(id).
Set("state", NSRecordStateDisabled).
Update()
return err
}
// FindEnabledNSRecord 查找启用中的条目
func (this *NSRecordDAO) FindEnabledNSRecord(tx *dbs.Tx, id uint64) (*NSRecord, error) {
result, err := this.Query(tx).
Pk(id).
Attr("state", NSRecordStateEnabled).
Find()
if result == nil {
return nil, err
}
return result.(*NSRecord), err
}
// FindNSRecordName 根据主键查找名称
func (this *NSRecordDAO) FindNSRecordName(tx *dbs.Tx, id uint64) (string, error) {
return this.Query(tx).
Pk(id).
Result("name").
FindStringCol("")
}

View File

@@ -0,0 +1,6 @@
package nameservers
import (
_ "github.com/go-sql-driver/mysql"
_ "github.com/iwind/TeaGo/bootstrap"
)

View File

@@ -0,0 +1,34 @@
package nameservers
// NSRecord DNS记录
type NSRecord struct {
Id uint64 `field:"id"` // ID
DomainId uint32 `field:"domainId"` // 域名ID
Description string `field:"description"` // 备注
Name string `field:"name"` // 记录名
Type string `field:"type"` // 类型
Value string `field:"value"` // 值
Ttl uint32 `field:"ttl"` // TTL
Weight uint32 `field:"weight"` // 权重
Routes string `field:"routes"` // 线路
CreatedAt uint64 `field:"createdAt"` // 创建时间
State uint8 `field:"state"` // 状态
}
type NSRecordOperator struct {
Id interface{} // ID
DomainId interface{} // 域名ID
Description interface{} // 备注
Name interface{} // 记录名
Type interface{} // 类型
Value interface{} // 值
Ttl interface{} // TTL
Weight interface{} // 权重
Routes interface{} // 线路
CreatedAt interface{} // 创建时间
State interface{} // 状态
}
func NewNSRecordOperator() *NSRecordOperator {
return &NSRecordOperator{}
}

View File

@@ -0,0 +1 @@
package nameservers

View File

@@ -0,0 +1,71 @@
package nameservers
import (
_ "github.com/go-sql-driver/mysql"
"github.com/iwind/TeaGo/Tea"
"github.com/iwind/TeaGo/dbs"
)
const (
NSRouteStateEnabled = 1 // 已启用
NSRouteStateDisabled = 0 // 已禁用
)
type NSRouteDAO dbs.DAO
func NewNSRouteDAO() *NSRouteDAO {
return dbs.NewDAO(&NSRouteDAO{
DAOObject: dbs.DAOObject{
DB: Tea.Env,
Table: "edgeNSRoutes",
Model: new(NSRoute),
PkName: "id",
},
}).(*NSRouteDAO)
}
var SharedNSRouteDAO *NSRouteDAO
func init() {
dbs.OnReady(func() {
SharedNSRouteDAO = NewNSRouteDAO()
})
}
// EnableNSRoute 启用条目
func (this *NSRouteDAO) EnableNSRoute(tx *dbs.Tx, id uint32) error {
_, err := this.Query(tx).
Pk(id).
Set("state", NSRouteStateEnabled).
Update()
return err
}
// DisableNSRoute 禁用条目
func (this *NSRouteDAO) DisableNSRoute(tx *dbs.Tx, id uint32) error {
_, err := this.Query(tx).
Pk(id).
Set("state", NSRouteStateDisabled).
Update()
return err
}
// FindEnabledNSRoute 查找启用中的条目
func (this *NSRouteDAO) FindEnabledNSRoute(tx *dbs.Tx, id uint32) (*NSRoute, error) {
result, err := this.Query(tx).
Pk(id).
Attr("state", NSRouteStateEnabled).
Find()
if result == nil {
return nil, err
}
return result.(*NSRoute), err
}
// FindNSRouteName 根据主键查找名称
func (this *NSRouteDAO) FindNSRouteName(tx *dbs.Tx, id uint32) (string, error) {
return this.Query(tx).
Pk(id).
Result("name").
FindStringCol("")
}

View File

@@ -0,0 +1,6 @@
package nameservers
import (
_ "github.com/go-sql-driver/mysql"
_ "github.com/iwind/TeaGo/bootstrap"
)

View File

@@ -0,0 +1,26 @@
package nameservers
// NSRoute DNS线路
type NSRoute struct {
Id uint32 `field:"id"` // ID
ClusterId uint32 `field:"clusterId"` // 集群ID
UserId uint32 `field:"userId"` // 用户ID
Name string `field:"name"` // 名称
Conds string `field:"conds"` // 条件定义
IsOn uint8 `field:"isOn"` // 是否启用
State uint8 `field:"state"` // 状态
}
type NSRouteOperator struct {
Id interface{} // ID
ClusterId interface{} // 集群ID
UserId interface{} // 用户ID
Name interface{} // 名称
Conds interface{} // 条件定义
IsOn interface{} // 是否启用
State interface{} // 状态
}
func NewNSRouteOperator() *NSRouteOperator {
return &NSRouteOperator{}
}

View File

@@ -0,0 +1 @@
package nameservers

View File

@@ -9,10 +9,8 @@ import (
"github.com/TeaOSLab/EdgeAPI/internal/db/models"
"github.com/TeaOSLab/EdgeAPI/internal/events"
"github.com/TeaOSLab/EdgeAPI/internal/remotelogs"
"github.com/TeaOSLab/EdgeAPI/internal/rpc/services"
"github.com/TeaOSLab/EdgeAPI/internal/setup"
"github.com/TeaOSLab/EdgeAPI/internal/utils"
"github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb"
"github.com/go-yaml/yaml"
"github.com/iwind/TeaGo/Tea"
"github.com/iwind/TeaGo/dbs"
@@ -188,85 +186,7 @@ func (this *APINode) listenRPC(listener net.Listener, tlsConfig *tls.Config) err
logs.Println("[API_NODE]listening GRPC https://" + listener.Addr().String() + " ...")
rpcServer = grpc.NewServer(grpc.Creds(credentials.NewTLS(tlsConfig)))
}
pb.RegisterAdminServiceServer(rpcServer, &services.AdminService{})
pb.RegisterNodeGrantServiceServer(rpcServer, &services.NodeGrantService{})
pb.RegisterServerServiceServer(rpcServer, &services.ServerService{})
pb.RegisterNodeServiceServer(rpcServer, &services.NodeService{})
pb.RegisterNodeClusterServiceServer(rpcServer, &services.NodeClusterService{})
pb.RegisterNodeIPAddressServiceServer(rpcServer, &services.NodeIPAddressService{})
pb.RegisterAPINodeServiceServer(rpcServer, &services.APINodeService{})
pb.RegisterOriginServiceServer(rpcServer, &services.OriginService{})
pb.RegisterHTTPWebServiceServer(rpcServer, &services.HTTPWebService{})
pb.RegisterReverseProxyServiceServer(rpcServer, &services.ReverseProxyService{})
pb.RegisterHTTPGzipServiceServer(rpcServer, &services.HTTPGzipService{})
pb.RegisterHTTPHeaderPolicyServiceServer(rpcServer, &services.HTTPHeaderPolicyService{})
pb.RegisterHTTPHeaderServiceServer(rpcServer, &services.HTTPHeaderService{})
pb.RegisterHTTPPageServiceServer(rpcServer, &services.HTTPPageService{})
pb.RegisterHTTPAccessLogPolicyServiceServer(rpcServer, &services.HTTPAccessLogPolicyService{})
pb.RegisterHTTPCachePolicyServiceServer(rpcServer, &services.HTTPCachePolicyService{})
pb.RegisterHTTPFirewallPolicyServiceServer(rpcServer, &services.HTTPFirewallPolicyService{})
pb.RegisterHTTPLocationServiceServer(rpcServer, &services.HTTPLocationService{})
pb.RegisterHTTPWebsocketServiceServer(rpcServer, &services.HTTPWebsocketService{})
pb.RegisterHTTPRewriteRuleServiceServer(rpcServer, &services.HTTPRewriteRuleService{})
pb.RegisterSSLCertServiceServer(rpcServer, &services.SSLCertService{})
pb.RegisterSSLPolicyServiceServer(rpcServer, &services.SSLPolicyService{})
pb.RegisterSysSettingServiceServer(rpcServer, &services.SysSettingService{})
pb.RegisterHTTPFirewallRuleGroupServiceServer(rpcServer, &services.HTTPFirewallRuleGroupService{})
pb.RegisterHTTPFirewallRuleSetServiceServer(rpcServer, &services.HTTPFirewallRuleSetService{})
pb.RegisterDBNodeServiceServer(rpcServer, &services.DBNodeService{})
pb.RegisterNodeLogServiceServer(rpcServer, &services.NodeLogService{})
pb.RegisterHTTPAccessLogServiceServer(rpcServer, &services.HTTPAccessLogService{})
pb.RegisterMessageServiceServer(rpcServer, &services.MessageService{})
pb.RegisterMessageRecipientServiceServer(rpcServer, &services.MessageRecipientService{})
pb.RegisterMessageReceiverServiceServer(rpcServer, &services.MessageReceiverService{})
pb.RegisterMessageMediaServiceServer(rpcServer, &services.MessageMediaService{})
pb.RegisterMessageRecipientGroupServiceServer(rpcServer, &services.MessageRecipientGroupService{})
pb.RegisterMessageMediaInstanceServiceServer(rpcServer, &services.MessageMediaInstanceService{})
pb.RegisterMessageTaskServiceServer(rpcServer, &services.MessageTaskService{})
pb.RegisterMessageTaskLogServiceServer(rpcServer, &services.MessageTaskLogService{})
pb.RegisterNodeGroupServiceServer(rpcServer, &services.NodeGroupService{})
pb.RegisterNodeRegionServiceServer(rpcServer, &services.NodeRegionService{})
pb.RegisterNodePriceItemServiceServer(rpcServer, &services.NodePriceItemService{})
pb.RegisterServerGroupServiceServer(rpcServer, &services.ServerGroupService{})
pb.RegisterIPLibraryServiceServer(rpcServer, &services.IPLibraryService{})
pb.RegisterFileChunkServiceServer(rpcServer, &services.FileChunkService{})
pb.RegisterFileServiceServer(rpcServer, &services.FileService{})
pb.RegisterRegionCountryServiceServer(rpcServer, &services.RegionCountryService{})
pb.RegisterRegionProvinceServiceServer(rpcServer, &services.RegionProvinceService{})
pb.RegisterIPListServiceServer(rpcServer, &services.IPListService{})
pb.RegisterIPItemServiceServer(rpcServer, &services.IPItemService{})
pb.RegisterLogServiceServer(rpcServer, &services.LogService{})
pb.RegisterDNSProviderServiceServer(rpcServer, &services.DNSProviderService{})
pb.RegisterDNSDomainServiceServer(rpcServer, &services.DNSDomainService{})
pb.RegisterDNSServiceServer(rpcServer, &services.DNSService{})
pb.RegisterACMEUserServiceServer(rpcServer, &services.ACMEUserService{})
pb.RegisterACMETaskServiceServer(rpcServer, &services.ACMETaskService{})
pb.RegisterACMEAuthenticationServiceServer(rpcServer, &services.ACMEAuthenticationService{})
pb.RegisterUserServiceServer(rpcServer, &services.UserService{})
pb.RegisterServerDailyStatServiceServer(rpcServer, &services.ServerDailyStatService{})
pb.RegisterUserBillServiceServer(rpcServer, &services.UserBillService{})
pb.RegisterUserNodeServiceServer(rpcServer, &services.UserNodeService{})
pb.RegisterLoginServiceServer(rpcServer, &services.LoginService{})
pb.RegisterUserAccessKeyServiceServer(rpcServer, &services.UserAccessKeyService{})
pb.RegisterSysLockerServiceServer(rpcServer, &services.SysLockerService{})
pb.RegisterNodeTaskServiceServer(rpcServer, &services.NodeTaskService{})
pb.RegisterNodeValueServiceServer(rpcServer, &services.NodeValueService{})
pb.RegisterDBServiceServer(rpcServer, &services.DBService{})
pb.RegisterServerRegionCityMonthlyStatServiceServer(rpcServer, &services.ServerRegionCityMonthlyStatService{})
pb.RegisterServerRegionCountryMonthlyStatServiceServer(rpcServer, &services.ServerRegionCountryMonthlyStatService{})
pb.RegisterServerRegionProvinceMonthlyStatServiceServer(rpcServer, &services.ServerRegionProvinceMonthlyStatService{})
pb.RegisterServerRegionProviderMonthlyStatServiceServer(rpcServer, &services.ServerRegionProviderMonthlyStatService{})
pb.RegisterServerClientSystemMonthlyStatServiceServer(rpcServer, &services.ServerClientSystemMonthlyStatService{})
pb.RegisterServerClientBrowserMonthlyStatServiceServer(rpcServer, &services.ServerClientBrowserMonthlyStatService{})
pb.RegisterServerHTTPFirewallDailyStatServiceServer(rpcServer, &services.ServerHTTPFirewallDailyStatService{})
pb.RegisterDNSTaskServiceServer(rpcServer, &services.DNSTaskService{})
pb.RegisterNodeClusterFirewallActionServiceServer(rpcServer, &services.NodeClusterFirewallActionService{})
pb.RegisterMonitorNodeServiceServer(rpcServer, &services.MonitorNodeService{})
pb.RegisterAuthorityKeyServiceServer(rpcServer, &services.AuthorityKeyService{})
pb.RegisterAuthorityNodeServiceServer(rpcServer, &services.AuthorityNodeService{})
pb.RegisterLatestItemServiceServer(rpcServer, &services.LatestItemService{})
pb.RegisterNodeThresholdServiceServer(rpcServer, &services.NodeThresholdService{})
pb.RegisterHTTPFastcgiServiceServer(rpcServer, &services.HTTPFastcgiService{})
this.registerServices(rpcServer)
err := rpcServer.Serve(listener)
if err != nil {
return errors.New("[API_NODE]start rpc failed: " + err.Error())

View File

@@ -0,0 +1,93 @@
// Copyright 2021 Liuxiangchao iwind.liu@gmail.com. All rights reserved.
package nodes
import (
"github.com/TeaOSLab/EdgeAPI/internal/rpc/services"
"github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb"
"google.golang.org/grpc"
)
// 注册服务
func (this *APINode) registerServices(server *grpc.Server) {
pb.RegisterAdminServiceServer(server, &services.AdminService{})
pb.RegisterNodeGrantServiceServer(server, &services.NodeGrantService{})
pb.RegisterServerServiceServer(server, &services.ServerService{})
pb.RegisterNodeServiceServer(server, &services.NodeService{})
pb.RegisterNodeClusterServiceServer(server, &services.NodeClusterService{})
pb.RegisterNodeIPAddressServiceServer(server, &services.NodeIPAddressService{})
pb.RegisterAPINodeServiceServer(server, &services.APINodeService{})
pb.RegisterOriginServiceServer(server, &services.OriginService{})
pb.RegisterHTTPWebServiceServer(server, &services.HTTPWebService{})
pb.RegisterReverseProxyServiceServer(server, &services.ReverseProxyService{})
pb.RegisterHTTPGzipServiceServer(server, &services.HTTPGzipService{})
pb.RegisterHTTPHeaderPolicyServiceServer(server, &services.HTTPHeaderPolicyService{})
pb.RegisterHTTPHeaderServiceServer(server, &services.HTTPHeaderService{})
pb.RegisterHTTPPageServiceServer(server, &services.HTTPPageService{})
pb.RegisterHTTPAccessLogPolicyServiceServer(server, &services.HTTPAccessLogPolicyService{})
pb.RegisterHTTPCachePolicyServiceServer(server, &services.HTTPCachePolicyService{})
pb.RegisterHTTPFirewallPolicyServiceServer(server, &services.HTTPFirewallPolicyService{})
pb.RegisterHTTPLocationServiceServer(server, &services.HTTPLocationService{})
pb.RegisterHTTPWebsocketServiceServer(server, &services.HTTPWebsocketService{})
pb.RegisterHTTPRewriteRuleServiceServer(server, &services.HTTPRewriteRuleService{})
pb.RegisterSSLCertServiceServer(server, &services.SSLCertService{})
pb.RegisterSSLPolicyServiceServer(server, &services.SSLPolicyService{})
pb.RegisterSysSettingServiceServer(server, &services.SysSettingService{})
pb.RegisterHTTPFirewallRuleGroupServiceServer(server, &services.HTTPFirewallRuleGroupService{})
pb.RegisterHTTPFirewallRuleSetServiceServer(server, &services.HTTPFirewallRuleSetService{})
pb.RegisterDBNodeServiceServer(server, &services.DBNodeService{})
pb.RegisterNodeLogServiceServer(server, &services.NodeLogService{})
pb.RegisterHTTPAccessLogServiceServer(server, &services.HTTPAccessLogService{})
pb.RegisterMessageServiceServer(server, &services.MessageService{})
pb.RegisterMessageRecipientServiceServer(server, &services.MessageRecipientService{})
pb.RegisterMessageReceiverServiceServer(server, &services.MessageReceiverService{})
pb.RegisterMessageMediaServiceServer(server, &services.MessageMediaService{})
pb.RegisterMessageRecipientGroupServiceServer(server, &services.MessageRecipientGroupService{})
pb.RegisterMessageMediaInstanceServiceServer(server, &services.MessageMediaInstanceService{})
pb.RegisterMessageTaskServiceServer(server, &services.MessageTaskService{})
pb.RegisterMessageTaskLogServiceServer(server, &services.MessageTaskLogService{})
pb.RegisterNodeGroupServiceServer(server, &services.NodeGroupService{})
pb.RegisterNodeRegionServiceServer(server, &services.NodeRegionService{})
pb.RegisterNodePriceItemServiceServer(server, &services.NodePriceItemService{})
pb.RegisterServerGroupServiceServer(server, &services.ServerGroupService{})
pb.RegisterIPLibraryServiceServer(server, &services.IPLibraryService{})
pb.RegisterFileChunkServiceServer(server, &services.FileChunkService{})
pb.RegisterFileServiceServer(server, &services.FileService{})
pb.RegisterRegionCountryServiceServer(server, &services.RegionCountryService{})
pb.RegisterRegionProvinceServiceServer(server, &services.RegionProvinceService{})
pb.RegisterIPListServiceServer(server, &services.IPListService{})
pb.RegisterIPItemServiceServer(server, &services.IPItemService{})
pb.RegisterLogServiceServer(server, &services.LogService{})
pb.RegisterDNSProviderServiceServer(server, &services.DNSProviderService{})
pb.RegisterDNSDomainServiceServer(server, &services.DNSDomainService{})
pb.RegisterDNSServiceServer(server, &services.DNSService{})
pb.RegisterACMEUserServiceServer(server, &services.ACMEUserService{})
pb.RegisterACMETaskServiceServer(server, &services.ACMETaskService{})
pb.RegisterACMEAuthenticationServiceServer(server, &services.ACMEAuthenticationService{})
pb.RegisterUserServiceServer(server, &services.UserService{})
pb.RegisterServerDailyStatServiceServer(server, &services.ServerDailyStatService{})
pb.RegisterUserBillServiceServer(server, &services.UserBillService{})
pb.RegisterUserNodeServiceServer(server, &services.UserNodeService{})
pb.RegisterLoginServiceServer(server, &services.LoginService{})
pb.RegisterUserAccessKeyServiceServer(server, &services.UserAccessKeyService{})
pb.RegisterSysLockerServiceServer(server, &services.SysLockerService{})
pb.RegisterNodeTaskServiceServer(server, &services.NodeTaskService{})
pb.RegisterNodeValueServiceServer(server, &services.NodeValueService{})
pb.RegisterDBServiceServer(server, &services.DBService{})
pb.RegisterServerRegionCityMonthlyStatServiceServer(server, &services.ServerRegionCityMonthlyStatService{})
pb.RegisterServerRegionCountryMonthlyStatServiceServer(server, &services.ServerRegionCountryMonthlyStatService{})
pb.RegisterServerRegionProvinceMonthlyStatServiceServer(server, &services.ServerRegionProvinceMonthlyStatService{})
pb.RegisterServerRegionProviderMonthlyStatServiceServer(server, &services.ServerRegionProviderMonthlyStatService{})
pb.RegisterServerClientSystemMonthlyStatServiceServer(server, &services.ServerClientSystemMonthlyStatService{})
pb.RegisterServerClientBrowserMonthlyStatServiceServer(server, &services.ServerClientBrowserMonthlyStatService{})
pb.RegisterServerHTTPFirewallDailyStatServiceServer(server, &services.ServerHTTPFirewallDailyStatService{})
pb.RegisterDNSTaskServiceServer(server, &services.DNSTaskService{})
pb.RegisterNodeClusterFirewallActionServiceServer(server, &services.NodeClusterFirewallActionService{})
pb.RegisterMonitorNodeServiceServer(server, &services.MonitorNodeService{})
pb.RegisterAuthorityKeyServiceServer(server, &services.AuthorityKeyService{})
pb.RegisterAuthorityNodeServiceServer(server, &services.AuthorityNodeService{})
pb.RegisterLatestItemServiceServer(server, &services.LatestItemService{})
pb.RegisterNodeThresholdServiceServer(server, &services.NodeThresholdService{})
pb.RegisterHTTPFastcgiServiceServer(server, &services.HTTPFastcgiService{})
pb.RegisterNSClusterServiceServer(server, &services.NSClusterService{})
}

View File

@@ -0,0 +1,135 @@
// Copyright 2021 Liuxiangchao iwind.liu@gmail.com. All rights reserved.
package services
import (
"context"
"github.com/TeaOSLab/EdgeAPI/internal/db/models/nameservers"
"github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb"
)
// NSClusterService 域名服务集群相关服务
type NSClusterService struct {
BaseService
}
// CreateNSCluster 创建集群
func (this *NSClusterService) CreateNSCluster(ctx context.Context, req *pb.CreateNSClusterRequest) (*pb.CreateNSClusterResponse, error) {
_, err := this.ValidateAdmin(ctx, 0)
if err != nil {
return nil, err
}
var tx = this.NullTx()
clusterId, err := nameservers.SharedNSClusterDAO.CreateCluster(tx, req.Name)
if err != nil {
return nil, err
}
return &pb.CreateNSClusterResponse{NsClusterId: clusterId}, nil
}
// UpdateNSCluster 修改集群
func (this *NSClusterService) UpdateNSCluster(ctx context.Context, req *pb.UpdateNSClusterRequest) (*pb.RPCSuccess, error) {
_, err := this.ValidateAdmin(ctx, 0)
if err != nil {
return nil, err
}
var tx = this.NullTx()
err = nameservers.SharedNSClusterDAO.UpdateCluster(tx, req.NsClusterId, req.Name, req.IsOn)
if err != nil {
return nil, err
}
return this.Success()
}
// DeleteNSCluster 删除集群
func (this *NSClusterService) DeleteNSCluster(ctx context.Context, req *pb.DeleteNSCluster) (*pb.RPCSuccess, error) {
_, err := this.ValidateAdmin(ctx, 0)
if err != nil {
return nil, err
}
var tx = this.NullTx()
err = nameservers.SharedNSClusterDAO.DisableNSCluster(tx, req.NsClusterId)
if err != nil {
return nil, err
}
return this.Success()
}
// FindEnabledNSCluster 查找单个可用集群信息
func (this *NSClusterService) FindEnabledNSCluster(ctx context.Context, req *pb.FindEnabledNSClusterRequest) (*pb.FindEnabledNSClusterResponse, error) {
_, err := this.ValidateAdmin(ctx, 0)
if err != nil {
return nil, err
}
var tx = this.NullTx()
cluster, err := nameservers.SharedNSClusterDAO.FindEnabledNSCluster(tx, req.NsClusterId)
if err != nil {
return nil, err
}
if cluster == nil {
return &pb.FindEnabledNSClusterResponse{NsCluster: nil}, nil
}
return &pb.FindEnabledNSClusterResponse{NsCluster: &pb.NSCluster{
Id: int64(cluster.Id),
IsOn: cluster.IsOn == 1,
Name: cluster.Name,
}}, nil
}
// CountAllEnabledNSClusters 计算所有可用集群的数量
func (this *NSClusterService) CountAllEnabledNSClusters(ctx context.Context, req *pb.CountAllEnabledNSClustersRequest) (*pb.RPCCountResponse, error) {
_, err := this.ValidateAdmin(ctx, 0)
if err != nil {
return nil, err
}
var tx = this.NullTx()
count, err := nameservers.SharedNSClusterDAO.CountAllEnabledClusters(tx)
if err != nil {
return nil, err
}
return this.SuccessCount(count)
}
// ListEnabledNSClusters 列出单页可用集群
func (this *NSClusterService) ListEnabledNSClusters(ctx context.Context, req *pb.ListEnabledNSClustersRequest) (*pb.ListEnabledNSClustersResponse, error) {
_, err := this.ValidateAdmin(ctx, 0)
if err != nil {
return nil, err
}
var tx = this.NullTx()
clusters, err := nameservers.SharedNSClusterDAO.ListEnabledNSClusters(tx, req.Offset, req.Size)
if err != nil {
return nil, err
}
var pbClusters = []*pb.NSCluster{}
for _, cluster := range clusters {
pbClusters = append(pbClusters, &pb.NSCluster{
Id: int64(cluster.Id),
IsOn: cluster.IsOn == 1,
Name: cluster.Name,
})
}
return &pb.ListEnabledNSClustersResponse{NsClusters: pbClusters}, nil
}
// FindAllEnabledNSClusters 查找所有可用集群
func (this *NSClusterService) FindAllEnabledNSClusters(ctx context.Context, req *pb.FindAllEnabledNSClustersRequest) (*pb.FindAllEnabledNSClustersResponse, error) {
_, err := this.ValidateAdmin(ctx, 0)
if err != nil {
return nil, err
}
var tx = this.NullTx()
clusters, err := nameservers.SharedNSClusterDAO.FindAllEnabledNSClusters(tx)
if err != nil {
return nil, err
}
var pbClusters = []*pb.NSCluster{}
for _, cluster := range clusters {
pbClusters = append(pbClusters, &pb.NSCluster{
Id: int64(cluster.Id),
IsOn: cluster.IsOn == 1,
Name: cluster.Name,
})
}
return &pb.FindAllEnabledNSClustersResponse{NsClusters: pbClusters}, nil
}

File diff suppressed because one or more lines are too long