client

package module
v9.0.0-...-1532bfb Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Dec 17, 2024 License: Apache-2.0 Imports: 20 Imported by: 0

Documentation

Index

Constants

View Source
const Version = "9.0.0"

Version of the client.

View Source
const VersionHeader = "X-Client-Version"

VersionHeader is sent with every request.

Variables

View Source
var DefaultCircuitBreakerSettings = CircuitBreakerSettings{
	MaxConcurrentRequests:  100,
	RequestVolumeThreshold: 20,
	SleepWindow:            5000,
	ErrorPercentThreshold:  90,
}

DefaultCircuitBreakerSettings describes the default circuit parameters.

Functions

func WithRetryPolicy

func WithRetryPolicy(ctx context.Context, retryPolicy RetryPolicy) context.Context

WithRetryPolicy returns a new context that overrides the client object's retry policy.

Types

type CircuitBreakerSettings

type CircuitBreakerSettings struct {
	// MaxConcurrentRequests is the maximum number of concurrent requests
	// the client can make at the same time. Default: 100.
	MaxConcurrentRequests int
	// RequestVolumeThreshold is the minimum number of requests needed
	// before a circuit can be tripped due to health. Default: 20.
	RequestVolumeThreshold int
	// SleepWindow how long, in milliseconds, to wait after a circuit opens
	// before testing for recovery. Default: 5000.
	SleepWindow int
	// ErrorPercentThreshold is the threshold to place on the rolling error
	// rate. Once the error rate exceeds this percentage, the circuit opens.
	// Default: 90.
	ErrorPercentThreshold int
}

CircuitBreakerSettings are the parameters that govern the client's circuit breaker.

type Client

type Client interface {

	// GetAuthors makes a GET request to /authors
	// Gets authors
	// 200: *models.AuthorsResponse
	// 400: *models.BadRequest
	// 500: *models.InternalError
	// default: client side HTTP errors, for example: context.DeadlineExceeded.
	GetAuthors(ctx context.Context, i *models.GetAuthorsInput) (*models.AuthorsResponse, error)

	NewGetAuthorsIter(ctx context.Context, i *models.GetAuthorsInput) (GetAuthorsIter, error)

	// GetAuthorsWithPut makes a PUT request to /authors
	// Gets authors, but needs to use the body so it's a PUT
	// 200: *models.AuthorsResponse
	// 400: *models.BadRequest
	// 500: *models.InternalError
	// default: client side HTTP errors, for example: context.DeadlineExceeded.
	GetAuthorsWithPut(ctx context.Context, i *models.GetAuthorsWithPutInput) (*models.AuthorsResponse, error)

	NewGetAuthorsWithPutIter(ctx context.Context, i *models.GetAuthorsWithPutInput) (GetAuthorsWithPutIter, error)

	// GetBooks makes a GET request to /books
	// Returns a list of books
	// 200: []models.Book
	// 400: *models.BadRequest
	// 500: *models.InternalError
	// default: client side HTTP errors, for example: context.DeadlineExceeded.
	GetBooks(ctx context.Context, i *models.GetBooksInput) ([]models.Book, error)

	NewGetBooksIter(ctx context.Context, i *models.GetBooksInput) (GetBooksIter, error)

	// CreateBook makes a POST request to /books
	// Creates a book
	// 200: *models.Book
	// 400: *models.BadRequest
	// 500: *models.InternalError
	// default: client side HTTP errors, for example: context.DeadlineExceeded.
	CreateBook(ctx context.Context, i *models.Book) (*models.Book, error)

	// PutBook makes a PUT request to /books
	// Puts a book
	// 200: *models.Book
	// 400: *models.BadRequest
	// 500: *models.InternalError
	// default: client side HTTP errors, for example: context.DeadlineExceeded.
	PutBook(ctx context.Context, i *models.Book) (*models.Book, error)

	// GetBookByID makes a GET request to /books/{book_id}
	// Returns a book
	// 200: *models.Book
	// 400: *models.BadRequest
	// 401: *models.Unathorized
	// 404: *models.Error
	// 500: *models.InternalError
	// default: client side HTTP errors, for example: context.DeadlineExceeded.
	GetBookByID(ctx context.Context, i *models.GetBookByIDInput) (*models.Book, error)

	// GetBookByID2 makes a GET request to /books2/{id}
	// Retrieve a book
	// 200: *models.Book
	// 400: *models.BadRequest
	// 404: *models.Error
	// 500: *models.InternalError
	// default: client side HTTP errors, for example: context.DeadlineExceeded.
	GetBookByID2(ctx context.Context, id string) (*models.Book, error)

	// HealthCheck makes a GET request to /health/check
	//
	// 200: nil
	// 400: *models.BadRequest
	// 500: *models.InternalError
	// default: client side HTTP errors, for example: context.DeadlineExceeded.
	HealthCheck(ctx context.Context) error

	// LowercaseModelsTest makes a POST request to /lowercaseModelsTest/{pathParam}
	// testing that we can use a lowercase name for a model
	// 200: nil
	// 400: *models.BadRequest
	// 500: *models.InternalError
	// default: client side HTTP errors, for example: context.DeadlineExceeded.
	LowercaseModelsTest(ctx context.Context, i *models.LowercaseModelsTestInput) error
}

