github.com/niteshexa/cloudfoundry_cli@v7.1.0+incompatible/command/v7/shared/v3_poll_stage.go (about) 1 package shared 2 3 import ( 4 "code.cloudfoundry.org/cli/actor/actionerror" 5 "code.cloudfoundry.org/cli/actor/sharedaction" 6 "code.cloudfoundry.org/cli/actor/v7action" 7 "code.cloudfoundry.org/cli/command" 8 "code.cloudfoundry.org/cli/resources" 9 ) 10 11 func PollStage(dropletStream <-chan resources.Droplet, warningsStream <-chan v7action.Warnings, errStream <-chan error, logStream <-chan sharedaction.LogMessage, logErrStream <-chan error, ui command.UI) (resources.Droplet, error) { 12 var closedBuildStream, closedWarningsStream, closedErrStream bool 13 var droplet resources.Droplet 14 15 for { 16 select { 17 case d, ok := <-dropletStream: 18 if !ok { 19 closedBuildStream = true 20 break 21 } 22 droplet = d 23 case log, ok := <-logStream: 24 if !ok { 25 break 26 } 27 if log.Staging() { 28 ui.DisplayLogMessage(log, false) 29 } 30 case warnings, ok := <-warningsStream: 31 if !ok { 32 closedWarningsStream = true 33 break 34 } 35 ui.DisplayWarnings(warnings) 36 case logErr, ok := <-logErrStream: 37 if !ok { 38 break 39 } 40 41 switch logErr.(type) { 42 case actionerror.LogCacheTimeoutError: 43 ui.DisplayWarning("timeout connecting to log server, no log will be shown") 44 default: 45 ui.DisplayWarning("Failed to retrieve logs from Log Cache: {{.Error}}", map[string]interface{}{ 46 "Error": logErr, 47 }) 48 } 49 case err, ok := <-errStream: 50 if !ok { 51 closedErrStream = true 52 break 53 } 54 return resources.Droplet{}, err 55 } 56 if closedBuildStream && closedWarningsStream && closedErrStream { 57 return droplet, nil 58 } 59 } 60 }