mirror of
				https://github.com/TeaOSLab/EdgeAdmin.git
				synced 2025-11-04 21:50:28 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			97 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			97 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
package apinodeutils
 | 
						||
 | 
						||
import (
 | 
						||
	"github.com/iwind/TeaGo/Tea"
 | 
						||
	"github.com/iwind/TeaGo/files"
 | 
						||
	stringutil "github.com/iwind/TeaGo/utils/string"
 | 
						||
	"regexp"
 | 
						||
)
 | 
						||
 | 
						||
// DeployManager 节点部署文件管理器
 | 
						||
// 如果节点部署文件有变化,需要重启API节点以便于生效
 | 
						||
type DeployManager struct {
 | 
						||
	dir string
 | 
						||
}
 | 
						||
 | 
						||
// NewDeployManager 获取新节点部署文件管理器
 | 
						||
func NewDeployManager() *DeployManager {
 | 
						||
	var manager = &DeployManager{
 | 
						||
		dir: Tea.Root + "/edge-api/deploy",
 | 
						||
	}
 | 
						||
	manager.LoadNodeFiles()
 | 
						||
	manager.LoadNSNodeFiles()
 | 
						||
	return manager
 | 
						||
}
 | 
						||
 | 
						||
// LoadNodeFiles 加载所有边缘节点文件
 | 
						||
func (this *DeployManager) LoadNodeFiles() []*DeployFile {
 | 
						||
	var keyMap = map[string]*DeployFile{} // key => File
 | 
						||
 | 
						||
	var reg = regexp.MustCompile(`^edge-node-(\w+)-(\w+)-v([0-9.]+)\.zip$`)
 | 
						||
	for _, file := range files.NewFile(this.dir).List() {
 | 
						||
		var name = file.Name()
 | 
						||
		if !reg.MatchString(name) {
 | 
						||
			continue
 | 
						||
		}
 | 
						||
		var matches = reg.FindStringSubmatch(name)
 | 
						||
		var osName = matches[1]
 | 
						||
		var arch = matches[2]
 | 
						||
		var version = matches[3]
 | 
						||
 | 
						||
		var key = osName + "_" + arch
 | 
						||
		oldFile, ok := keyMap[key]
 | 
						||
		if ok && stringutil.VersionCompare(oldFile.Version, version) > 0 {
 | 
						||
			continue
 | 
						||
		}
 | 
						||
		keyMap[key] = &DeployFile{
 | 
						||
			OS:      osName,
 | 
						||
			Arch:    arch,
 | 
						||
			Version: version,
 | 
						||
			Path:    file.Path(),
 | 
						||
		}
 | 
						||
	}
 | 
						||
 | 
						||
	var result = []*DeployFile{}
 | 
						||
	for _, v := range keyMap {
 | 
						||
		result = append(result, v)
 | 
						||
	}
 | 
						||
 | 
						||
	return result
 | 
						||
}
 | 
						||
 | 
						||
// LoadNSNodeFiles 加载所有NS节点安装文件
 | 
						||
func (this *DeployManager) LoadNSNodeFiles() []*DeployFile {
 | 
						||
	var keyMap = map[string]*DeployFile{} // key => File
 | 
						||
 | 
						||
	var reg = regexp.MustCompile(`^edge-dns-(\w+)-(\w+)-v([0-9.]+)\.zip$`)
 | 
						||
	for _, file := range files.NewFile(this.dir).List() {
 | 
						||
		var name = file.Name()
 | 
						||
		if !reg.MatchString(name) {
 | 
						||
			continue
 | 
						||
		}
 | 
						||
		var matches = reg.FindStringSubmatch(name)
 | 
						||
		var osName = matches[1]
 | 
						||
		var arch = matches[2]
 | 
						||
		var version = matches[3]
 | 
						||
 | 
						||
		var key = osName + "_" + arch
 | 
						||
		oldFile, ok := keyMap[key]
 | 
						||
		if ok && stringutil.VersionCompare(oldFile.Version, version) > 0 {
 | 
						||
			continue
 | 
						||
		}
 | 
						||
		keyMap[key] = &DeployFile{
 | 
						||
			OS:      osName,
 | 
						||
			Arch:    arch,
 | 
						||
			Version: version,
 | 
						||
			Path:    file.Path(),
 | 
						||
		}
 | 
						||
	}
 | 
						||
 | 
						||
	var result = []*DeployFile{}
 | 
						||
	for _, v := range keyMap {
 | 
						||
		result = append(result, v)
 | 
						||
	}
 | 
						||
 | 
						||
	return result
 | 
						||
}
 |