metis/pkg/facts/targets.go

44 lines
974 B
Go
Raw Normal View History

package facts
// Targets proposes normalized targets from a ClassSummary by picking the most common version.
type Targets struct {
Kernel string
OSImage string
Containerd string
K3sVersion string
Packages map[string]string
}
// ChooseTargets picks the highest-count entry for each field. Ties are left empty.
func ChooseTargets(sum *ClassSummary) Targets {
t := Targets{Packages: map[string]string{}}
if sum == nil {
return t
}
t.Kernel = topKey(sum.Kernels)
t.OSImage = topKey(sum.OSImages)
t.Containerd = topKey(sum.Containerd)
t.K3sVersion = topKey(sum.K3sVersions)
for pkg, versions := range sum.PackageStats {
if v := topKey(versions); v != "" {
t.Packages[pkg] = v
}
}
return t
}
func topKey(m map[string]int) string {
best := ""
bestCount := 0
for k, c := range m {
if c > bestCount {
best = k
bestCount = c
} else if c == bestCount {
// tie: prefer empty to avoid arbitrary pick
best = ""
}
}
return best
}