阶段性提交

This commit is contained in:
GoEdgeLab
2020-09-13 20:37:28 +08:00
parent 84868c1a0b
commit dc79c661d7
89 changed files with 1364 additions and 12899 deletions

View File

@@ -3,9 +3,9 @@ package services
import (
"context"
"github.com/TeaOSLab/EdgeAPI/internal/db/models"
"github.com/TeaOSLab/EdgeAPI/internal/rpc/pb"
rpcutils "github.com/TeaOSLab/EdgeAPI/internal/rpc/utils"
"github.com/TeaOSLab/EdgeAPI/internal/utils"
"github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb"
)
type AdminService struct {
@@ -79,7 +79,7 @@ func (this *AdminService) CheckAdminExists(ctx context.Context, req *pb.CheckAdm
}, nil
}
func (this *AdminService) FindAdminFullname(ctx context.Context, req *pb.FindAdminNameRequest) (*pb.FindAdminNameResponse, error) {
func (this *AdminService) FindAdminFullname(ctx context.Context, req *pb.FindAdminFullnameRequest) (*pb.FindAdminFullnameResponse, error) {
_, _, err := rpcutils.ValidateRequest(ctx)
if err != nil {
return nil, err
@@ -91,7 +91,7 @@ func (this *AdminService) FindAdminFullname(ctx context.Context, req *pb.FindAdm
return nil, err
}
return &pb.FindAdminNameResponse{
return &pb.FindAdminFullnameResponse{
Fullname: fullname,
}, nil
}
}

View File

@@ -5,7 +5,7 @@ import (
"encoding/base64"
teaconst "github.com/TeaOSLab/EdgeAPI/internal/const"
"github.com/TeaOSLab/EdgeAPI/internal/encrypt"
"github.com/TeaOSLab/EdgeAPI/internal/rpc/pb"
"github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb"
"github.com/iwind/TeaGo/assert"
"github.com/iwind/TeaGo/maps"
stringutil "github.com/iwind/TeaGo/utils/string"
@@ -19,7 +19,7 @@ func TestAdminService_Login(t *testing.T) {
service := &AdminService{
debug: true,
}
resp, err := service.Login(testCtx(t), &pb.AdminLoginRequest{
resp, err := service.LoginAdmin(testCtx(t), &pb.LoginAdminRequest{
Username: "admin",
Password: stringutil.Md5("123456"),
})
@@ -32,7 +32,7 @@ func TestAdminService_Login(t *testing.T) {
func TestAdminService_CreateLog(t *testing.T) {
service := &AdminService{debug: true}
resp, err := service.CreateLog(testCtx(t), &pb.AdminCreateLogRequest{
resp, err := service.CreateAdminLog(testCtx(t), &pb.CreateAdminLogRequest{
Level: "info",
Description: "这是一个测试日志",
Action: "/login",
@@ -44,11 +44,11 @@ func TestAdminService_CreateLog(t *testing.T) {
t.Log(resp)
}
func TestAdminService_FindAllEnabledClusters(t *testing.T) {
func TestAdminService_FindAdminFullname(t *testing.T) {
service := &AdminService{
debug: true,
}
resp, err := service.FindAllEnabledClusters(testCtx(t), &pb.AdminFindAllEnabledClustersRequest{})
resp, err := service.FindAdminFullname(testCtx(t), &pb.FindAdminFullnameRequest{AdminId: 1})
if err != nil {
t.Fatal(err)
}

View File

@@ -3,8 +3,8 @@ package services
import (
"context"
"github.com/TeaOSLab/EdgeAPI/internal/db/models"
"github.com/TeaOSLab/EdgeAPI/internal/rpc/pb"
rpcutils "github.com/TeaOSLab/EdgeAPI/internal/rpc/utils"
"github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb"
)
type APINodeService struct {
@@ -79,6 +79,7 @@ func (this *APINodeService) FindAllEnabledAPINodes(ctx context.Context, req *pb.
Description: node.Description,
Host: node.Host,
Port: int32(node.Port),
Address: node.Address(),
})
}
@@ -124,6 +125,7 @@ func (this *APINodeService) ListEnabledAPINodes(ctx context.Context, req *pb.Lis
Description: node.Description,
Host: node.Host,
Port: int32(node.Port),
Address: node.Address(),
})
}
@@ -156,6 +158,7 @@ func (this *APINodeService) FindEnabledAPINode(ctx context.Context, req *pb.Find
Description: node.Description,
Host: node.Host,
Port: int32(node.Port),
Address: node.Address(),
}
return &pb.FindEnabledAPINodeResponse{Node: result}, nil
}

View File

@@ -5,15 +5,18 @@ import (
"encoding/json"
"errors"
"github.com/TeaOSLab/EdgeAPI/internal/db/models"
"github.com/TeaOSLab/EdgeAPI/internal/rpc/pb"
"github.com/TeaOSLab/EdgeAPI/internal/installers"
rpcutils "github.com/TeaOSLab/EdgeAPI/internal/rpc/utils"
"github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb"
"github.com/iwind/TeaGo/logs"
"github.com/iwind/TeaGo/maps"
"github.com/iwind/TeaGo/types"
)
type NodeService struct {
}
// 创建节点
func (this *NodeService) CreateNode(ctx context.Context, req *pb.CreateNodeRequest) (*pb.CreateNodeResponse, error) {
_, _, err := rpcutils.ValidateRequest(ctx, rpcutils.UserTypeAdmin)
if err != nil {
@@ -38,6 +41,7 @@ func (this *NodeService) CreateNode(ctx context.Context, req *pb.CreateNodeReque
}, nil
}
// 计算节点数量
func (this *NodeService) CountAllEnabledNodes(ctx context.Context, req *pb.CountAllEnabledNodesRequest) (*pb.CountAllEnabledNodesResponse, error) {
_ = req
_, _, err := rpcutils.ValidateRequest(ctx, rpcutils.UserTypeAdmin)
@@ -58,19 +62,20 @@ func (this *NodeService) CountAllEnabledNodesMatch(ctx context.Context, req *pb.
if err != nil {
return nil, err
}
count, err := models.SharedNodeDAO.CountAllEnabledNodesMatch(req.ClusterId)
count, err := models.SharedNodeDAO.CountAllEnabledNodesMatch(req.ClusterId, types.Int8(req.InstallState))
if err != nil {
return nil, err
}
return &pb.CountAllEnabledNodesMatchResponse{Count: count}, nil
}
// 列出单页的节点
func (this *NodeService) ListEnabledNodesMatch(ctx context.Context, req *pb.ListEnabledNodesMatchRequest) (*pb.ListEnabledNodesMatchResponse, error) {
_, _, err := rpcutils.ValidateRequest(ctx, rpcutils.UserTypeAdmin)
if err != nil {
return nil, err
}
nodes, err := models.SharedNodeDAO.ListEnabledNodesMatch(req.Offset, req.Size, req.ClusterId)
nodes, err := models.SharedNodeDAO.ListEnabledNodesMatch(req.Offset, req.Size, req.ClusterId, types.Int8(req.InstallState))
if err != nil {
return nil, err
}
@@ -82,14 +87,32 @@ func (this *NodeService) ListEnabledNodesMatch(ctx context.Context, req *pb.List
return nil, err
}
// 安装信息
installStatus, err := node.DecodeInstallStatus()
if err != nil {
return nil, err
}
installStatusResult := &pb.NodeInstallStatus{}
if installStatus != nil {
installStatusResult = &pb.NodeInstallStatus{
IsRunning: installStatus.IsRunning,
IsFinished: installStatus.IsFinished,
IsOk: installStatus.IsOk,
Error: installStatus.Error,
UpdatedAt: installStatus.UpdatedAt,
}
}
result = append(result, &pb.Node{
Id: int64(node.Id),
Name: node.Name,
Status: node.Status,
Id: int64(node.Id),
Name: node.Name,
IsInstalled: node.IsInstalled == 1,
Status: node.Status,
Cluster: &pb.NodeCluster{
Id: int64(node.ClusterId),
Name: clusterName,
},
InstallStatus: installStatusResult,
})
}
@@ -183,6 +206,22 @@ func (this *NodeService) FindEnabledNode(ctx context.Context, req *pb.FindEnable
}
}
// 安装信息
installStatus, err := node.DecodeInstallStatus()
if err != nil {
return nil, err
}
installStatusResult := &pb.NodeInstallStatus{}
if installStatus != nil {
installStatusResult = &pb.NodeInstallStatus{
IsRunning: installStatus.IsRunning,
IsFinished: installStatus.IsFinished,
IsOk: installStatus.IsOk,
Error: installStatus.Error,
UpdatedAt: installStatus.UpdatedAt,
}
}
return &pb.FindEnabledNodeResponse{Node: &pb.Node{
Id: int64(node.Id),
Name: node.Name,
@@ -195,7 +234,8 @@ func (this *NodeService) FindEnabledNode(ctx context.Context, req *pb.FindEnable
Id: int64(node.ClusterId),
Name: clusterName,
},
Login: respLogin,
Login: respLogin,
InstallStatus: installStatusResult,
}}, nil
}
@@ -323,3 +363,20 @@ func (this *NodeService) UpdateNodeIsInstalled(ctx context.Context, req *pb.Upda
return &pb.UpdateNodeIsInstalledResponse{}, nil
}
// 安装节点
func (this *NodeService) InstallNode(ctx context.Context, req *pb.InstallNodeRequest) (*pb.InstallNodeResponse, error) {
_, _, err := rpcutils.ValidateRequest(ctx, rpcutils.UserTypeAdmin)
if err != nil {
return nil, err
}
go func() {
err = installers.SharedQueue().InstallNodeProcess(req.NodeId)
if err != nil {
logs.Println("[RPC]install node:" + err.Error())
}
}()
return &pb.InstallNodeResponse{}, nil
}

View File

@@ -3,8 +3,8 @@ package services
import (
"context"
"github.com/TeaOSLab/EdgeAPI/internal/db/models"
"github.com/TeaOSLab/EdgeAPI/internal/rpc/pb"
rpcutils "github.com/TeaOSLab/EdgeAPI/internal/rpc/utils"
"github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb"
)
type NodeClusterService struct {

View File

@@ -4,8 +4,8 @@ import (
"context"
"errors"
"github.com/TeaOSLab/EdgeAPI/internal/db/models"
"github.com/TeaOSLab/EdgeAPI/internal/rpc/pb"
rpcutils "github.com/TeaOSLab/EdgeAPI/internal/rpc/utils"
"github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb"
)
type NodeGrantService struct {

View File

@@ -3,8 +3,8 @@ package services
import (
"context"
"github.com/TeaOSLab/EdgeAPI/internal/db/models"
"github.com/TeaOSLab/EdgeAPI/internal/rpc/pb"
rpcutils "github.com/TeaOSLab/EdgeAPI/internal/rpc/utils"
"github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb"
)
type NodeIPAddressService struct {

View File

@@ -0,0 +1,95 @@
package services
import (
"context"
"errors"
"github.com/TeaOSLab/EdgeAPI/internal/db/models"
rpcutils "github.com/TeaOSLab/EdgeAPI/internal/rpc/utils"
"github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb"
"github.com/iwind/TeaGo/maps"
)
// 源站相关管理
type OriginServerService struct {
}
// 创建源站
func (this *OriginServerService) CreateOriginServer(ctx context.Context, req *pb.CreateOriginServerRequest) (*pb.CreateOriginServerResponse, error) {
_, _, err := rpcutils.ValidateRequest(ctx, rpcutils.UserTypeAdmin)
if err != nil {
return nil, err
}
if req.Addr == nil {
return nil, errors.New("'addr' can not be nil")
}
addrMap := maps.Map{
"protocol": req.Addr.Protocol,
"portRange": req.Addr.PortRange,
"host": req.Addr.Host,
}
originId, err := models.SharedOriginServerDAO.CreateOriginServer(req.Name, string(addrMap.AsJSON()), req.Description)
if err != nil {
return nil, err
}
return &pb.CreateOriginServerResponse{OriginId: originId}, nil
}
// 修改源站
func (this *OriginServerService) UpdateOriginServer(ctx context.Context, req *pb.UpdateOriginServerRequest) (*pb.UpdateOriginServerResponse, error) {
_, _, err := rpcutils.ValidateRequest(ctx, rpcutils.UserTypeAdmin)
if err != nil {
return nil, err
}
if req.Addr == nil {
return nil, errors.New("'addr' can not be nil")
}
addrMap := maps.Map{
"protocol": req.Addr.Protocol,
"portRange": req.Addr.PortRange,
"host": req.Addr.Host,
}
err = models.SharedOriginServerDAO.UpdateOriginServer(req.OriginId, req.Name, string(addrMap.AsJSON()), req.Description)
if err != nil {
return nil, err
}
return &pb.UpdateOriginServerResponse{}, nil
}
// 查找单个源站信息
func (this *OriginServerService) FindEnabledOriginServer(ctx context.Context, req *pb.FindEnabledOriginServerRequest) (*pb.FindEnabledOriginServerResponse, error) {
_, _, err := rpcutils.ValidateRequest(ctx, rpcutils.UserTypeAdmin)
if err != nil {
return nil, err
}
origin, err := models.SharedOriginServerDAO.FindEnabledOriginServer(req.OriginId)
if err != nil {
return nil, err
}
if origin == nil {
return &pb.FindEnabledOriginServerResponse{Origin: nil}, nil
}
addr, err := origin.DecodeAddr()
if err != nil {
return nil, err
}
result := &pb.OriginServer{
Id: int64(origin.Id),
IsOn: origin.IsOn == 1,
Name: origin.Name,
Addr: &pb.NetworkAddress{
Protocol: addr.Protocol,
Host: addr.Host,
PortRange: addr.PortRange,
},
Description: origin.Description,
}
return &pb.FindEnabledOriginServerResponse{Origin: result}, nil
}

View File

@@ -4,8 +4,8 @@ import (
"context"
"errors"
"github.com/TeaOSLab/EdgeAPI/internal/db/models"
"github.com/TeaOSLab/EdgeAPI/internal/rpc/pb"
rpcutils "github.com/TeaOSLab/EdgeAPI/internal/rpc/utils"
"github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb"
)
type ServerService struct {
@@ -17,7 +17,7 @@ func (this *ServerService) CreateServer(ctx context.Context, req *pb.CreateServe
if err != nil {
return nil, err
}
serverId, err := models.SharedServerDAO.CreateServer(req.AdminId, req.UserId, req.ClusterId, string(req.Config), string(req.IncludeNodesJSON), string(req.ExcludeNodesJSON))
serverId, err := models.SharedServerDAO.CreateServer(req.AdminId, req.UserId, req.Type, req.Name, req.Description, req.ClusterId, string(req.Config), string(req.IncludeNodesJSON), string(req.ExcludeNodesJSON))
if err != nil {
return nil, err
}
@@ -32,7 +32,7 @@ func (this *ServerService) CreateServer(ctx context.Context, req *pb.CreateServe
}
// 修改服务
func (this *ServerService) UpdateServer(ctx context.Context, req *pb.UpdateServerRequest) (*pb.UpdateServerResponse, error) {
func (this *ServerService) UpdateServerBasic(ctx context.Context, req *pb.UpdateServerBasicRequest) (*pb.UpdateServerBasicResponse, error) {
_, _, err := rpcutils.ValidateRequest(ctx, rpcutils.UserTypeAdmin)
if err != nil {
return nil, err
@@ -51,7 +51,7 @@ func (this *ServerService) UpdateServer(ctx context.Context, req *pb.UpdateServe
return nil, errors.New("can not find server")
}
err = models.SharedServerDAO.UpdateServer(req.ServerId, req.ClusterId, string(req.Config), string(req.IncludeNodesJSON), string(req.ExcludeNodesJSON))
err = models.SharedServerDAO.UpdateServerBasic(req.ServerId, req.Name, req.Description, req.ClusterId)
if err != nil {
return nil, err
}
@@ -70,7 +70,42 @@ func (this *ServerService) UpdateServer(ctx context.Context, req *pb.UpdateServe
return nil, err
}
return &pb.UpdateServerResponse{}, nil
return &pb.UpdateServerBasicResponse{}, nil
}
// 修改服务配置
func (this *ServerService) UpdateServerConfig(ctx context.Context, req *pb.UpdateServerConfigRequest) (*pb.UpdateServerConfigResponse, error) {
_, _, err := rpcutils.ValidateRequest(ctx, rpcutils.UserTypeAdmin)
if err != nil {
return nil, err
}
if req.ServerId <= 0 {
return nil, errors.New("invalid serverId")
}
// 查找Server
server, err := models.SharedServerDAO.FindEnabledServer(req.ServerId)
if err != nil {
return nil, err
}
if server == nil {
return &pb.UpdateServerConfigResponse{}, nil
}
// 修改
err = models.SharedServerDAO.UpdateServerConfig(req.ServerId, req.Config)
if err != nil {
return nil, err
}
// 更新新的节点版本
err = models.SharedNodeDAO.UpdateAllNodesLatestVersionMatch(int64(server.ClusterId))
if err != nil {
return nil, err
}
return &pb.UpdateServerConfigResponse{}, nil
}
// 计算服务数量
@@ -106,6 +141,9 @@ func (this *ServerService) ListEnabledServers(ctx context.Context, req *pb.ListE
}
result = append(result, &pb.Server{
Id: int64(server.Id),
Type: server.Type,
Name: server.Name,
Description: server.Description,
Config: []byte(server.Config),
IncludeNodes: []byte(server.IncludeNodes),
ExcludeNodes: []byte(server.ExcludeNodes),
@@ -174,6 +212,9 @@ func (this *ServerService) FindEnabledServer(ctx context.Context, req *pb.FindEn
return &pb.FindEnabledServerResponse{Server: &pb.Server{
Id: int64(server.Id),
Type: server.Type,
Name: server.Name,
Description: server.Description,
Config: []byte(server.Config),
IncludeNodes: []byte(server.IncludeNodes),
ExcludeNodes: []byte(server.ExcludeNodes),