mirror of
				https://github.com/TeaOSLab/EdgeAPI.git
				synced 2025-11-04 07:50:25 +08:00 
			
		
		
		
	实现域名服务器集群管理
This commit is contained in:
		
							
								
								
									
										114
									
								
								internal/db/models/nameservers/ns_cluster_dao.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										114
									
								
								internal/db/models/nameservers/ns_cluster_dao.go
									
									
									
									
									
										Normal 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
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										6
									
								
								internal/db/models/nameservers/ns_cluster_dao_test.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								internal/db/models/nameservers/ns_cluster_dao_test.go
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,6 @@
 | 
			
		||||
package nameservers
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	_ "github.com/go-sql-driver/mysql"
 | 
			
		||||
	_ "github.com/iwind/TeaGo/bootstrap"
 | 
			
		||||
)
 | 
			
		||||
							
								
								
									
										20
									
								
								internal/db/models/nameservers/ns_cluster_model.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								internal/db/models/nameservers/ns_cluster_model.go
									
									
									
									
									
										Normal 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{}
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										1
									
								
								internal/db/models/nameservers/ns_cluster_model_ext.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								internal/db/models/nameservers/ns_cluster_model_ext.go
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1 @@
 | 
			
		||||
package nameservers
 | 
			
		||||
							
								
								
									
										71
									
								
								internal/db/models/nameservers/ns_domain_dao.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										71
									
								
								internal/db/models/nameservers/ns_domain_dao.go
									
									
									
									
									
										Normal 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("")
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										6
									
								
								internal/db/models/nameservers/ns_domain_dao_test.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								internal/db/models/nameservers/ns_domain_dao_test.go
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,6 @@
 | 
			
		||||
package nameservers
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	_ "github.com/go-sql-driver/mysql"
 | 
			
		||||
	_ "github.com/iwind/TeaGo/bootstrap"
 | 
			
		||||
)
 | 
			
		||||
							
								
								
									
										26
									
								
								internal/db/models/nameservers/ns_domain_model.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										26
									
								
								internal/db/models/nameservers/ns_domain_model.go
									
									
									
									
									
										Normal 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{}
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										1
									
								
								internal/db/models/nameservers/ns_domain_model_ext.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								internal/db/models/nameservers/ns_domain_model_ext.go
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1 @@
 | 
			
		||||
package nameservers
 | 
			
		||||
							
								
								
									
										63
									
								
								internal/db/models/nameservers/ns_node_dao.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										63
									
								
								internal/db/models/nameservers/ns_node_dao.go
									
									
									
									
									
										Normal 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
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										6
									
								
								internal/db/models/nameservers/ns_node_dao_test.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								internal/db/models/nameservers/ns_node_dao_test.go
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,6 @@
 | 
			
		||||
package nameservers
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	_ "github.com/go-sql-driver/mysql"
 | 
			
		||||
	_ "github.com/iwind/TeaGo/bootstrap"
 | 
			
		||||
)
 | 
			
		||||
							
								
								
									
										26
									
								
								internal/db/models/nameservers/ns_node_model.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										26
									
								
								internal/db/models/nameservers/ns_node_model.go
									
									
									
									
									
										Normal 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{}
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										1
									
								
								internal/db/models/nameservers/ns_node_model_ext.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								internal/db/models/nameservers/ns_node_model_ext.go
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1 @@
 | 
			
		||||
package nameservers
 | 
			
		||||
							
								
								
									
										71
									
								
								internal/db/models/nameservers/ns_record_dao.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										71
									
								
								internal/db/models/nameservers/ns_record_dao.go
									
									
									
									
									
										Normal 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("")
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										6
									
								
								internal/db/models/nameservers/ns_record_dao_test.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								internal/db/models/nameservers/ns_record_dao_test.go
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,6 @@
 | 
			
		||||
package nameservers
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	_ "github.com/go-sql-driver/mysql"
 | 
			
		||||
	_ "github.com/iwind/TeaGo/bootstrap"
 | 
			
		||||
)
 | 
			
		||||
							
								
								
									
										34
									
								
								internal/db/models/nameservers/ns_record_model.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										34
									
								
								internal/db/models/nameservers/ns_record_model.go
									
									
									
									
									
										Normal 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{}
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										1
									
								
								internal/db/models/nameservers/ns_record_model_ext.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								internal/db/models/nameservers/ns_record_model_ext.go
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1 @@
 | 
			
		||||
package nameservers
 | 
			
		||||
							
								
								
									
										71
									
								
								internal/db/models/nameservers/ns_route_dao.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										71
									
								
								internal/db/models/nameservers/ns_route_dao.go
									
									
									
									
									
										Normal 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("")
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										6
									
								
								internal/db/models/nameservers/ns_route_dao_test.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								internal/db/models/nameservers/ns_route_dao_test.go
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,6 @@
 | 
			
		||||
package nameservers
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	_ "github.com/go-sql-driver/mysql"
 | 
			
		||||
	_ "github.com/iwind/TeaGo/bootstrap"
 | 
			
		||||
)
 | 
			
		||||
							
								
								
									
										26
									
								
								internal/db/models/nameservers/ns_route_model.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										26
									
								
								internal/db/models/nameservers/ns_route_model.go
									
									
									
									
									
										Normal 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{}
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										1
									
								
								internal/db/models/nameservers/ns_route_model_ext.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								internal/db/models/nameservers/ns_route_model_ext.go
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1 @@
 | 
			
		||||
package nameservers
 | 
			
		||||
@@ -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())
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										93
									
								
								internal/nodes/api_node_services.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										93
									
								
								internal/nodes/api_node_services.go
									
									
									
									
									
										Normal 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{})
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										135
									
								
								internal/rpc/services/service_ns_cluster.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										135
									
								
								internal/rpc/services/service_ns_cluster.go
									
									
									
									
									
										Normal 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
											
										
									
								
							
		Reference in New Issue
	
	Block a user