pester: github.com/sethgrid/pester Index | Files | Directories

package pester

import "github.com/sethgrid/pester"

Package pester provides additional resiliency over the standard http client methods by allowing you to control concurrency, retries, and a backoff strategy.

Index

Package Files

pester.go

Variables

var DefaultClient = &Client{Concurrency: 1, MaxRetries: 3, Backoff: DefaultBackoff, ErrLog: []ErrEntry{}}

DefaultClient provides sensible defaults

var ErrReadingBody = errors.New("error reading body")

ErrReadingBody happens when we cannot read the body bytes

var ErrReadingRequestBody = errors.New("error reading request body")

ErrReadingRequestBody happens when we cannot read the request body bytes

var ErrUnexpectedMethod = errors.New("unexpected client method, must be one of Do, Get, Head, Post, or PostFrom")

ErrUnexpectedMethod occurs when an http.Client method is unable to be mapped from a calling method in the pester client

func DefaultBackoff Uses

func DefaultBackoff(_ int) time.Duration

DefaultBackoff always returns 1 second

func Do Uses

func Do(req *http.Request) (resp *http.Response, err error)

Do provides the same functionality as http.Client.Do and creates its own constructor

func ExponentialBackoff Uses

func ExponentialBackoff(i int) time.Duration

ExponentialBackoff returns ever increasing backoffs by a power of 2

func ExponentialJitterBackoff Uses

func ExponentialJitterBackoff(i int) time.Duration

ExponentialJitterBackoff returns ever increasing backoffs by a power of 2 with +/- 0-33% to prevent sychronized reuqests.

func Get Uses

func Get(url string) (resp *http.Response, err error)

Get provides the same functionality as http.Client.Get and creates its own constructor

func Head(url string) (resp *http.Response, err error)

Head provides the same functionality as http.Client.Head and creates its own constructor

func LinearBackoff Uses

func LinearBackoff(i int) time.Duration

LinearBackoff returns increasing durations, each a second longer than the last

func LinearJitterBackoff Uses

func LinearJitterBackoff(i int) time.Duration

LinearJitterBackoff returns increasing durations, each a second longer than the last with +/- 0-33% to prevent sychronized reuqests.

func Post Uses

func Post(url string, bodyType string, body io.Reader) (resp *http.Response, err error)

Post provides the same functionality as http.Client.Post and creates its own constructor

func PostForm Uses

func PostForm(url string, data url.Values) (resp *http.Response, err error)

PostForm provides the same functionality as http.Client.PostForm and creates its own constructor

type BackoffStrategy Uses

type BackoffStrategy func(retry int) time.Duration

BackoffStrategy is used to determine how long a retry request should wait until attempted

type Client Uses

type Client struct {
    Transport     http.RoundTripper
    CheckRedirect func(req *http.Request, via []*http.Request) error
    Jar           http.CookieJar
    Timeout       time.Duration

    // pester specific
    Concurrency int
    MaxRetries  int
    Backoff     BackoffStrategy
    KeepLog     bool
    LogHook     LogHook

    SuccessReqNum   int
    SuccessRetryNum int

    sync.Mutex
    ErrLog         []ErrEntry
    RetryOnHTTP429 bool
    // contains filtered or unexported fields
}

Client wraps the http client and exposes all the functionality of the http.Client. Additionally, Client provides pester specific values for handling resiliency.

func New Uses

func New() *Client

New constructs a new DefaultClient with sensible default values

func NewExtendedClient Uses

func NewExtendedClient(hc *http.Client) *Client

NewExtendedClient allows you to pass in an http.Client that is previously set up and extends it to have Pester's features of concurrency and retries.

func (*Client) Do Uses

func (c *Client) Do(req *http.Request) (resp *http.Response, err error)

Do provides the same functionality as http.Client.Do

func (*Client) EmbedHTTPClient Uses

func (c *Client) EmbedHTTPClient(hc *http.Client)

EmbedHTTPClient allows you to extend an existing Pester client with an underlying http.Client, such as https://godoc.org/golang.org/x/oauth2/google#DefaultClient

func (*Client) FormatError Uses

func (c *Client) FormatError(e ErrEntry) string

Format the Error to human readable string

func (*Client) Get Uses

func (c *Client) Get(url string) (resp *http.Response, err error)

Get provides the same functionality as http.Client.Get

func (*Client) Head Uses

func (c *Client) Head(url string) (resp *http.Response, err error)

Head provides the same functionality as http.Client.Head

func (*Client) LogErrCount Uses

func (c *Client) LogErrCount() int

LogErrCount is a helper method used primarily for test validation

func (*Client) LogString Uses

func (c *Client) LogString() string

LogString provides a string representation of the errors the client has seen

func (*Client) Post Uses

func (c *Client) Post(url string, bodyType string, body io.Reader) (resp *http.Response, err error)

Post provides the same functionality as http.Client.Post

func (*Client) PostForm Uses

func (c *Client) PostForm(url string, data url.Values) (resp *http.Response, err error)

PostForm provides the same functionality as http.Client.PostForm

func (*Client) SetRetryOnHTTP429 Uses

func (c *Client) SetRetryOnHTTP429(flag bool)

set RetryOnHTTP429 for clients,

func (*Client) Wait Uses

func (c *Client) Wait()

Wait blocks until all pester requests have returned Probably not that useful outside of testing.

type ErrEntry Uses

type ErrEntry struct {
    Time    time.Time
    Method  string
    URL     string
    Verb    string
    Request int
    Retry   int
    Attempt int
    Err     error
}

ErrEntry is used to provide the LogString() data and is populated each time an error happens if KeepLog is set. ErrEntry.Retry is deprecated in favor of ErrEntry.Attempt

type LogHook Uses

type LogHook func(e ErrEntry)

LogHook is used to log attempts as they happen. This function is never called, however, if KeepLog is set to true.

Directories

PathSynopsis
sample

Package pester imports 10 packages (graph) and is imported by 53 packages. Updated 2019-09-21. Refresh now. Tools for package owners.