github.com/jghiloni/cli@v6.28.1-0.20170628223758-0ce05fe032a2+incompatible/command/v2/shared/poll_start.go (about)

     1  package shared
     2  
     3  import (
     4  	"code.cloudfoundry.org/cli/actor/v2action"
     5  	"code.cloudfoundry.org/cli/command"
     6  )
     7  
     8  func PollStart(ui command.UI, config command.Config, messages <-chan *v2action.LogMessage, logErrs <-chan error, appStarting <-chan bool, apiWarnings <-chan string, apiErrs <-chan error) error {
     9  	ui.DisplayText("Staging app and tracing logs...")
    10  	var breakAppStart, breakWarnings, breakAPIErrs bool
    11  	for {
    12  		select {
    13  		case message, ok := <-messages:
    14  			if !ok {
    15  				break
    16  			}
    17  
    18  			if message.Staging() {
    19  				ui.DisplayLogMessage(message, false)
    20  			}
    21  		case appStart, ok := <-appStarting:
    22  			if !ok {
    23  				breakAppStart = true
    24  				break
    25  			}
    26  
    27  			if appStart {
    28  				ui.DisplayNewline()
    29  				ui.DisplayText("Waiting for app to start...")
    30  			}
    31  		case warning, ok := <-apiWarnings:
    32  			if !ok {
    33  				breakWarnings = true
    34  				break
    35  			}
    36  
    37  			ui.DisplayWarning(warning)
    38  		case logErr, ok := <-logErrs:
    39  			if !ok {
    40  				break
    41  			}
    42  
    43  			switch logErr.(type) {
    44  			case v2action.NOAATimeoutError:
    45  				ui.DisplayWarning("timeout connecting to log server, no log will be shown")
    46  			default:
    47  				ui.DisplayWarning(logErr.Error())
    48  			}
    49  		case apiErr, ok := <-apiErrs:
    50  			if !ok {
    51  				breakAPIErrs = true
    52  				break
    53  			}
    54  
    55  			switch err := apiErr.(type) {
    56  			case v2action.StagingFailedError:
    57  				return StagingFailedError{Message: err.Error()}
    58  			case v2action.StagingFailedNoAppDetectedError:
    59  				return StagingFailedNoAppDetectedError{BinaryName: config.BinaryName(), Message: err.Error()}
    60  			case v2action.StagingTimeoutError:
    61  				return StagingTimeoutError{AppName: err.Name, Timeout: err.Timeout}
    62  			case v2action.ApplicationInstanceCrashedError:
    63  				return UnsuccessfulStartError{AppName: err.Name, BinaryName: config.BinaryName()}
    64  			case v2action.ApplicationInstanceFlappingError:
    65  				return UnsuccessfulStartError{AppName: err.Name, BinaryName: config.BinaryName()}
    66  			case v2action.StartupTimeoutError:
    67  				return StartupTimeoutError{AppName: err.Name, BinaryName: config.BinaryName()}
    68  			default:
    69  				return HandleError(apiErr)
    70  			}
    71  		}
    72  
    73  		if breakAppStart && breakWarnings && breakAPIErrs {
    74  			return nil
    75  		}
    76  	}
    77  }