github.com/dcarley/cf-cli@v6.24.1-0.20170220111324-4225ff346898+incompatible/command/v2/app_command.go (about)

     1  package v2
     2  
     3  import (
     4  	"os"
     5  
     6  	"code.cloudfoundry.org/cli/actor/sharedaction"
     7  	"code.cloudfoundry.org/cli/actor/v2action"
     8  	oldCmd "code.cloudfoundry.org/cli/cf/cmd"
     9  	"code.cloudfoundry.org/cli/command"
    10  	"code.cloudfoundry.org/cli/command/flag"
    11  	"code.cloudfoundry.org/cli/command/v2/shared"
    12  )
    13  
    14  //go:generate counterfeiter . AppActor
    15  
    16  type AppActor interface {
    17  	GetApplicationByNameAndSpace(name string, spaceGUID string) (v2action.Application, v2action.Warnings, error)
    18  	GetApplicationSummaryByNameAndSpace(name string, spaceGUID string) (v2action.ApplicationSummary, v2action.Warnings, error)
    19  }
    20  
    21  type AppCommand struct {
    22  	RequiredArgs    flag.AppName `positional-args:"yes"`
    23  	GUID            bool         `long:"guid" description:"Retrieve and display the given app's guid.  All other health and status output for the app is suppressed."`
    24  	usage           interface{}  `usage:"CF_NAME app APP_NAME"`
    25  	relatedCommands interface{}  `related_commands:"apps, events, logs, map-route, unmap-route, push"`
    26  
    27  	UI          command.UI
    28  	Config      command.Config
    29  	SharedActor command.SharedActor
    30  	Actor       AppActor
    31  }
    32  
    33  func (cmd *AppCommand) Setup(config command.Config, ui command.UI) error {
    34  	cmd.UI = ui
    35  	cmd.Config = config
    36  	cmd.SharedActor = sharedaction.NewActor()
    37  
    38  	ccClient, uaaClient, err := shared.NewClients(config, ui)
    39  	if err != nil {
    40  		return err
    41  	}
    42  	cmd.Actor = v2action.NewActor(ccClient, uaaClient)
    43  
    44  	return nil
    45  }
    46  
    47  func (cmd AppCommand) Execute(args []string) error {
    48  	if cmd.Config.Experimental() == false {
    49  		oldCmd.Main(os.Getenv("CF_TRACE"), os.Args)
    50  		return nil
    51  	}
    52  
    53  	cmd.UI.DisplayText(command.ExperimentalWarning)
    54  	cmd.UI.DisplayNewline()
    55  
    56  	err := cmd.SharedActor.CheckTarget(cmd.Config, true, true)
    57  	if err != nil {
    58  		return shared.HandleError(err)
    59  	}
    60  
    61  	if cmd.GUID {
    62  		return cmd.displayAppGUID()
    63  	}
    64  
    65  	return cmd.displayAppSummary()
    66  }
    67  
    68  func (cmd AppCommand) displayAppGUID() error {
    69  	app, warnings, err := cmd.Actor.GetApplicationByNameAndSpace(cmd.RequiredArgs.AppName, cmd.Config.TargetedSpace().GUID)
    70  	cmd.UI.DisplayWarnings(warnings)
    71  	if err != nil {
    72  		return shared.HandleError(err)
    73  	}
    74  
    75  	cmd.UI.DisplayText(app.GUID)
    76  	return nil
    77  }
    78  
    79  func (cmd AppCommand) displayAppSummary() error {
    80  	user, err := cmd.Config.CurrentUser()
    81  	if err != nil {
    82  		return shared.HandleError(err)
    83  	}
    84  
    85  	cmd.UI.DisplayTextWithFlavor(
    86  		"Showing health and status for app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...",
    87  		map[string]interface{}{
    88  			"AppName":   cmd.RequiredArgs.AppName,
    89  			"OrgName":   cmd.Config.TargetedOrganization().Name,
    90  			"SpaceName": cmd.Config.TargetedSpace().Name,
    91  			"Username":  user.Name,
    92  		})
    93  	cmd.UI.DisplayNewline()
    94  
    95  	appSummary, warnings, err := cmd.Actor.GetApplicationSummaryByNameAndSpace(cmd.RequiredArgs.AppName, cmd.Config.TargetedSpace().GUID)
    96  	cmd.UI.DisplayWarnings(warnings)
    97  	if err != nil {
    98  		return shared.HandleError(err)
    99  	}
   100  
   101  	shared.DisplayAppSummary(cmd.UI, appSummary, false)
   102  
   103  	return nil
   104  }