mirror of
				https://github.com/TeaOSLab/EdgeAdmin.git
				synced 2025-11-04 05:00:25 +08:00 
			
		
		
		
	实现数据库节点管理
This commit is contained in:
		@@ -87,6 +87,10 @@ func (this *RPCClient) APINodeRPC() pb.APINodeServiceClient {
 | 
			
		||||
	return pb.NewAPINodeServiceClient(this.pickConn())
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (this *RPCClient) DBNodeRPC() pb.DBNodeServiceClient {
 | 
			
		||||
	return pb.NewDBNodeServiceClient(this.pickConn())
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (this *RPCClient) OriginRPC() pb.OriginServiceClient {
 | 
			
		||||
	return pb.NewOriginServiceClient(this.pickConn())
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										64
									
								
								internal/web/actions/default/db/createPopup.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										64
									
								
								internal/web/actions/default/db/createPopup.go
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,64 @@
 | 
			
		||||
package db
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils"
 | 
			
		||||
	"github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb"
 | 
			
		||||
	"github.com/iwind/TeaGo/actions"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
type CreatePopupAction struct {
 | 
			
		||||
	actionutils.ParentAction
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (this *CreatePopupAction) Init() {
 | 
			
		||||
	this.Nav("", "", "")
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (this *CreatePopupAction) RunGet(params struct{}) {
 | 
			
		||||
	this.Show()
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (this *CreatePopupAction) RunPost(params struct {
 | 
			
		||||
	Name     string
 | 
			
		||||
	Host     string
 | 
			
		||||
	Port     int32
 | 
			
		||||
	Database string
 | 
			
		||||
	Username string
 | 
			
		||||
	Password string
 | 
			
		||||
 | 
			
		||||
	Description string
 | 
			
		||||
	IsOn        bool
 | 
			
		||||
 | 
			
		||||
	Must *actions.Must
 | 
			
		||||
}) {
 | 
			
		||||
	params.Must.
 | 
			
		||||
		Field("name", params.Name).
 | 
			
		||||
		Require("请输入节点名称").
 | 
			
		||||
		Field("host", params.Host).
 | 
			
		||||
		Require("请输入主机地址").
 | 
			
		||||
		Field("port", params.Port).
 | 
			
		||||
		Gt(0, "请输入正确的数据库端口").
 | 
			
		||||
		Lt(65535, "请输入正确的数据库端口").
 | 
			
		||||
		Field("database", params.Database).
 | 
			
		||||
		Require("请输入数据库名称").
 | 
			
		||||
		Field("username", params.Username).
 | 
			
		||||
		Require("请输入连接数据库的用户名")
 | 
			
		||||
 | 
			
		||||
	_, err := this.RPC().DBNodeRPC().CreateDBNode(this.AdminContext(), &pb.CreateDBNodeRequest{
 | 
			
		||||
		IsOn:        params.IsOn,
 | 
			
		||||
		Name:        params.Name,
 | 
			
		||||
		Description: params.Description,
 | 
			
		||||
		Host:        params.Host,
 | 
			
		||||
		Port:        params.Port,
 | 
			
		||||
		Database:    params.Database,
 | 
			
		||||
		Username:    params.Username,
 | 
			
		||||
		Password:    params.Password,
 | 
			
		||||
		Charset:     "", // 暂时不能修改
 | 
			
		||||
	})
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		this.ErrorPage(err)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	this.Success()
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										22
									
								
								internal/web/actions/default/db/delete.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								internal/web/actions/default/db/delete.go
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,22 @@
 | 
			
		||||
package db
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils"
 | 
			
		||||
	"github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
type DeleteAction struct {
 | 
			
		||||
	actionutils.ParentAction
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (this *DeleteAction) RunPost(params struct {
 | 
			
		||||
	NodeId int64
 | 
			
		||||
}) {
 | 
			
		||||
	_, err := this.RPC().DBNodeRPC().DeleteDBNode(this.AdminContext(), &pb.DeleteDBNodeRequest{NodeId: params.NodeId})
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		this.ErrorPage(err)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	this.Success()
 | 
			
		||||
}
 | 
			
		||||
@@ -1,6 +1,10 @@
 | 
			
		||||
package db
 | 
			
		||||
 | 
			
		||||
import "github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils"
 | 
			
		||||
import (
 | 
			
		||||
	"github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils"
 | 
			
		||||
	"github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb"
 | 
			
		||||
	"github.com/iwind/TeaGo/maps"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
type IndexAction struct {
 | 
			
		||||
	actionutils.ParentAction
 | 
			
		||||
@@ -11,5 +15,36 @@ func (this *IndexAction) Init() {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (this *IndexAction) RunGet(params struct{}) {
 | 
			
		||||
	countResp, err := this.RPC().DBNodeRPC().CountAllEnabledDBNodes(this.AdminContext(), &pb.CountAllEnabledDBNodesRequest{})
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		this.ErrorPage(err)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	count := countResp.Count
 | 
			
		||||
 | 
			
		||||
	page := this.NewPage(count)
 | 
			
		||||
	listResp, err := this.RPC().DBNodeRPC().ListEnabledDBNodes(this.AdminContext(), &pb.ListEnabledDBNodesRequest{
 | 
			
		||||
		Offset: page.Offset,
 | 
			
		||||
		Size:   page.Size,
 | 
			
		||||
	})
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		this.ErrorPage(err)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	nodeMaps := []maps.Map{}
 | 
			
		||||
	for _, node := range listResp.Nodes {
 | 
			
		||||
		nodeMaps = append(nodeMaps, maps.Map{
 | 
			
		||||
			"id":       node.Id,
 | 
			
		||||
			"isOn":     node.IsOn,
 | 
			
		||||
			"name":     node.Name,
 | 
			
		||||
			"host":     node.Host,
 | 
			
		||||
			"port":     node.Port,
 | 
			
		||||
			"database": node.Database,
 | 
			
		||||
		})
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	this.Data["nodes"] = nodeMaps
 | 
			
		||||
	this.Data["page"] = page.AsHTML()
 | 
			
		||||
 | 
			
		||||
	this.Show()
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -12,6 +12,9 @@ func init() {
 | 
			
		||||
			Helper(new(Helper)).
 | 
			
		||||
			Prefix("/db").
 | 
			
		||||
			Get("", new(IndexAction)).
 | 
			
		||||
			GetPost("/createPopup", new(CreatePopupAction)).
 | 
			
		||||
			GetPost("/updatePopup", new(UpdatePopupAction)).
 | 
			
		||||
			Post("/delete", new(DeleteAction)).
 | 
			
		||||
 | 
			
		||||
			EndAll()
 | 
			
		||||
	})
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										94
									
								
								internal/web/actions/default/db/updatePopup.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										94
									
								
								internal/web/actions/default/db/updatePopup.go
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,94 @@
 | 
			
		||||
package db
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils"
 | 
			
		||||
	"github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb"
 | 
			
		||||
	"github.com/iwind/TeaGo/actions"
 | 
			
		||||
	"github.com/iwind/TeaGo/maps"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
type UpdatePopupAction struct {
 | 
			
		||||
	actionutils.ParentAction
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (this *UpdatePopupAction) Init() {
 | 
			
		||||
	this.Nav("", "", "")
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (this *UpdatePopupAction) RunGet(params struct {
 | 
			
		||||
	NodeId int64
 | 
			
		||||
}) {
 | 
			
		||||
	nodeResp, err := this.RPC().DBNodeRPC().FindEnabledDBNode(this.AdminContext(), &pb.FindEnabledDBNodeRequest{NodeId: params.NodeId})
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		this.ErrorPage(err)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	node := nodeResp.Node
 | 
			
		||||
	if node == nil {
 | 
			
		||||
		this.NotFound("dbNode", params.NodeId)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	this.Data["node"] = maps.Map{
 | 
			
		||||
		"id":          node.Id,
 | 
			
		||||
		"isOn":        node.IsOn,
 | 
			
		||||
		"name":        node.Name,
 | 
			
		||||
		"description": node.Description,
 | 
			
		||||
		"host":        node.Host,
 | 
			
		||||
		"port":        node.Port,
 | 
			
		||||
		"username":    node.Username,
 | 
			
		||||
		"password":    node.Password,
 | 
			
		||||
		"database":    node.Database,
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	this.Show()
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (this *UpdatePopupAction) RunPost(params struct {
 | 
			
		||||
	NodeId int64
 | 
			
		||||
 | 
			
		||||
	Name     string
 | 
			
		||||
	Host     string
 | 
			
		||||
	Port     int32
 | 
			
		||||
	Database string
 | 
			
		||||
	Username string
 | 
			
		||||
	Password string
 | 
			
		||||
 | 
			
		||||
	Description string
 | 
			
		||||
	IsOn        bool
 | 
			
		||||
 | 
			
		||||
	Must *actions.Must
 | 
			
		||||
}) {
 | 
			
		||||
	params.Must.
 | 
			
		||||
		Field("name", params.Name).
 | 
			
		||||
		Require("请输入节点名称").
 | 
			
		||||
		Field("host", params.Host).
 | 
			
		||||
		Require("请输入主机地址").
 | 
			
		||||
		Field("port", params.Port).
 | 
			
		||||
		Gt(0, "请输入正确的数据库端口").
 | 
			
		||||
		Lt(65535, "请输入正确的数据库端口").
 | 
			
		||||
		Field("database", params.Database).
 | 
			
		||||
		Require("请输入数据库名称").
 | 
			
		||||
		Field("username", params.Username).
 | 
			
		||||
		Require("请输入连接数据库的用户名")
 | 
			
		||||
 | 
			
		||||
	_, err := this.RPC().DBNodeRPC().UpdateDBNode(this.AdminContext(), &pb.UpdateDBNodeRequest{
 | 
			
		||||
		NodeId:      params.NodeId,
 | 
			
		||||
		IsOn:        params.IsOn,
 | 
			
		||||
		Name:        params.Name,
 | 
			
		||||
		Description: params.Description,
 | 
			
		||||
		Host:        params.Host,
 | 
			
		||||
		Port:        params.Port,
 | 
			
		||||
		Database:    params.Database,
 | 
			
		||||
		Username:    params.Username,
 | 
			
		||||
		Password:    params.Password,
 | 
			
		||||
		Charset:     "", // 暂时不能修改
 | 
			
		||||
	})
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		this.ErrorPage(err)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	this.Success()
 | 
			
		||||
}
 | 
			
		||||
@@ -82,7 +82,7 @@ func (this *UserMustAuth) BeforeAction(actionPtr actions.ActionWrapper, paramNam
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			"code":     "db",
 | 
			
		||||
			"menuName": "数据库",
 | 
			
		||||
			"menuName": "日志数据库",
 | 
			
		||||
			"icon":     "database",
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user