package console import ( "net/http" "sort" ) type deploymentTarget struct { Channel string Target string TargetErr string HasHistory bool Total int Unknown int Versions []deploymentObservedVersion } type deploymentObservedVersion struct { Version string Count int } type deploymentsCopyStrings struct{ Title, History, NoTarget, Instances, Target, Observed, NoChannels string } var deploymentsCopy = deploymentsCopyStrings{ Title: "Deployments", History: "Release history", NoTarget: "No target published", Instances: "View instances", Target: "Target version", Observed: "Observed versions", NoChannels: "Open Release history for the commands to publish your first version.", } func (p page) DeploymentsCopy() deploymentsCopyStrings { return deploymentsCopy } func assembleDeploymentTargets(view *AppView, account string) []deploymentTarget { groups := map[string]*deploymentTarget{} for _, ch := range view.Channels { groups[ch.Name] = &deploymentTarget{Channel: ch.Name, Target: ch.Version, TargetErr: ch.Err, HasHistory: ch.HasHistory} } versions := map[string]map[string]int{} for _, rt := range view.Routes { if rt.Account != account || rt.Platform { continue } ch := rt.Channel if ch == "" { ch = "stable" } if groups[ch] == nil { groups[ch] = &deploymentTarget{Channel: ch} } group := groups[ch] group.Total++ if (rt.Kind != "" && rt.Kind != "instance") || rt.Version == "" { group.Unknown++ continue } if versions[ch] == nil { versions[ch] = map[string]int{} } versions[ch][rt.Version]++ } var names []string for name := range groups { names = append(names, name) } sort.Strings(names) out := make([]deploymentTarget, 0, len(names)) for _, name := range names { group := groups[name] var vs []string for v := range versions[name] { vs = append(vs, v) } sort.Strings(vs) for _, v := range vs { group.Versions = append(group.Versions, deploymentObservedVersion{Version: v, Count: versions[name][v]}) } out = append(out, *group) } return out } func releaseBackTab(r *http.Request) string { switch r.FormValue("back") { case "releases": return "releases" case "deployments": return "deployments" } return "" }