Client defines the methods available to clients of the swagger-test service.

type ExponentialRetryPolicy

type ExponentialRetryPolicy struct{}

ExponentialRetryPolicy defines an exponential retry policy

func (ExponentialRetryPolicy) Backoffs

func (ExponentialRetryPolicy) Backoffs() []time.Duration

Backoffs returns five backoffs with exponentially increasing wait times between requests: 100, 200, 400, 800, and 1600 milliseconds +/- up to 5% jitter.

func (ExponentialRetryPolicy) Retry

func (ExponentialRetryPolicy) Retry(req *http.Request, resp *http.Response, err error) bool

Retry will retry non-POST, non-PATCH requests that 5XX. TODO: It does not currently retry any errors returned by net/http.Client's `Do`.

type GetAuthorsIter

type GetAuthorsIter interface {
	Next(*models.Author) bool
	Err() error
}

GetAuthorsIter defines the methods available on GetAuthors iterators.

type GetAuthorsWithPutIter

type GetAuthorsWithPutIter interface {
	Next(*models.Author) bool
	Err() error
}

GetAuthorsWithPutIter defines the methods available on GetAuthorsWithPut iterators.

type GetBooksIter

type GetBooksIter interface {
	Next(*models.Book) bool
	Err() error
}

GetBooksIter defines the methods available on GetBooks iterators.

type HystrixSSEEvent

type HystrixSSEEvent struct {
	Type                            string `json:"type"`
	Name                            string `json:"name"`
	RequestCount                    int    `json:"requestCount"`
	ErrorCount                      int    `json:"errorCount"`
	ErrorPercentage                 int    `json:"errorPercentage"`
	IsCircuitBreakerOpen            bool   `json:"isCircuitBreakerOpen"`
	RollingCountFailure             int    `json:"rollingCountFailure"`
	RollingCountFallbackFailure     int    `json:"rollingCountFallbackFailure"`
	RollingCountFallbackSuccess     int    `json:"rollingCountFallbackSuccess"`
	RollingCountShortCircuited      int    `json:"rollingCountShortCircuited"`
	RollingCountSuccess             int    `json:"rollingCountSuccess"`
	RollingCountThreadPoolRejected  int    `json:"rollingCountThreadPoolRejected"`
	RollingCountTimeout             int    `json:"rollingCountTimeout"`
	CurrentConcurrentExecutionCount int    `json:"currentConcurrentExecutionCount"`
	LatencyTotalMean                int    `json:"latencyTotal_mean"`
}

HystrixSSEEvent is emitted by hystrix-go via server-sent events. It describes the state of a circuit.

type NoRetryPolicy

type NoRetryPolicy struct{}

NoRetryPolicy defines a policy of never retrying a request.

func (NoRetryPolicy) Backoffs

func (NoRetryPolicy) Backoffs() []time.Duration

Backoffs returns an empty slice.

func (NoRetryPolicy) Retry

Retry always returns false.

type RetryPolicy

type RetryPolicy interface {
	// Backoffs returns the number and timing of retry attempts.
	Backoffs() []time.Duration
	// Retry receives the http request, as well as the result of
	// net/http.Client's `Do` method.
	Retry(*http.Request, *http.Response, error) bool
}

RetryPolicy defines a retry policy.

type SingleRetryPolicy

type SingleRetryPolicy struct{}

SingleRetryPolicy defines a retry that retries a request once

func (SingleRetryPolicy) Backoffs

func (SingleRetryPolicy) Backoffs() []time.Duration

Backoffs returns that you should retry the request 1second after it fails.

func (SingleRetryPolicy) Retry

func (SingleRetryPolicy) Retry(req *http.Request, resp *http.Response, err error) bool

Retry will retry non-POST, non-PATCH requests that 5XX. TODO: It does not currently retry any errors returned by net/http.Client's `Do`.

type WagClient

type WagClient struct {
	// contains filtered or unexported fields
}

WagClient is used to make requests to the swagger-test service.

func New

func New(basePath string, logger wcl.WagClientLogger, transport *http.RoundTripper) *WagClient

New creates a new client. The base path, logger, and http transport are configurable. The logger provided should be specifically created for this wag client. If tracing is required, provide an instrumented transport using the wag clientconfig module. If no tracing is required, pass nil to use the default transport.

func NewFromDiscovery

func NewFromDiscovery(logger wcl.WagClientLogger, transport *http.RoundTripper) (*WagClient, error)

NewFromDiscovery creates a client from the discovery environment variables. This method requires the three env vars: SERVICE_SWAGGER_TEST_HTTP_(HOST/PORT/PROTO) to be set. Otherwise it returns an error. The logger provided should be specifically created for this wag client. If tracing is required, provide an instrumented transport using the wag clientconfig module. If no tracing is required, pass nil to use the default transport.

func (*WagClient) CreateBook

func (c *WagClient) CreateBook(ctx context.Context, i *models.Book) (*models.Book, error)

