github.com/franc20/ayesa_sap@v7.0.0-beta.28.0.20200124003224-302d4d52fa6c+incompatible/command/v7/apps_command.go (about)

     1  package v7
     2  
     3  import (
     4  	"strings"
     5  
     6  	"code.cloudfoundry.org/cli/actor/sharedaction"
     7  	"code.cloudfoundry.org/cli/actor/v7action"
     8  	"code.cloudfoundry.org/cli/command"
     9  	"code.cloudfoundry.org/cli/command/v7/shared"
    10  	"code.cloudfoundry.org/cli/util/ui"
    11  	"code.cloudfoundry.org/clock"
    12  )
    13  
    14  //go:generate counterfeiter . AppsActor
    15  
    16  type AppsActor interface {
    17  	GetAppSummariesForSpace(spaceGUID string, labels string) ([]v7action.ApplicationSummary, v7action.Warnings, error)
    18  }
    19  
    20  type AppsCommand struct {
    21  	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)'"`
    22  	relatedCommands interface{} `related_commands:"events, logs, map-route, push, scale, start, stop, restart"`
    23  
    24  	Labels      string `long:"labels" description:"Selector to filter apps by labels"`
    25  	UI          command.UI
    26  	Config      command.Config
    27  	Actor       AppsActor
    28  	SharedActor command.SharedActor
    29  }
    30  
    31  func (cmd *AppsCommand) Setup(config command.Config, ui command.UI) error {
    32  	cmd.UI = ui
    33  	cmd.Config = config
    34  	cmd.SharedActor = sharedaction.NewActor(config)
    35  
    36  	ccClient, _, err := shared.GetNewClientsAndConnectToCF(config, ui, "")
    37  	if err != nil {
    38  		return err
    39  	}
    40  	cmd.Actor = v7action.NewActor(ccClient, config, nil, nil, clock.NewClock())
    41  
    42  	return nil
    43  }
    44  
    45  func (cmd AppsCommand) Execute(args []string) error {
    46  	err := cmd.SharedActor.CheckTarget(true, true)
    47  	if err != nil {
    48  		return err
    49  	}
    50  
    51  	user, err := cmd.Config.CurrentUser()
    52  	if err != nil {
    53  		return err
    54  	}
    55  
    56  	cmd.UI.DisplayTextWithFlavor("Getting apps in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", map[string]interface{}{
    57  		"OrgName":   cmd.Config.TargetedOrganization().Name,
    58  		"SpaceName": cmd.Config.TargetedSpace().Name,
    59  		"Username":  user.Name,
    60  	})
    61  	cmd.UI.DisplayNewline()
    62  
    63  	summaries, warnings, err := cmd.Actor.GetAppSummariesForSpace(cmd.Config.TargetedSpace().GUID, cmd.Labels)
    64  	cmd.UI.DisplayWarnings(warnings)
    65  	if err != nil {
    66  		return err
    67  	}
    68  
    69  	if len(summaries) == 0 {
    70  		cmd.UI.DisplayText("No apps found")
    71  		return nil
    72  	}
    73  
    74  	table := [][]string{
    75  		{
    76  			cmd.UI.TranslateText("name"),
    77  			cmd.UI.TranslateText("requested state"),
    78  			cmd.UI.TranslateText("processes"),
    79  			cmd.UI.TranslateText("routes"),
    80  		},
    81  	}
    82  
    83  	for _, summary := range summaries {
    84  		table = append(table, []string{
    85  			summary.Name,
    86  			cmd.UI.TranslateText(strings.ToLower(string(summary.State))),
    87  			summary.ProcessSummaries.String(),
    88  			getURLs(summary.Routes),
    89  		})
    90  	}
    91  
    92  	cmd.UI.DisplayTableWithHeader("", table, ui.DefaultTableSpacePadding)
    93  
    94  	return nil
    95  }
    96  
    97  func getURLs(routes []v7action.Route) string {
    98  	var routeURLs []string
    99  	for _, route := range routes {
   100  		routeURLs = append(routeURLs, route.URL)
   101  	}
   102  
   103  	return strings.Join(routeURLs, ", ")
   104  }