README ¶
GoCryptoTrader package Request
This request package is part of the GoCryptoTrader codebase.
This is still in active development
You can track ideas, planned features and what's in progress on this Trello board: https://trello.com/b/ZAhMhpOy/gocryptotrader.
Join our slack to discuss all things related to GoCryptoTrader! GoCryptoTrader Slack
Current Features for request
- This package services the exchanges package with request handling.
- Throttling of requests for an individual exchange
Please click GoDocs chevron above to view current GoDoc information for this package
Contribution
Please feel free to submit any pull requests or suggest any desired features to be added.
When submitting a PR, please abide by our coding guidelines:
- Code must adhere to the official Go formatting guidelines (i.e. uses gofmt).
- Code must be documented adhering to the official Go commentary guidelines.
- Code must adhere to our coding style.
- Pull requests need to be based on and opened against the
master
branch.
Donations
If this framework helped you in any way, or you would like to support the developers working on it, please donate Bitcoin to:
bc1qk0jareu4jytc0cfrhr5wgshsq8282awpavfahc
Documentation ¶
Index ¶
- Constants
- Variables
- func DefaultRetryPolicy(resp *http.Response, err error) (bool, error)
- func NewRateLimit(interval time.Duration, actions int) *rate.Limiter
- func RetryAfter(resp *http.Response, now time.Time) time.Duration
- func SetupGlobalReporter(r Reporter)
- func WithVerbose(ctx context.Context) context.Context
- type AuthType
- type Backoff
- type BasicLimit
- type EndpointLimit
- type Generate
- type Item
- type Limiter
- type Reporter
- type Requester
- func (r *Requester) DisableRateLimiter() error
- func (r *Requester) EnableRateLimiter() error
- func (r *Requester) GetHTTPClientUserAgent() (string, error)
- func (r *Requester) GetNonce(set nonce.Setter) nonce.Value
- func (r *Requester) InitiateRateLimit(ctx context.Context, e EndpointLimit) error
- func (r *Requester) SendPayload(ctx context.Context, ep EndpointLimit, newRequest Generate, ...) error
- func (r *Requester) SetHTTPClient(newClient *http.Client) error
- func (r *Requester) SetHTTPClientTimeout(timeout time.Duration) error
- func (r *Requester) SetHTTPClientUserAgent(userAgent string) error
- func (r *Requester) SetProxy(p *url.URL) error
- func (r *Requester) Shutdown() error
- type RequesterOption
- type RetryPolicy
Constants ¶
const ( // UnsetRequest is an unset request authentication level UnsetRequest AuthType = 0 // UnauthenticatedRequest denotes a request with no credentials UnauthenticatedRequest = iota << 1 // AuthenticatedRequest denotes a request using API credentials AuthenticatedRequest )
const ( DefaultMaxRetryAttempts = 3 DefaultMutexLockTimeout = 50 * time.Millisecond )
Const vars for rate limiter
Variables ¶
var ( ErrRateLimiterAlreadyDisabled = errors.New("rate limiter already disabled") ErrRateLimiterAlreadyEnabled = errors.New("rate limiter already enabled") )
Defines rate limiting errors
var ( // ErrRequestSystemIsNil defines and error if the request system has not // been set up yet. ErrRequestSystemIsNil = errors.New("request system is nil") // ErrAuthRequestFailed is a wrapping error to denote that it's an auth request that failed ErrAuthRequestFailed = errors.New("authenticated request failed") // ErrBadStatus is a wrapping error to denote that the HTTP status code was unsuccessful ErrBadStatus = errors.New("unsuccessful HTTP status code") )
var (
MaxRetryAttempts = DefaultMaxRetryAttempts
)
Vars for rate limiter
Functions ¶
func DefaultRetryPolicy ¶
DefaultRetryPolicy determines whether the request should be retried, implemented with a default strategy.
func NewRateLimit ¶
NewRateLimit creates a new RateLimit based of time interval and how many actions allowed and breaks it down to an actions-per-second basis -- Burst rate is kept as one as this is not supported for out-bound requests.
func RetryAfter ¶
RetryAfter parses the Retry-After header in the response to determine the minimum duration needed to wait before retrying.
func SetupGlobalReporter ¶
func SetupGlobalReporter(r Reporter)
SetupGlobalReporter sets a reporter interface to be used for all exchange requests
Types ¶
type Backoff ¶
Backoff determines how long to wait between request attempts.
func DefaultBackoff ¶
func DefaultBackoff() Backoff
DefaultBackoff is a default strategy for backoff after a retryable request failure.
func LinearBackoff ¶
LinearBackoff applies a backoff increasing by a base amount with each retry capped at a maximum duration.
type BasicLimit ¶
type BasicLimit struct {
// contains filtered or unexported fields
}
BasicLimit denotes basic rate limit that implements the Limiter interface does not need to set endpoint functionality.
func (*BasicLimit) Limit ¶
func (b *BasicLimit) Limit(ctx context.Context, _ EndpointLimit) error
Limit executes a single rate limit set by NewRateLimit
type EndpointLimit ¶
type EndpointLimit int
EndpointLimit defines individual endpoint rate limits that are set when New is called.
const ( Unset EndpointLimit = iota Auth UnAuth )
Const here define individual functionality sub types for rate limiting
type Generate ¶
Generate defines a closure for functionality outside the requester to generate a new *http.Request on every attempt. This minimizes the chance of being outside the receive window if application rate limiting reduces outbound requests.
type Item ¶
type Item struct { Method string Path string Headers map[string]string Body io.Reader Result interface{} NonceEnabled bool Verbose bool HTTPDebugging bool HTTPRecording bool IsReserved bool // HeaderResponse for inspection of header contents package side useful for // pagination HeaderResponse *http.Header }
Item is a temp item for requests
type Limiter ¶
type Limiter interface {
Limit(context.Context, EndpointLimit) error
}
Limiter interface groups rate limit functionality defined in the REST wrapper for extended rate limiting configuration i.e. Shells of rate limits with a global rate for sub rates.
type Requester ¶
Requester struct for the request client
func (*Requester) DisableRateLimiter ¶
DisableRateLimiter disables the rate limiting system for the exchange
func (*Requester) EnableRateLimiter ¶
EnableRateLimiter enables the rate limiting system for the exchange
func (*Requester) GetHTTPClientUserAgent ¶
GetHTTPClientUserAgent gets the exchanges HTTP user agent
func (*Requester) GetNonce ¶
GetNonce returns a nonce for requests. This locks and enforces concurrent nonce FIFO on the buffered job channel
func (*Requester) InitiateRateLimit ¶
func (r *Requester) InitiateRateLimit(ctx context.Context, e EndpointLimit) error
InitiateRateLimit sleeps for designated end point rate limits
func (*Requester) SendPayload ¶
func (r *Requester) SendPayload(ctx context.Context, ep EndpointLimit, newRequest Generate, requestType AuthType) error
SendPayload handles sending HTTP/HTTPS requests
func (*Requester) SetHTTPClient ¶
SetHTTPClient sets exchanges HTTP client
func (*Requester) SetHTTPClientTimeout ¶
SetHTTPClientTimeout sets the timeout value for the exchanges HTTP Client and also the underlying transports idle connection timeout
func (*Requester) SetHTTPClientUserAgent ¶
SetHTTPClientUserAgent sets the exchanges HTTP user agent
type RequesterOption ¶
type RequesterOption func(*Requester)
RequesterOption is a function option that can be applied to configure a Requester when creating it.
func WithBackoff ¶
func WithBackoff(b Backoff) RequesterOption
WithBackoff configures the backoff strategy for a Requester.
func WithLimiter ¶
func WithLimiter(l Limiter) RequesterOption
WithLimiter configures the rate limiter for a Requester.
func WithReporter ¶
func WithReporter(rep Reporter) RequesterOption
WithReporter configures the reporter for a Requester.
func WithRetryPolicy ¶
func WithRetryPolicy(p RetryPolicy) RequesterOption
WithRetryPolicy configures the retry policy for a Requester.