github.com/liamawhite/cli-with-i18n@v6.32.1-0.20171122084555-dede0a5c3448+incompatible/command/v2/restart_command.go (about)

     1  package v2
     2  
     3  import (
     4  	"github.com/cloudfoundry/noaa/consumer"
     5  	"github.com/liamawhite/cli-with-i18n/actor/sharedaction"
     6  	"github.com/liamawhite/cli-with-i18n/actor/v2action"
     7  	"github.com/liamawhite/cli-with-i18n/command"
     8  	"github.com/liamawhite/cli-with-i18n/command/flag"
     9  	"github.com/liamawhite/cli-with-i18n/command/v2/shared"
    10  )
    11  
    12  //go:generate counterfeiter . RestartActor
    13  
    14  type RestartActor interface {
    15  	AppActor
    16  	RestartApplication(app v2action.Application, client v2action.NOAAClient, config v2action.Config) (<-chan *v2action.LogMessage, <-chan error, <-chan v2action.ApplicationStateChange, <-chan string, <-chan error)
    17  }
    18  
    19  type RestartCommand struct {
    20  	RequiredArgs        flag.AppName `positional-args:"yes"`
    21  	usage               interface{}  `usage:"CF_NAME restart APP_NAME"`
    22  	relatedCommands     interface{}  `related_commands:"restage, restart-app-instance"`
    23  	envCFStagingTimeout interface{}  `environmentName:"CF_STAGING_TIMEOUT" environmentDescription:"Max wait time for buildpack staging, in minutes" environmentDefault:"15"`
    24  	envCFStartupTimeout interface{}  `environmentName:"CF_STARTUP_TIMEOUT" environmentDescription:"Max wait time for app instance startup, in minutes" environmentDefault:"5"`
    25  
    26  	UI          command.UI
    27  	Config      command.Config
    28  	SharedActor command.SharedActor
    29  	Actor       RestartActor
    30  	NOAAClient  *consumer.Consumer
    31  }
    32  
    33  func (cmd *RestartCommand) Setup(config command.Config, ui command.UI) error {
    34  	cmd.UI = ui
    35  	cmd.Config = config
    36  	cmd.SharedActor = sharedaction.NewActor(config)
    37  
    38  	ccClient, uaaClient, err := shared.NewClients(config, ui, true)
    39  	if err != nil {
    40  		return err
    41  	}
    42  	cmd.Actor = v2action.NewActor(ccClient, uaaClient, config)
    43  
    44  	cmd.NOAAClient = shared.NewNOAAClient(ccClient.DopplerEndpoint(), config, uaaClient, ui)
    45  
    46  	return nil
    47  }
    48  
    49  func (cmd RestartCommand) Execute(args []string) error {
    50  	err := cmd.SharedActor.CheckTarget(cmd.Config, true, true)
    51  	if err != nil {
    52  		return shared.HandleError(err)
    53  	}
    54  
    55  	user, err := cmd.Config.CurrentUser()
    56  	if err != nil {
    57  		return shared.HandleError(err)
    58  	}
    59  
    60  	cmd.UI.DisplayTextWithFlavor("Restarting app {{.AppName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...",
    61  		map[string]interface{}{
    62  			"AppName":     cmd.RequiredArgs.AppName,
    63  			"OrgName":     cmd.Config.TargetedOrganization().Name,
    64  			"SpaceName":   cmd.Config.TargetedSpace().Name,
    65  			"CurrentUser": user.Name,
    66  		})
    67  
    68  	app, warnings, err := cmd.Actor.GetApplicationByNameAndSpace(cmd.RequiredArgs.AppName, cmd.Config.TargetedSpace().GUID)
    69  	cmd.UI.DisplayWarnings(warnings)
    70  	if err != nil {
    71  		return shared.HandleError(err)
    72  	}
    73  
    74  	messages, logErrs, appState, apiWarnings, errs := cmd.Actor.RestartApplication(app, cmd.NOAAClient, cmd.Config)
    75  	err = shared.PollStart(cmd.UI, cmd.Config, messages, logErrs, appState, apiWarnings, errs)
    76  	if err != nil {
    77  		return err
    78  	}
    79  
    80  	cmd.UI.DisplayNewline()
    81  	appSummary, warnings, err := cmd.Actor.GetApplicationSummaryByNameAndSpace(cmd.RequiredArgs.AppName, cmd.Config.TargetedSpace().GUID)
    82  	cmd.UI.DisplayWarnings(warnings)
    83  	if err != nil {
    84  		return shared.HandleError(err)
    85  	}
    86  
    87  	shared.DisplayAppSummary(cmd.UI, appSummary, true)
    88  
    89  	return nil
    90  }