1.4.5.2
This commit is contained in:
368
EdgeAPI/internal/rpc/services/service_node_ext_plus.go
Normal file
368
EdgeAPI/internal/rpc/services/service_node_ext_plus.go
Normal file
@@ -0,0 +1,368 @@
|
||||
// Copyright 2023 Liuxiangchao iwind.liu@gmail.com. All rights reserved. Official site: https://goedge.cn .
|
||||
//go:build plus
|
||||
|
||||
package services
|
||||
|
||||
import (
|
||||
"context"
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"github.com/TeaOSLab/EdgeAPI/internal/db/models"
|
||||
"github.com/TeaOSLab/EdgeAPI/internal/utils/regexputils"
|
||||
"github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb"
|
||||
"github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs"
|
||||
)
|
||||
|
||||
// FindNodeUAMPolicies 查找节点的UAM策略
|
||||
func (this *NodeService) FindNodeUAMPolicies(ctx context.Context, req *pb.FindNodeUAMPoliciesRequest) (*pb.FindNodeUAMPoliciesResponse, error) {
|
||||
nodeId, err := this.ValidateNode(ctx)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
var tx = this.NullTx()
|
||||
clusterIds, err := models.SharedNodeDAO.FindEnabledAndOnNodeClusterIds(tx, nodeId)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
var pbPolicies = []*pb.FindNodeUAMPoliciesResponse_UAMPolicy{}
|
||||
for _, clusterId := range clusterIds {
|
||||
policy, err := models.SharedNodeClusterDAO.FindClusterUAMPolicy(tx, clusterId, nil)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if policy == nil {
|
||||
continue
|
||||
}
|
||||
policyJSON, err := json.Marshal(policy)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
pbPolicies = append(pbPolicies, &pb.FindNodeUAMPoliciesResponse_UAMPolicy{
|
||||
NodeClusterId: clusterId,
|
||||
UamPolicyJSON: policyJSON,
|
||||
})
|
||||
}
|
||||
return &pb.FindNodeUAMPoliciesResponse{
|
||||
UamPolicies: pbPolicies,
|
||||
}, nil
|
||||
}
|
||||
|
||||
// FindNodeHTTPCCPolicies 查找节点的HTTP CC策略
|
||||
func (this *NodeService) FindNodeHTTPCCPolicies(ctx context.Context, req *pb.FindNodeHTTPCCPoliciesRequest) (*pb.FindNodeHTTPCCPoliciesResponse, error) {
|
||||
nodeId, err := this.ValidateNode(ctx)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
var tx = this.NullTx()
|
||||
clusterIds, err := models.SharedNodeDAO.FindEnabledAndOnNodeClusterIds(tx, nodeId)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
var pbPolicies = []*pb.FindNodeHTTPCCPoliciesResponse_HTTPCCPolicy{}
|
||||
for _, clusterId := range clusterIds {
|
||||
policy, err := models.SharedNodeClusterDAO.FindClusterHTTPCCPolicy(tx, clusterId, nil)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if policy == nil {
|
||||
continue
|
||||
}
|
||||
|
||||
// 集成默认设置
|
||||
for i := 0; i < len(serverconfigs.DefaultHTTPCCThresholds); i++ {
|
||||
if i < len(policy.Thresholds) {
|
||||
policy.Thresholds[i].MergeIfEmpty(serverconfigs.DefaultHTTPCCThresholds[i])
|
||||
}
|
||||
}
|
||||
|
||||
policyJSON, err := json.Marshal(policy)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
pbPolicies = append(pbPolicies, &pb.FindNodeHTTPCCPoliciesResponse_HTTPCCPolicy{
|
||||
NodeClusterId: clusterId,
|
||||
HttpCCPolicyJSON: policyJSON,
|
||||
})
|
||||
}
|
||||
return &pb.FindNodeHTTPCCPoliciesResponse{
|
||||
HttpCCPolicies: pbPolicies,
|
||||
}, nil
|
||||
}
|
||||
|
||||
// FindNodeHTTP3Policies 查找节点的HTTP3策略
|
||||
func (this *NodeService) FindNodeHTTP3Policies(ctx context.Context, req *pb.FindNodeHTTP3PoliciesRequest) (*pb.FindNodeHTTP3PoliciesResponse, error) {
|
||||
nodeId, err := this.ValidateNode(ctx)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
var tx = this.NullTx()
|
||||
clusterIds, err := models.SharedNodeDAO.FindEnabledAndOnNodeClusterIds(tx, nodeId)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
var pbPolicies = []*pb.FindNodeHTTP3PoliciesResponse_HTTP3Policy{}
|
||||
for _, clusterId := range clusterIds {
|
||||
policy, err := models.SharedNodeClusterDAO.FindClusterHTTP3Policy(tx, clusterId, nil)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if policy == nil {
|
||||
continue
|
||||
}
|
||||
|
||||
policyJSON, err := json.Marshal(policy)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
pbPolicies = append(pbPolicies, &pb.FindNodeHTTP3PoliciesResponse_HTTP3Policy{
|
||||
NodeClusterId: clusterId,
|
||||
Http3PolicyJSON: policyJSON,
|
||||
})
|
||||
}
|
||||
return &pb.FindNodeHTTP3PoliciesResponse{
|
||||
Http3Policies: pbPolicies,
|
||||
}, nil
|
||||
}
|
||||
|
||||
// FindNodeHTTPPagesPolicies 查找节点的自定义页面策略
|
||||
func (this *NodeService) FindNodeHTTPPagesPolicies(ctx context.Context, req *pb.FindNodeHTTPPagesPoliciesRequest) (*pb.FindNodeHTTPPagesPoliciesResponse, error) {
|
||||
nodeId, err := this.ValidateNode(ctx)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
var tx = this.NullTx()
|
||||
clusterIds, err := models.SharedNodeDAO.FindEnabledAndOnNodeClusterIds(tx, nodeId)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
var pbPolicies = []*pb.FindNodeHTTPPagesPoliciesResponse_HTTPPagesPolicy{}
|
||||
for _, clusterId := range clusterIds {
|
||||
policy, err := models.SharedNodeClusterDAO.FindClusterHTTPPagesPolicy(tx, clusterId, nil)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if policy == nil {
|
||||
continue
|
||||
}
|
||||
policyJSON, err := json.Marshal(policy)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
pbPolicies = append(pbPolicies, &pb.FindNodeHTTPPagesPoliciesResponse_HTTPPagesPolicy{
|
||||
NodeClusterId: clusterId,
|
||||
HttpPagesPolicyJSON: policyJSON,
|
||||
})
|
||||
}
|
||||
return &pb.FindNodeHTTPPagesPoliciesResponse{
|
||||
HttpPagesPolicies: pbPolicies,
|
||||
}, nil
|
||||
}
|
||||
|
||||
// FindNodeScheduleInfo 查找节点调度信息
|
||||
func (this *NodeService) FindNodeScheduleInfo(ctx context.Context, req *pb.FindNodeScheduleInfoRequest) (*pb.FindNodeScheduleInfoResponse, error) {
|
||||
_, err := this.ValidateAdmin(ctx)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
var tx = this.NullTx()
|
||||
node, err := models.SharedNodeDAO.FindNodeSchedule(tx, req.NodeId)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if node == nil {
|
||||
return &pb.FindNodeScheduleInfoResponse{
|
||||
ScheduleInfo: nil,
|
||||
}, nil
|
||||
}
|
||||
|
||||
return &pb.FindNodeScheduleInfoResponse{
|
||||
ScheduleInfo: &pb.FindNodeScheduleInfoResponse_ScheduleInfo{
|
||||
OfflineDay: node.OfflineDay,
|
||||
IsBackupForCluster: node.IsBackupForCluster,
|
||||
IsBackupForGroup: node.IsBackupForGroup,
|
||||
BackupIPs: node.DecodeBackupIPs(),
|
||||
ActionStatusJSON: node.ActionStatus,
|
||||
},
|
||||
}, nil
|
||||
}
|
||||
|
||||
// UpdateNodeScheduleInfo 修改节点调度信息
|
||||
func (this *NodeService) UpdateNodeScheduleInfo(ctx context.Context, req *pb.UpdateNodeScheduleInfoRequest) (*pb.RPCSuccess, error) {
|
||||
_, err := this.ValidateAdmin(ctx)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// 下线日期
|
||||
if len(req.OfflineDay) > 0 && !regexputils.YYYYMMDD.MatchString(req.OfflineDay) {
|
||||
return nil, errors.New("invalid 'offlineDay': " + req.OfflineDay)
|
||||
}
|
||||
|
||||
var tx = this.NullTx()
|
||||
err = models.SharedNodeDAO.UpdateNodeSchedule(tx, req.NodeId, req.OfflineDay, req.IsBackupForCluster, req.IsBackupForGroup, req.BackupIPs)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return this.Success()
|
||||
}
|
||||
|
||||
// ResetNodeActionStatus 重置节点动作状态
|
||||
func (this *NodeService) ResetNodeActionStatus(ctx context.Context, req *pb.ResetNodeActionStatusRequest) (*pb.RPCSuccess, error) {
|
||||
_, err := this.ValidateAdmin(ctx)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
var tx = this.NullTx()
|
||||
err = models.SharedNodeDAO.ResetNodeActionStatus(tx, req.NodeId, false)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return this.Success()
|
||||
}
|
||||
|
||||
// FindAllNodeScheduleInfoWithNodeClusterId 查找集群的节点调度信息
|
||||
func (this *NodeService) FindAllNodeScheduleInfoWithNodeClusterId(ctx context.Context, req *pb.FindAllNodeScheduleInfoWithNodeClusterIdRequest) (*pb.FindAllNodeScheduleInfoWithNodeClusterIdResponse, error) {
|
||||
_, err := this.ValidateAdmin(ctx)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
var tx = this.NullTx()
|
||||
nodes, err := models.SharedNodeDAO.FindAllNodeScheduleWithClusterId(tx, req.NodeClusterId)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
var pbScheduleList = []*pb.FindAllNodeScheduleInfoWithNodeClusterIdResponse_ScheduleInfo{}
|
||||
for _, node := range nodes {
|
||||
// 分组
|
||||
var groupName = ""
|
||||
if node.GroupId > 0 {
|
||||
groupName, err = models.SharedNodeGroupDAO.FindNodeGroupName(tx, int64(node.GroupId))
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
|
||||
pbScheduleList = append(pbScheduleList, &pb.FindAllNodeScheduleInfoWithNodeClusterIdResponse_ScheduleInfo{
|
||||
NodeId: int64(node.Id),
|
||||
NodeName: node.Name,
|
||||
NodeGroupId: int64(node.GroupId),
|
||||
NodeGroupName: groupName,
|
||||
OfflineDay: node.OfflineDay,
|
||||
IsBackupForCluster: node.IsBackupForCluster,
|
||||
IsBackupForGroup: node.IsBackupForGroup,
|
||||
BackupIPs: node.DecodeBackupIPs(),
|
||||
ActionStatusJSON: node.ActionStatus,
|
||||
})
|
||||
}
|
||||
|
||||
return &pb.FindAllNodeScheduleInfoWithNodeClusterIdResponse{
|
||||
Nodes: pbScheduleList,
|
||||
}, nil
|
||||
}
|
||||
|
||||
// CopyNodeActionsToNodeGroup 复制动作设置到分组
|
||||
func (this *NodeService) CopyNodeActionsToNodeGroup(ctx context.Context, req *pb.CopyNodeActionsToNodeGroupRequest) (*pb.RPCSuccess, error) {
|
||||
_, err := this.ValidateAdmin(ctx)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
var tx = this.NullTx()
|
||||
err = models.SharedNodeDAO.CopyNodeActionsToGroup(tx, req.NodeId)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return this.Success()
|
||||
}
|
||||
|
||||
// CopyNodeActionsToNodeCluster 复制动作设置到集群
|
||||
func (this *NodeService) CopyNodeActionsToNodeCluster(ctx context.Context, req *pb.CopyNodeActionsToNodeClusterRequest) (*pb.RPCSuccess, error) {
|
||||
_, err := this.ValidateAdmin(ctx)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
var tx = this.NullTx()
|
||||
err = models.SharedNodeDAO.CopyNodeActionsToCluster(tx, req.NodeId)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return this.Success()
|
||||
}
|
||||
|
||||
// FindNodeTOAConfig 查找节点的TOA配置
|
||||
func (this *NodeService) FindNodeTOAConfig(ctx context.Context, req *pb.FindNodeTOAConfigRequest) (*pb.FindNodeTOAConfigResponse, error) {
|
||||
nodeId, err := this.ValidateNode(ctx)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
var tx = this.NullTx()
|
||||
clusterId, err := models.SharedNodeDAO.FindNodeClusterId(tx, nodeId)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if clusterId == 0 {
|
||||
return &pb.FindNodeTOAConfigResponse{ToaJSON: nil}, nil
|
||||
}
|
||||
|
||||
toaConfig, err := models.SharedNodeClusterDAO.FindClusterTOAConfig(tx, clusterId, nil)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if toaConfig == nil {
|
||||
return &pb.FindNodeTOAConfigResponse{ToaJSON: nil}, nil
|
||||
}
|
||||
|
||||
toaJSON, err := json.Marshal(toaConfig)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return &pb.FindNodeTOAConfigResponse{ToaJSON: toaJSON}, nil
|
||||
}
|
||||
|
||||
// FindNodeNetworkSecurityPolicy 查找节点的网络安全策略
|
||||
func (this *NodeService) FindNodeNetworkSecurityPolicy(ctx context.Context, req *pb.FindNodeNetworkSecurityPolicyRequest) (*pb.FindNodeNetworkSecurityPolicyResponse, error) {
|
||||
nodeId, err := this.ValidateNode(ctx)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
var tx = this.NullTx()
|
||||
clusterId, err := models.SharedNodeDAO.FindNodeClusterId(tx, nodeId)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if clusterId == 0 {
|
||||
return &pb.FindNodeNetworkSecurityPolicyResponse{NetworkSecurityPolicyJSON: nil}, nil
|
||||
}
|
||||
|
||||
policy, err := models.SharedNodeClusterDAO.FindClusterNetworkSecurityPolicy(tx, clusterId, nil)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
policyJSON, err := json.Marshal(policy)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return &pb.FindNodeNetworkSecurityPolicyResponse{
|
||||
NetworkSecurityPolicyJSON: policyJSON,
|
||||
}, nil
|
||||
}
|
||||
Reference in New Issue
Block a user