github.com/sleungcy/cli@v7.1.0+incompatible/command/v7/apps_command.go (about)

     1  package v7
     2  
     3  import (
     4  	"strings"
     5  
     6  	"code.cloudfoundry.org/cli/resources"
     7  	"code.cloudfoundry.org/cli/util/ui"
     8  )
     9  
    10  type AppsCommand struct {
    11  	BaseCommand
    12  
    13  	usage           interface{} `usage:"CF_NAME apps [--labels SELECTOR]\n\nEXAMPLES:\n   CF_NAME apps\n   CF_NAME apps --labels 'environment in (production,staging),tier in (backend)'\n   CF_NAME apps --labels 'env=dev,!chargeback-code,tier in (backend,worker)'"`
    14  	relatedCommands interface{} `related_commands:"events, logs, map-route, push, scale, start, stop, restart"`
    15  
    16  	Labels string `long:"labels" description:"Selector to filter apps by labels"`
    17  }
    18  
    19  func (cmd AppsCommand) Execute(args []string) error {
    20  	err := cmd.SharedActor.CheckTarget(true, true)
    21  	if err != nil {
    22  		return err
    23  	}
    24  
    25  	user, err := cmd.Config.CurrentUser()
    26  	if err != nil {
    27  		return err
    28  	}
    29  
    30  	cmd.UI.DisplayTextWithFlavor("Getting apps in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", map[string]interface{}{
    31  		"OrgName":   cmd.Config.TargetedOrganization().Name,
    32  		"SpaceName": cmd.Config.TargetedSpace().Name,
    33  		"Username":  user.Name,
    34  	})
    35  	cmd.UI.DisplayNewline()
    36  
    37  	summaries, warnings, err := cmd.Actor.GetAppSummariesForSpace(cmd.Config.TargetedSpace().GUID, cmd.Labels)
    38  	cmd.UI.DisplayWarnings(warnings)
    39  	if err != nil {
    40  		return err
    41  	}
    42  
    43  	if len(summaries) == 0 {
    44  		cmd.UI.DisplayText("No apps found")
    45  		return nil
    46  	}
    47  
    48  	table := [][]string{
    49  		{
    50  			cmd.UI.TranslateText("name"),
    51  			cmd.UI.TranslateText("requested state"),
    52  			cmd.UI.TranslateText("processes"),
    53  			cmd.UI.TranslateText("routes"),
    54  		},
    55  	}
    56  
    57  	for _, summary := range summaries {
    58  		table = append(table, []string{
    59  			summary.Name,
    60  			cmd.UI.TranslateText(strings.ToLower(string(summary.State))),
    61  			summary.ProcessSummaries.String(),
    62  			getURLs(summary.Routes),
    63  		})
    64  	}
    65  
    66  	cmd.UI.DisplayTableWithHeader("", table, ui.DefaultTableSpacePadding)
    67  
    68  	return nil
    69  }
    70  
    71  func getURLs(routes []resources.Route) string {
    72  	var routeURLs []string
    73  	for _, route := range routes {
    74  		routeURLs = append(routeURLs, route.URL)
    75  	}
    76  
    77  	return strings.Join(routeURLs, ", ")
    78  }