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 }