github.com/dcarley/cf-cli@v6.24.1-0.20170220111324-4225ff346898+incompatible/command/v2/shared/application_info.go (about) 1 package shared 2 3 import ( 4 "fmt" 5 "strings" 6 7 "code.cloudfoundry.org/cli/actor/v2action" 8 "code.cloudfoundry.org/cli/command" 9 "github.com/cloudfoundry/bytefmt" 10 ) 11 12 // DisplayAppSummary displays the application summary to the UI, and optionally 13 // the command to start the app. 14 func DisplayAppSummary(ui command.UI, appSummary v2action.ApplicationSummary, displayStartCommand bool) { 15 instances := fmt.Sprintf("%d/%d", len(appSummary.RunningInstances), appSummary.Instances) 16 17 usage := ui.TranslateText( 18 "{{.MemorySize}} x {{.NumInstances}} instances", 19 map[string]interface{}{ 20 "MemorySize": bytefmt.ByteSize(uint64(appSummary.Memory) * bytefmt.MEGABYTE), 21 "NumInstances": appSummary.Instances, 22 }) 23 24 formattedRoutes := []string{} 25 for _, route := range appSummary.Routes { 26 formattedRoutes = append(formattedRoutes, route.String()) 27 } 28 routes := strings.Join(formattedRoutes, ", ") 29 30 table := [][]string{ 31 {ui.TranslateText("Name:"), appSummary.Name}, 32 {ui.TranslateText("Requested state:"), strings.ToLower(string(appSummary.State))}, 33 {ui.TranslateText("Instances:"), instances}, 34 {ui.TranslateText("Usage:"), usage}, 35 {ui.TranslateText("Routes:"), routes}, 36 {ui.TranslateText("Last uploaded:"), ui.UserFriendlyDate(appSummary.PackageUpdatedAt)}, 37 {ui.TranslateText("Stack:"), appSummary.Stack.Name}, 38 {ui.TranslateText("Buildpack:"), appSummary.Application.CalculatedBuildpack()}, 39 } 40 41 if displayStartCommand { 42 table = append(table, []string{ui.TranslateText("Start command:"), appSummary.Application.DetectedStartCommand}) 43 } 44 45 ui.DisplayTable("", table, 3) 46 ui.DisplayNewline() 47 48 if len(appSummary.RunningInstances) == 0 { 49 ui.DisplayText("There are no running instances of this app.") 50 } else { 51 displayAppInstances(ui, appSummary.RunningInstances) 52 } 53 } 54 55 func displayAppInstances(ui command.UI, instances []v2action.ApplicationInstanceWithStats) { 56 table := [][]string{ 57 {"", "State", "Since", "CPU", "Memory", "Disk", "Details"}, 58 } 59 60 for _, instance := range instances { 61 table = append( 62 table, 63 []string{ 64 fmt.Sprintf("#%d", instance.ID), 65 ui.TranslateText(strings.ToLower(string(instance.State))), 66 ui.UserFriendlyDate(instance.TimeSinceCreation()), 67 fmt.Sprintf("%.1f%%", instance.CPU*100), 68 fmt.Sprintf("%s of %s", bytefmt.ByteSize(uint64(instance.Memory)), bytefmt.ByteSize(uint64(instance.MemoryQuota))), 69 fmt.Sprintf("%s of %s", bytefmt.ByteSize(uint64(instance.Disk)), bytefmt.ByteSize(uint64(instance.DiskQuota))), 70 instance.Details, 71 }) 72 } 73 74 ui.DisplayTable("", table, 3) 75 }