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 }