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  }