github.com/mook-as/cf-cli@v7.0.0-beta.28.0.20200120190804-b91c115fae48+incompatible/command/v6/shared/poll_start.go (about) 1 package shared 2 3 import ( 4 "code.cloudfoundry.org/cli/actor/actionerror" 5 "code.cloudfoundry.org/cli/actor/v2action" 6 "code.cloudfoundry.org/cli/command" 7 "code.cloudfoundry.org/cli/command/translatableerror" 8 ) 9 10 func PollStart(ui command.UI, config command.Config, messages <-chan *v2action.LogMessage, logErrs <-chan error, appState <-chan v2action.ApplicationStateChange, apiWarnings <-chan string, apiErrs <-chan error) (apiError error) { 11 for appState != nil || apiWarnings != nil || apiErrs != nil { 12 select { 13 case message, ok := <-messages: 14 if !ok { 15 messages = nil 16 continue 17 } 18 19 if message.Staging() { 20 ui.DisplayLogMessage(message, false) 21 } 22 23 case state, ok := <-appState: 24 if !ok { 25 appState = nil 26 continue 27 } 28 29 switch state { 30 case v2action.ApplicationStateStopping: 31 ui.DisplayNewline() 32 ui.DisplayText("Stopping app...") 33 34 case v2action.ApplicationStateStaging: 35 ui.DisplayNewline() 36 ui.DisplayText("Staging app and tracing logs...") 37 38 case v2action.ApplicationStateStarting: 39 ui.DisplayNewline() 40 ui.DisplayText("Waiting for app to start...") 41 } 42 43 case warning, ok := <-apiWarnings: 44 if !ok { 45 apiWarnings = nil 46 continue 47 } 48 49 ui.DisplayWarning(warning) 50 51 case logErr, ok := <-logErrs: 52 if !ok { 53 logErrs = nil 54 continue 55 } 56 57 switch logErr.(type) { 58 case actionerror.NOAATimeoutError: 59 ui.DisplayWarning("timeout connecting to log server, no log will be shown") 60 default: 61 ui.DisplayWarning(logErr.Error()) 62 } 63 64 case e, ok := <-apiErrs: 65 if !ok { 66 apiErrs = nil 67 continue 68 } 69 switch err := e.(type) { 70 case actionerror.StagingFailedError: 71 apiError = translatableerror.StagingFailedError{Message: err.Error()} 72 case actionerror.StagingFailedNoAppDetectedError: 73 apiError = translatableerror.StagingFailedNoAppDetectedError{BinaryName: config.BinaryName(), Message: err.Error()} 74 case actionerror.StagingTimeoutError: 75 apiError = translatableerror.StagingTimeoutError{AppName: err.AppName, Timeout: err.Timeout} 76 case actionerror.ApplicationInstanceCrashedError: 77 apiError = translatableerror.ApplicationUnableToStartError{AppName: err.Name, BinaryName: config.BinaryName()} 78 case actionerror.ApplicationInstanceFlappingError: 79 apiError = translatableerror.ApplicationUnableToStartError{AppName: err.Name, BinaryName: config.BinaryName()} 80 case actionerror.StartupTimeoutError: 81 apiError = translatableerror.StartupTimeoutError{AppName: err.Name, BinaryName: config.BinaryName()} 82 default: 83 apiError = err 84 } 85 // if an api error occurred, exit immediately 86 return apiError 87 } 88 } 89 return nil 90 }