github.com/rakutentech/cli@v6.12.5-0.20151006231303-24468b65536e+incompatible/cf/commands/application/apps.go (about) 1 package application 2 3 import ( 4 "strings" 5 6 "github.com/cloudfoundry/cli/cf/command_registry" 7 . "github.com/cloudfoundry/cli/cf/i18n" 8 "github.com/cloudfoundry/cli/cf/models" 9 "github.com/cloudfoundry/cli/flags" 10 "github.com/cloudfoundry/cli/plugin/models" 11 12 "github.com/cloudfoundry/cli/cf/api" 13 "github.com/cloudfoundry/cli/cf/configuration/core_config" 14 "github.com/cloudfoundry/cli/cf/formatters" 15 "github.com/cloudfoundry/cli/cf/requirements" 16 "github.com/cloudfoundry/cli/cf/terminal" 17 "github.com/cloudfoundry/cli/cf/ui_helpers" 18 ) 19 20 type ListApps struct { 21 ui terminal.UI 22 config core_config.Reader 23 appSummaryRepo api.AppSummaryRepository 24 25 pluginAppModels *[]plugin_models.GetAppsModel 26 pluginCall bool 27 } 28 29 func init() { 30 command_registry.Register(&ListApps{}) 31 } 32 33 func (cmd *ListApps) MetaData() command_registry.CommandMetadata { 34 return command_registry.CommandMetadata{ 35 Name: "apps", 36 ShortName: "a", 37 Description: T("List all apps in the target space"), 38 Usage: "CF_NAME apps", 39 } 40 } 41 42 func (cmd *ListApps) Requirements(requirementsFactory requirements.Factory, fc flags.FlagContext) (reqs []requirements.Requirement, err error) { 43 if len(fc.Args()) != 0 { 44 cmd.ui.Failed(T("Incorrect Usage. No argument required\n\n") + command_registry.Commands.CommandUsage("apps")) 45 } 46 47 reqs = []requirements.Requirement{ 48 requirementsFactory.NewLoginRequirement(), 49 requirementsFactory.NewTargetedSpaceRequirement(), 50 } 51 return 52 } 53 54 func (cmd *ListApps) SetDependency(deps command_registry.Dependency, pluginCall bool) command_registry.Command { 55 cmd.ui = deps.Ui 56 cmd.config = deps.Config 57 cmd.appSummaryRepo = deps.RepoLocator.GetAppSummaryRepository() 58 cmd.pluginAppModels = deps.PluginModels.AppsSummary 59 cmd.pluginCall = pluginCall 60 return cmd 61 } 62 63 func (cmd *ListApps) Execute(c flags.FlagContext) { 64 cmd.ui.Say(T("Getting apps in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", 65 map[string]interface{}{ 66 "OrgName": terminal.EntityNameColor(cmd.config.OrganizationFields().Name), 67 "SpaceName": terminal.EntityNameColor(cmd.config.SpaceFields().Name), 68 "Username": terminal.EntityNameColor(cmd.config.Username())})) 69 70 apps, apiErr := cmd.appSummaryRepo.GetSummariesInCurrentSpace() 71 72 if apiErr != nil { 73 cmd.ui.Failed(apiErr.Error()) 74 return 75 } 76 77 cmd.ui.Ok() 78 cmd.ui.Say("") 79 80 if len(apps) == 0 { 81 cmd.ui.Say(T("No apps found")) 82 return 83 } 84 85 table := terminal.NewTable(cmd.ui, []string{T("name"), T("requested state"), T("instances"), T("memory"), T("disk"), T("urls")}) 86 87 for _, application := range apps { 88 var urls []string 89 for _, route := range application.Routes { 90 urls = append(urls, route.URL()) 91 } 92 93 table.Add( 94 application.Name, 95 ui_helpers.ColoredAppState(application.ApplicationFields), 96 ui_helpers.ColoredAppInstances(application.ApplicationFields), 97 formatters.ByteSize(application.Memory*formatters.MEGABYTE), 98 formatters.ByteSize(application.DiskQuota*formatters.MEGABYTE), 99 strings.Join(urls, ", "), 100 ) 101 } 102 103 table.Print() 104 105 if cmd.pluginCall { 106 cmd.populatePluginModel(apps) 107 } 108 } 109 110 func (cmd *ListApps) populatePluginModel(apps []models.Application) { 111 for _, app := range apps { 112 appModel := plugin_models.GetAppsModel{} 113 appModel.Name = app.Name 114 appModel.Guid = app.Guid 115 appModel.TotalInstances = app.InstanceCount 116 appModel.RunningInstances = app.RunningInstances 117 appModel.Memory = app.Memory 118 appModel.State = app.State 119 appModel.DiskQuota = app.DiskQuota 120 121 *(cmd.pluginAppModels) = append(*(cmd.pluginAppModels), appModel) 122 123 for _, route := range app.Routes { 124 r := plugin_models.GetAppsRouteSummary{} 125 r.Host = route.Host 126 r.Guid = route.Guid 127 r.Domain.Guid = route.Domain.Guid 128 r.Domain.Name = route.Domain.Name 129 r.Domain.OwningOrganizationGuid = route.Domain.OwningOrganizationGuid 130 r.Domain.Shared = route.Domain.Shared 131 132 (*(cmd.pluginAppModels))[len(*(cmd.pluginAppModels))-1].Routes = append((*(cmd.pluginAppModels))[len(*(cmd.pluginAppModels))-1].Routes, r) 133 } 134 135 } 136 }