69 lines
1.6 KiB
Go
69 lines
1.6 KiB
Go
package cluster
|
|
|
|
import (
|
|
"embed"
|
|
"encoding/json"
|
|
"strings"
|
|
)
|
|
|
|
//go:embed agent_versions.json
|
|
var agentVersionsFS embed.FS
|
|
|
|
type AgentVersionInfo struct {
|
|
Version string `json:"version"`
|
|
ReleasedAt string `json:"released_at,omitempty"`
|
|
Features []string `json:"features,omitempty"`
|
|
}
|
|
|
|
func loadAgentVersions() []AgentVersionInfo {
|
|
raw, err := agentVersionsFS.ReadFile("agent_versions.json")
|
|
if err != nil {
|
|
return nil
|
|
}
|
|
var items []AgentVersionInfo
|
|
if err := json.Unmarshal(raw, &items); err != nil {
|
|
return nil
|
|
}
|
|
out := make([]AgentVersionInfo, 0, len(items))
|
|
for _, it := range items {
|
|
it.Version = strings.TrimSpace(it.Version)
|
|
if it.Version == "" {
|
|
continue
|
|
}
|
|
out = append(out, it)
|
|
}
|
|
return out
|
|
}
|
|
|
|
func (s *Service) AgentVersions() []AgentVersionInfo {
|
|
return append([]AgentVersionInfo(nil), loadAgentVersions()...)
|
|
}
|
|
|
|
func (s *Service) AgentVersionFeatures(version string) []string {
|
|
v := strings.TrimSpace(version)
|
|
if v == "" {
|
|
return nil
|
|
}
|
|
for _, it := range loadAgentVersions() {
|
|
if strings.EqualFold(strings.TrimSpace(it.Version), v) {
|
|
return append([]string(nil), it.Features...)
|
|
}
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (s *Service) CompareAgentVersion(version string) (isLatest bool, latest string, known bool) {
|
|
items := loadAgentVersions()
|
|
if len(items) == 0 {
|
|
return true, "", false
|
|
}
|
|
latest = strings.TrimSpace(items[len(items)-1].Version)
|
|
v := strings.TrimSpace(version)
|
|
for _, it := range items {
|
|
if strings.EqualFold(strings.TrimSpace(it.Version), v) {
|
|
return strings.EqualFold(v, latest), latest, true
|
|
}
|
|
}
|
|
return false, latest, false
|
|
}
|