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  }