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 }