package anaconda import ( "time" "github.com/azr/backoff" ) /* Reconnecting(from https://developer.twitter.com/en/docs/tutorials/consuming-streaming-data) : Once an established connection drops, attempt to reconnect immediately. If the reconnect fails, slow down your reconnect attempts according to the type of error experienced: */ //Back off linearly for TCP/IP level network errors. // These problems are generally temporary and tend to clear quickly. // Increase the delay in reconnects by 250ms each attempt, up to 16 seconds. func NewTCPIPErrBackoff() backoff.Interface { return backoff.NewLinear(0, time.Second*16, time.Millisecond*250, 1) } //Back off exponentially for HTTP errors for which reconnecting would be appropriate. // Start with a 5 second wait, doubling each attempt, up to 320 seconds. func NewHTTPErrBackoff() backoff.Interface { eb := backoff.NewExponential() eb.InitialInterval = time.Second * 5 eb.MaxInterval = time.Second * 320 eb.Multiplier = 2 eb.Reset() return eb } // Back off exponentially for HTTP 420 errors. // Start with a 1 minute wait and double each attempt. // Note that every HTTP 420 received increases the time you must // wait until rate limiting will no longer will be in effect for your account. func NewHTTP420ErrBackoff() backoff.Interface { eb := backoff.NewExponential() eb.InitialInterval = time.Minute * 1 eb.Multiplier = 2 eb.MaxInterval = time.Minute * 20 eb.Reset() return eb }