mirror of
				https://github.com/TeaOSLab/EdgeAdmin.git
				synced 2025-11-04 05:00:25 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			210 lines
		
	
	
		
			6.6 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			210 lines
		
	
	
		
			6.6 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
package ipaddressutils
 | 
						|
 | 
						|
import (
 | 
						|
	"encoding/json"
 | 
						|
	"github.com/TeaOSLab/EdgeAdmin/internal/utils"
 | 
						|
	"github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils"
 | 
						|
	"github.com/TeaOSLab/EdgeCommon/pkg/nodeconfigs"
 | 
						|
	"github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb"
 | 
						|
	"github.com/iwind/TeaGo/maps"
 | 
						|
)
 | 
						|
 | 
						|
// UpdateNodeIPAddresses 保存一组IP地址
 | 
						|
func UpdateNodeIPAddresses(parentAction *actionutils.ParentAction, nodeId int64, role nodeconfigs.NodeRole, ipAddressesJSON []byte) error {
 | 
						|
	var addresses = []maps.Map{}
 | 
						|
	err := json.Unmarshal(ipAddressesJSON, &addresses)
 | 
						|
	if err != nil {
 | 
						|
		return err
 | 
						|
	}
 | 
						|
	for _, addr := range addresses {
 | 
						|
		var resultAddrIds = []int64{}
 | 
						|
		var addrId = addr.GetInt64("id")
 | 
						|
 | 
						|
		// 专属集群
 | 
						|
		var addrClusterIds = []int64{}
 | 
						|
		var addrClusters = addr.GetSlice("clusters")
 | 
						|
		if len(addrClusters) > 0 {
 | 
						|
			for _, addrCluster := range addrClusters {
 | 
						|
				var m = maps.NewMap(addrCluster)
 | 
						|
				var clusterId = m.GetInt64("id")
 | 
						|
				if clusterId > 0 {
 | 
						|
					addrClusterIds = append(addrClusterIds, clusterId)
 | 
						|
				}
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
		if addrId > 0 {
 | 
						|
			resultAddrIds = append(resultAddrIds, addrId)
 | 
						|
 | 
						|
			var isOn = false
 | 
						|
			if !addr.Has("isOn") { // 兼容老版本
 | 
						|
				isOn = true
 | 
						|
			} else {
 | 
						|
				isOn = addr.GetBool("isOn")
 | 
						|
			}
 | 
						|
 | 
						|
			_, err = parentAction.RPC().NodeIPAddressRPC().UpdateNodeIPAddress(parentAction.AdminContext(), &pb.UpdateNodeIPAddressRequest{
 | 
						|
				NodeIPAddressId: addrId,
 | 
						|
				Ip:              addr.GetString("ip"),
 | 
						|
				Name:            addr.GetString("name"),
 | 
						|
				CanAccess:       addr.GetBool("canAccess"),
 | 
						|
				IsOn:            isOn,
 | 
						|
				IsUp:            addr.GetBool("isUp"),
 | 
						|
				ClusterIds:      addrClusterIds,
 | 
						|
			})
 | 
						|
			if err != nil {
 | 
						|
				return err
 | 
						|
			}
 | 
						|
		} else {
 | 
						|
			var ipStrings = addr.GetString("ip")
 | 
						|
			result, _ := utils.ExtractIP(ipStrings)
 | 
						|
 | 
						|
			if len(result) == 1 {
 | 
						|
				// 单个创建
 | 
						|
				createResp, err := parentAction.RPC().NodeIPAddressRPC().CreateNodeIPAddress(parentAction.AdminContext(), &pb.CreateNodeIPAddressRequest{
 | 
						|
					NodeId:         nodeId,
 | 
						|
					Role:           role,
 | 
						|
					Name:           addr.GetString("name"),
 | 
						|
					Ip:             result[0],
 | 
						|
					CanAccess:      addr.GetBool("canAccess"),
 | 
						|
					IsUp:           addr.GetBool("isUp"),
 | 
						|
					NodeClusterIds: addrClusterIds,
 | 
						|
				})
 | 
						|
				if err != nil {
 | 
						|
					return err
 | 
						|
				}
 | 
						|
				addrId = createResp.NodeIPAddressId
 | 
						|
				resultAddrIds = append(resultAddrIds, addrId)
 | 
						|
			} else if len(result) > 1 {
 | 
						|
				// 批量创建
 | 
						|
				createResp, err := parentAction.RPC().NodeIPAddressRPC().CreateNodeIPAddresses(parentAction.AdminContext(), &pb.CreateNodeIPAddressesRequest{
 | 
						|
					NodeId:         nodeId,
 | 
						|
					Role:           role,
 | 
						|
					Name:           addr.GetString("name"),
 | 
						|
					IpList:         result,
 | 
						|
					CanAccess:      addr.GetBool("canAccess"),
 | 
						|
					IsUp:           addr.GetBool("isUp"),
 | 
						|
					GroupValue:     ipStrings,
 | 
						|
					NodeClusterIds: addrClusterIds,
 | 
						|
				})
 | 
						|
				if err != nil {
 | 
						|
					return err
 | 
						|
				}
 | 
						|
				resultAddrIds = append(resultAddrIds, createResp.NodeIPAddressIds...)
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
		// 保存阈值
 | 
						|
		var thresholds = addr.GetSlice("thresholds")
 | 
						|
		if len(thresholds) > 0 {
 | 
						|
			thresholdsJSON, err := json.Marshal(thresholds)
 | 
						|
			if err != nil {
 | 
						|
				return err
 | 
						|
			}
 | 
						|
 | 
						|
			for _, addrId := range resultAddrIds {
 | 
						|
				_, err = parentAction.RPC().NodeIPAddressThresholdRPC().UpdateAllNodeIPAddressThresholds(parentAction.AdminContext(), &pb.UpdateAllNodeIPAddressThresholdsRequest{
 | 
						|
					NodeIPAddressId:             addrId,
 | 
						|
					NodeIPAddressThresholdsJSON: thresholdsJSON,
 | 
						|
				})
 | 
						|
				if err != nil {
 | 
						|
					return err
 | 
						|
				}
 | 
						|
			}
 | 
						|
		} else {
 | 
						|
			for _, addrId := range resultAddrIds {
 | 
						|
				_, err = parentAction.RPC().NodeIPAddressThresholdRPC().UpdateAllNodeIPAddressThresholds(parentAction.AdminContext(), &pb.UpdateAllNodeIPAddressThresholdsRequest{
 | 
						|
					NodeIPAddressId:             addrId,
 | 
						|
					NodeIPAddressThresholdsJSON: []byte("[]"),
 | 
						|
				})
 | 
						|
				if err != nil {
 | 
						|
					return err
 | 
						|
				}
 | 
						|
			}
 | 
						|
		}
 | 
						|
	}
 | 
						|
	return nil
 | 
						|
}
 | 
						|
 | 
						|
// InitNodeIPAddressThresholds 初始化IP阈值
 | 
						|
func InitNodeIPAddressThresholds(parentAction *actionutils.ParentAction, addrId int64) ([]*nodeconfigs.IPAddressThresholdConfig, error) {
 | 
						|
	thresholdsResp, err := parentAction.RPC().NodeIPAddressThresholdRPC().FindAllEnabledNodeIPAddressThresholds(parentAction.AdminContext(), &pb.FindAllEnabledNodeIPAddressThresholdsRequest{NodeIPAddressId: addrId})
 | 
						|
	if err != nil {
 | 
						|
		return nil, err
 | 
						|
	}
 | 
						|
	var thresholds = []*nodeconfigs.IPAddressThresholdConfig{}
 | 
						|
	if len(thresholdsResp.NodeIPAddressThresholds) > 0 {
 | 
						|
		for _, pbThreshold := range thresholdsResp.NodeIPAddressThresholds {
 | 
						|
			var threshold = &nodeconfigs.IPAddressThresholdConfig{
 | 
						|
				Id:      pbThreshold.Id,
 | 
						|
				Items:   []*nodeconfigs.IPAddressThresholdItemConfig{},
 | 
						|
				Actions: []*nodeconfigs.IPAddressThresholdActionConfig{},
 | 
						|
			}
 | 
						|
			if len(pbThreshold.ItemsJSON) > 0 {
 | 
						|
				err = json.Unmarshal(pbThreshold.ItemsJSON, &threshold.Items)
 | 
						|
				if err != nil {
 | 
						|
					return nil, err
 | 
						|
				}
 | 
						|
			}
 | 
						|
			if len(pbThreshold.ActionsJSON) > 0 {
 | 
						|
				err = json.Unmarshal(pbThreshold.ActionsJSON, &threshold.Actions)
 | 
						|
				if err != nil {
 | 
						|
					return nil, err
 | 
						|
				}
 | 
						|
			}
 | 
						|
			thresholds = append(thresholds, threshold)
 | 
						|
		}
 | 
						|
	}
 | 
						|
	return thresholds, nil
 | 
						|
}
 | 
						|
 | 
						|
// FindNodeClusterMapsWithNodeId 根据节点读取集群信息
 | 
						|
func FindNodeClusterMapsWithNodeId(parentAction *actionutils.ParentAction, nodeId int64) ([]maps.Map, error) {
 | 
						|
	var clusterMaps = []maps.Map{}
 | 
						|
	if nodeId > 0 { // CDN边缘节点
 | 
						|
		nodeResp, err := parentAction.RPC().NodeRPC().FindEnabledNode(parentAction.AdminContext(), &pb.FindEnabledNodeRequest{NodeId: nodeId})
 | 
						|
		if err != nil {
 | 
						|
			return nil, err
 | 
						|
		}
 | 
						|
		var node = nodeResp.Node
 | 
						|
		if node != nil {
 | 
						|
			var clusters = []*pb.NodeCluster{}
 | 
						|
			if node.NodeCluster != nil {
 | 
						|
				clusters = append(clusters, nodeResp.Node.NodeCluster)
 | 
						|
			}
 | 
						|
			if len(node.SecondaryNodeClusters) > 0 {
 | 
						|
				clusters = append(clusters, node.SecondaryNodeClusters...)
 | 
						|
			}
 | 
						|
			for _, cluster := range clusters {
 | 
						|
				clusterMaps = append(clusterMaps, maps.Map{
 | 
						|
					"id":        cluster.Id,
 | 
						|
					"name":      cluster.Name,
 | 
						|
					"isChecked": false,
 | 
						|
				})
 | 
						|
			}
 | 
						|
		}
 | 
						|
	}
 | 
						|
	return clusterMaps, nil
 | 
						|
}
 | 
						|
 | 
						|
// FindNodeClusterMaps 根据一组集群ID读取集群信息
 | 
						|
func FindNodeClusterMaps(parentAction *actionutils.ParentAction, clusterIds []int64) ([]maps.Map, error) {
 | 
						|
	var clusterMaps = []maps.Map{}
 | 
						|
	if len(clusterIds) > 0 {
 | 
						|
		for _, clusterId := range clusterIds {
 | 
						|
			clusterResp, err := parentAction.RPC().NodeClusterRPC().FindEnabledNodeCluster(parentAction.AdminContext(), &pb.FindEnabledNodeClusterRequest{NodeClusterId: clusterId})
 | 
						|
			if err != nil {
 | 
						|
				return nil, err
 | 
						|
			}
 | 
						|
			var cluster = clusterResp.NodeCluster
 | 
						|
			if cluster != nil {
 | 
						|
				clusterMaps = append(clusterMaps, maps.Map{
 | 
						|
					"id":   cluster.Id,
 | 
						|
					"name": cluster.Name,
 | 
						|
				})
 | 
						|
			}
 | 
						|
		}
 | 
						|
	}
 | 
						|
	return clusterMaps, nil
 | 
						|
}
 |