github.com/mook-as/cf-cli@v7.0.0-beta.28.0.20200120190804-b91c115fae48+incompatible/command/v6/shared/noaa_client.go (about)

     1  package shared
     2  
     3  import (
     4  	"net/http"
     5  	"time"
     6  
     7  	"code.cloudfoundry.org/cli/api/uaa"
     8  	"code.cloudfoundry.org/cli/api/uaa/noaabridge"
     9  	"code.cloudfoundry.org/cli/command"
    10  	"code.cloudfoundry.org/cli/util"
    11  	"github.com/cloudfoundry/noaa/consumer"
    12  )
    13  
    14  type RequestLoggerOutput interface {
    15  	Start() error
    16  	Stop() error
    17  	DisplayType(name string, requestDate time.Time) error
    18  	DisplayDump(dump string) error
    19  }
    20  
    21  type DebugPrinter struct {
    22  	outputs []RequestLoggerOutput
    23  }
    24  
    25  func (p *DebugPrinter) addOutput(output RequestLoggerOutput) {
    26  	p.outputs = append(p.outputs, output)
    27  }
    28  
    29  func (p DebugPrinter) Print(title string, dump string) {
    30  	for _, output := range p.outputs {
    31  		_ = output.Start()
    32  		defer output.Stop()
    33  
    34  		output.DisplayType(title, time.Now())
    35  		output.DisplayDump(dump)
    36  	}
    37  
    38  }
    39  
    40  // NewNOAAClient returns back a configured NOAA Client.
    41  func NewNOAAClient(apiURL string, config command.Config, uaaClient *uaa.Client, ui command.UI) *consumer.Consumer {
    42  	client := consumer.New(
    43  		apiURL,
    44  		util.NewTLSConfig(nil, config.SkipSSLValidation()),
    45  		http.ProxyFromEnvironment,
    46  	)
    47  	client.RefreshTokenFrom(noaabridge.NewTokenRefresher(uaaClient, config))
    48  	client.SetMaxRetryCount(config.NOAARequestRetryCount())
    49  
    50  	noaaDebugPrinter := DebugPrinter{}
    51  
    52  	// if verbose, set debug printer on noaa client
    53  	verbose, location := config.Verbose()
    54  
    55  	client.SetDebugPrinter(&noaaDebugPrinter)
    56  
    57  	if verbose {
    58  		noaaDebugPrinter.addOutput(ui.RequestLoggerTerminalDisplay())
    59  	}
    60  	if location != nil {
    61  		noaaDebugPrinter.addOutput(ui.RequestLoggerFileWriter(location))
    62  	}
    63  
    64  	return client
    65  }