CreateBook makes a POST request to /books Creates a book 200: *models.Book 400: *models.BadRequest 500: *models.InternalError default: client side HTTP errors, for example: context.DeadlineExceeded.

func (*WagClient) GetAuthors

func (c *WagClient) GetAuthors(ctx context.Context, i *models.GetAuthorsInput) (*models.AuthorsResponse, error)

GetAuthors makes a GET request to /authors Gets authors 200: *models.AuthorsResponse 400: *models.BadRequest 500: *models.InternalError default: client side HTTP errors, for example: context.DeadlineExceeded.

func (*WagClient) GetAuthorsWithPut

func (c *WagClient) GetAuthorsWithPut(ctx context.Context, i *models.GetAuthorsWithPutInput) (*models.AuthorsResponse, error)

GetAuthorsWithPut makes a PUT request to /authors Gets authors, but needs to use the body so it's a PUT 200: *models.AuthorsResponse 400: *models.BadRequest 500: *models.InternalError default: client side HTTP errors, for example: context.DeadlineExceeded.

func (*WagClient) GetBookByID

func (c *WagClient) GetBookByID(ctx context.Context, i *models.GetBookByIDInput) (*models.Book, error)

GetBookByID makes a GET request to /books/{book_id} Returns a book 200: *models.Book 400: *models.BadRequest 401: *models.Unathorized 404: *models.Error 500: *models.InternalError default: client side HTTP errors, for example: context.DeadlineExceeded.

func (*WagClient) GetBookByID2

func (c *WagClient) GetBookByID2(ctx context.Context, id string) (*models.Book, error)

GetBookByID2 makes a GET request to /books2/{id} Retrieve a book 200: *models.Book 400: *models.BadRequest 404: *models.Error 500: *models.InternalError default: client side HTTP errors, for example: context.DeadlineExceeded.

func (*WagClient) GetBooks

func (c *WagClient) GetBooks(ctx context.Context, i *models.GetBooksInput) ([]models.Book, error)

GetBooks makes a GET request to /books Returns a list of books 200: []models.Book 400: *models.BadRequest 500: *models.InternalError default: client side HTTP errors, for example: context.DeadlineExceeded.

func (*WagClient) HealthCheck

func (c *WagClient) HealthCheck(ctx context.Context) error

HealthCheck makes a GET request to /health/check

200: nil 400: *models.BadRequest 500: *models.InternalError default: client side HTTP errors, for example: context.DeadlineExceeded.

func (*WagClient) LowercaseModelsTest

func (c *WagClient) LowercaseModelsTest(ctx context.Context, i *models.LowercaseModelsTestInput) error

LowercaseModelsTest makes a POST request to /lowercaseModelsTest/{pathParam} testing that we can use a lowercase name for a model 200: nil 400: *models.BadRequest 500: *models.InternalError default: client side HTTP errors, for example: context.DeadlineExceeded.

func (*WagClient) NewGetAuthorsIter

func (c *WagClient) NewGetAuthorsIter(ctx context.Context, i *models.GetAuthorsInput) (GetAuthorsIter, error)

NewgetAuthorsIter constructs an iterator that makes calls to getAuthors for each page.

func (*WagClient) NewGetAuthorsWithPutIter

func (c *WagClient) NewGetAuthorsWithPutIter(ctx context.Context, i *models.GetAuthorsWithPutInput) (GetAuthorsWithPutIter, error)

NewgetAuthorsWithPutIter constructs an iterator that makes calls to getAuthorsWithPut for each page.

func (*WagClient) NewGetBooksIter

func (c *WagClient) NewGetBooksIter(ctx context.Context, i *models.GetBooksInput) (GetBooksIter, error)

NewgetBooksIter constructs an iterator that makes calls to getBooks for each page.

func (*WagClient) PutBook

func (c *WagClient) PutBook(ctx context.Context, i *models.Book) (*models.Book, error)

PutBook makes a PUT request to /books Puts a book 200: *models.Book 400: *models.BadRequest 500: *models.InternalError default: client side HTTP errors, for example: context.DeadlineExceeded.

func (*WagClient) SetCircuitBreakerDebug

func (c *WagClient) SetCircuitBreakerDebug(b bool)

SetCircuitBreakerDebug puts the circuit

func (*WagClient) SetCircuitBreakerSettings

func (c *WagClient) SetCircuitBreakerSettings(settings CircuitBreakerSettings)

SetCircuitBreakerSettings sets parameters on the circuit breaker. It must be called on application startup.

func (*WagClient) SetLogger

func (c *WagClient) SetLogger(l wcl.WagClientLogger)

SetLogger allows for setting a custom logger

func (*WagClient) SetRetryPolicy

func (c *WagClient) SetRetryPolicy(retryPolicy RetryPolicy)

SetRetryPolicy sets a the given retry policy for all requests.

func (*WagClient) SetTimeout

func (c *WagClient) SetTimeout(timeout time.Duration)

SetTimeout sets a timeout on all operations for the client. To make a single request with a shorter timeout than the default on the client, use context.WithTimeout as described here: https://godoc.org/golang.org/x/net/context#WithTimeout.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL