forked from coop-cloud/abra
parent
48dd9cdeed
commit
37ab9a9c08
166
cli/app/list.go
166
cli/app/list.go
|
@ -42,6 +42,25 @@ var listAppServerFlag = &cli.StringFlag{
|
||||||
Destination: &listAppServer,
|
Destination: &listAppServer,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type appStatus struct {
|
||||||
|
server string
|
||||||
|
recipe string
|
||||||
|
appName string
|
||||||
|
domain string
|
||||||
|
status string
|
||||||
|
version string
|
||||||
|
upgrade string
|
||||||
|
}
|
||||||
|
|
||||||
|
type serverStatus struct {
|
||||||
|
apps []appStatus
|
||||||
|
appCount int
|
||||||
|
versionCount int
|
||||||
|
unversionedCount int
|
||||||
|
latestCount int
|
||||||
|
upgradeCount int
|
||||||
|
}
|
||||||
|
|
||||||
var appListCommand = &cli.Command{
|
var appListCommand = &cli.Command{
|
||||||
Name: "list",
|
Name: "list",
|
||||||
Usage: "List all managed apps",
|
Usage: "List all managed apps",
|
||||||
|
@ -69,51 +88,50 @@ can take some time.
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logrus.Fatal(err)
|
logrus.Fatal(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
sort.Sort(config.ByServerAndType(apps))
|
sort.Sort(config.ByServerAndType(apps))
|
||||||
|
|
||||||
alreadySeen := make(map[string]bool)
|
|
||||||
for _, app := range apps {
|
|
||||||
if _, ok := alreadySeen[app.Server]; !ok {
|
|
||||||
if err := ssh.EnsureHostKey(app.Server); err != nil {
|
|
||||||
logrus.Fatal(fmt.Sprintf(internal.SSHFailMsg, app.Server))
|
|
||||||
}
|
|
||||||
alreadySeen[app.Server] = true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
statuses := make(map[string]map[string]string)
|
statuses := make(map[string]map[string]string)
|
||||||
tableCol := []string{"Server", "Type", "App Name", "Domain"}
|
var catl catalogue.RecipeCatalogue
|
||||||
if status {
|
if status {
|
||||||
tableCol = append(tableCol, "Status", "Version", "Updates")
|
alreadySeen := make(map[string]bool)
|
||||||
|
for _, app := range apps {
|
||||||
|
if _, ok := alreadySeen[app.Server]; !ok {
|
||||||
|
if err := ssh.EnsureHostKey(app.Server); err != nil {
|
||||||
|
logrus.Fatal(fmt.Sprintf(internal.SSHFailMsg, app.Server))
|
||||||
|
}
|
||||||
|
alreadySeen[app.Server] = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
statuses, err = config.GetAppStatuses(appFiles)
|
statuses, err = config.GetAppStatuses(appFiles)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logrus.Fatal(err)
|
logrus.Fatal(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var err error
|
||||||
|
catl, err = catalogue.ReadRecipeCatalogue()
|
||||||
|
if err != nil {
|
||||||
|
logrus.Fatal(err)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
table := abraFormatter.CreateTable(tableCol)
|
var totalServersCount int
|
||||||
table.SetAutoMergeCellsByColumnIndex([]int{0})
|
var totalAppsCount int
|
||||||
|
allStats := make(map[string]serverStatus)
|
||||||
var (
|
|
||||||
versionedAppsCount int
|
|
||||||
unversionedAppsCount int
|
|
||||||
onLatestCount int
|
|
||||||
canUpgradeCount int
|
|
||||||
)
|
|
||||||
|
|
||||||
catl, err := catalogue.ReadRecipeCatalogue()
|
|
||||||
if err != nil {
|
|
||||||
logrus.Fatal(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
var appsCount int
|
|
||||||
for _, app := range apps {
|
for _, app := range apps {
|
||||||
var tableRow []string
|
var stats serverStatus
|
||||||
if app.Type == appType || appType == "" {
|
var ok bool
|
||||||
appsCount++
|
if stats, ok = allStats[app.Server]; !ok {
|
||||||
|
stats = serverStatus{}
|
||||||
|
totalServersCount++
|
||||||
|
}
|
||||||
|
|
||||||
|
if app.Type == appType || appType == "" {
|
||||||
|
appStats := appStatus{}
|
||||||
|
stats.appCount++
|
||||||
|
totalAppsCount++
|
||||||
|
|
||||||
// If type flag is set, check for it, if not, Type == ""
|
|
||||||
tableRow = []string{app.Server, app.Type, app.StackName(), app.Domain}
|
|
||||||
if status {
|
if status {
|
||||||
stackName := app.StackName()
|
stackName := app.StackName()
|
||||||
status := "unknown"
|
status := "unknown"
|
||||||
|
@ -125,16 +143,16 @@ can take some time.
|
||||||
if statusMeta["status"] != "" {
|
if statusMeta["status"] != "" {
|
||||||
status = statusMeta["status"]
|
status = statusMeta["status"]
|
||||||
}
|
}
|
||||||
tableRow = append(tableRow, status, version)
|
stats.versionCount++
|
||||||
versionedAppsCount++
|
|
||||||
} else {
|
} else {
|
||||||
tableRow = append(tableRow, status, version)
|
stats.unversionedCount++
|
||||||
unversionedAppsCount++
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
appStats.status = status
|
||||||
|
appStats.version = version
|
||||||
|
|
||||||
var newUpdates []string
|
var newUpdates []string
|
||||||
if version != "unknown" {
|
if version != "unknown" {
|
||||||
|
|
||||||
updates, err := catalogue.GetRecipeCatalogueVersions(app.Type, catl)
|
updates, err := catalogue.GetRecipeCatalogueVersions(app.Type, catl)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logrus.Fatal(err)
|
logrus.Fatal(err)
|
||||||
|
@ -159,40 +177,72 @@ can take some time.
|
||||||
|
|
||||||
if len(newUpdates) == 0 {
|
if len(newUpdates) == 0 {
|
||||||
if version == "unknown" {
|
if version == "unknown" {
|
||||||
tableRow = append(tableRow, "unknown")
|
appStats.upgrade = "unknown"
|
||||||
} else {
|
} else {
|
||||||
tableRow = append(tableRow, "on latest")
|
appStats.upgrade = "latest"
|
||||||
onLatestCount++
|
stats.latestCount++
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// FIXME: jeezus golang why do you not have a list reverse function
|
// FIXME: jeezus golang why do you not have a list reverse function
|
||||||
for i, j := 0, len(newUpdates)-1; i < j; i, j = i+1, j-1 {
|
for i, j := 0, len(newUpdates)-1; i < j; i, j = i+1, j-1 {
|
||||||
newUpdates[i], newUpdates[j] = newUpdates[j], newUpdates[i]
|
newUpdates[i], newUpdates[j] = newUpdates[j], newUpdates[i]
|
||||||
}
|
}
|
||||||
tableRow = append(tableRow, strings.Join(newUpdates, "\n"))
|
appStats.upgrade = strings.Join(newUpdates, "\n")
|
||||||
canUpgradeCount++
|
stats.upgradeCount++
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
appStats.server = app.Server
|
||||||
|
appStats.recipe = app.Type
|
||||||
|
appStats.appName = app.StackName()
|
||||||
|
appStats.domain = app.Domain
|
||||||
|
|
||||||
|
stats.apps = append(stats.apps, appStats)
|
||||||
}
|
}
|
||||||
table.Append(tableRow)
|
|
||||||
|
allStats[app.Server] = stats
|
||||||
}
|
}
|
||||||
|
|
||||||
var stats string
|
for serverName, serverStat := range allStats {
|
||||||
if status {
|
tableCol := []string{"recipe", "app name", "domain"}
|
||||||
stats = fmt.Sprintf(
|
if status {
|
||||||
"Total apps: %v | Versioned: %v | Unversioned: %v | On latest: %v | Can upgrade: %v",
|
tableCol = append(tableCol, []string{"status", "version", "upgrade"}...)
|
||||||
appsCount,
|
}
|
||||||
versionedAppsCount,
|
|
||||||
unversionedAppsCount,
|
table := abraFormatter.CreateTable(tableCol)
|
||||||
onLatestCount,
|
|
||||||
canUpgradeCount,
|
for _, appStat := range serverStat.apps {
|
||||||
)
|
tableRow := []string{appStat.recipe, appStat.appName, appStat.domain}
|
||||||
} else {
|
if status {
|
||||||
stats = fmt.Sprintf("Total apps: %v", appsCount)
|
tableRow = append(tableRow, []string{appStat.status, appStat.version, appStat.upgrade}...)
|
||||||
|
}
|
||||||
|
table.Append(tableRow)
|
||||||
|
}
|
||||||
|
|
||||||
|
table.Render()
|
||||||
|
|
||||||
|
if status {
|
||||||
|
fmt.Println(fmt.Sprintf(
|
||||||
|
"server: %s | total apps: %v | versioned: %v | unversioned: %v | latest: %v | upgrade: %v",
|
||||||
|
serverName,
|
||||||
|
serverStat.appCount,
|
||||||
|
serverStat.versionCount,
|
||||||
|
serverStat.unversionedCount,
|
||||||
|
serverStat.latestCount,
|
||||||
|
serverStat.upgradeCount,
|
||||||
|
))
|
||||||
|
} else {
|
||||||
|
fmt.Println(fmt.Sprintf("server: %s | total apps: %v", serverName, serverStat.appCount))
|
||||||
|
}
|
||||||
|
|
||||||
|
if len(allStats) > 1 {
|
||||||
|
fmt.Println() // newline separator for multiple servers
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
table.SetCaption(true, stats)
|
if len(allStats) > 1 {
|
||||||
table.Render()
|
fmt.Println(fmt.Sprintf("total servers: %v | total apps: %v ", totalServersCount, totalAppsCount))
|
||||||
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
},
|
},
|
||||||
|
|
Loading…
Reference in New Issue