mirror of
				https://github.com/TeaOSLab/EdgeAPI.git
				synced 2025-11-04 07:50:25 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			81 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			81 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
package models
 | 
						||
 | 
						||
import (
 | 
						||
	"encoding/json"
 | 
						||
	"github.com/TeaOSLab/EdgeCommon/pkg/nodeconfigs"
 | 
						||
	"time"
 | 
						||
)
 | 
						||
 | 
						||
// 安装状态
 | 
						||
func (this *Node) DecodeInstallStatus() (*NodeInstallStatus, error) {
 | 
						||
	if len(this.InstallStatus) == 0 || this.InstallStatus == "null" {
 | 
						||
		return NewNodeInstallStatus(), nil
 | 
						||
	}
 | 
						||
	status := &NodeInstallStatus{}
 | 
						||
	err := json.Unmarshal([]byte(this.InstallStatus), status)
 | 
						||
	if err != nil {
 | 
						||
		return NewNodeInstallStatus(), err
 | 
						||
	}
 | 
						||
 | 
						||
	// 如果N秒钟没有更新状态,则认为不在运行
 | 
						||
	if status.IsRunning && status.UpdatedAt < time.Now().Unix()-10 {
 | 
						||
		status.IsRunning = false
 | 
						||
		status.IsFinished = true
 | 
						||
		status.Error = "timeout"
 | 
						||
	}
 | 
						||
 | 
						||
	return status, nil
 | 
						||
}
 | 
						||
 | 
						||
// 节点状态
 | 
						||
func (this *Node) DecodeStatus() (*nodeconfigs.NodeStatus, error) {
 | 
						||
	if len(this.Status) == 0 || this.Status == "null" {
 | 
						||
		return nil, nil
 | 
						||
	}
 | 
						||
	status := &nodeconfigs.NodeStatus{}
 | 
						||
	err := json.Unmarshal([]byte(this.Status), status)
 | 
						||
	if err != nil {
 | 
						||
		return nil, err
 | 
						||
	}
 | 
						||
	return status, nil
 | 
						||
}
 | 
						||
 | 
						||
// 所有的DNS线路
 | 
						||
func (this *Node) DNSRouteCodes() (map[int64][]string, error) {
 | 
						||
	routes := map[int64][]string{} // domainId => routes
 | 
						||
	if len(this.DnsRoutes) == 0 || this.DnsRoutes == "null" {
 | 
						||
		return routes, nil
 | 
						||
	}
 | 
						||
	err := json.Unmarshal([]byte(this.DnsRoutes), &routes)
 | 
						||
	if err != nil {
 | 
						||
		return map[int64][]string{}, err
 | 
						||
	}
 | 
						||
	return routes, nil
 | 
						||
}
 | 
						||
 | 
						||
// DNS线路
 | 
						||
func (this *Node) DNSRouteCodesForDomainId(dnsDomainId int64) ([]string, error) {
 | 
						||
	routes := map[int64][]string{} // domainId => routes
 | 
						||
	if len(this.DnsRoutes) == 0 || this.DnsRoutes == "null" {
 | 
						||
		return nil, nil
 | 
						||
	}
 | 
						||
	err := json.Unmarshal([]byte(this.DnsRoutes), &routes)
 | 
						||
	if err != nil {
 | 
						||
		return nil, err
 | 
						||
	}
 | 
						||
	domainRoutes, _ := routes[dnsDomainId]
 | 
						||
	return domainRoutes, nil
 | 
						||
}
 | 
						||
 | 
						||
// 连接的API
 | 
						||
func (this *Node) DecodeConnectedAPINodeIds() ([]int64, error) {
 | 
						||
	apiNodeIds := []int64{}
 | 
						||
	if IsNotNull(this.ConnectedAPINodes) {
 | 
						||
		err := json.Unmarshal([]byte(this.ConnectedAPINodes), &apiNodeIds)
 | 
						||
		if err != nil {
 | 
						||
			return nil, err
 | 
						||
		}
 | 
						||
	}
 | 
						||
	return apiNodeIds, nil
 | 
						||
}
 |