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  }