Skip to content

Commit

Permalink
Pass circuit breaker settings to the app
Browse files Browse the repository at this point in the history
  • Loading branch information
9seconds committed Feb 25, 2021
1 parent 84f5908 commit 5de77be
Show file tree
Hide file tree
Showing 3 changed files with 52 additions and 16 deletions.
58 changes: 44 additions & 14 deletions config.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,10 +13,13 @@ import (
)

const (
DefaultHTTPTimeout = 10 * time.Second
DefaultUpdateEvery = 24 * time.Hour
DefaultRateLimitInterval = 100 * time.Millisecond
DefaultRateLimitBurst = 10
DefaultHTTPTimeout = 10 * time.Second
DefaultUpdateEvery = 24 * time.Hour
DefaultRateLimitInterval = 100 * time.Millisecond
DefaultRateLimitBurst = 10
DefaultCircuitBreakerOpenThreshold = 5
DefaultCircuitBreakerHalfOpenTimeout = time.Minute
DefaultCircuitBreakerResetFailuresTimeout = 20 * time.Second
)

type duration struct {
Expand Down Expand Up @@ -71,29 +74,32 @@ func (c config) GetWorkerPoolSize() int {
}

func (c config) GetBasicAuthUser() []byte {
return []byte(c.BasicAuthUser)
return []byte(c.BasicAuthUser)
}

func (c config) GetBasicAuthPassword() []byte {
return []byte(c.BasicAuthPassword)
return []byte(c.BasicAuthPassword)
}

func (c config) HasBasicAuth() bool {
return c.BasicAuthUser != "" || c.BasicAuthPassword != ""
return c.BasicAuthUser != "" || c.BasicAuthPassword != ""
}

func (c config) GetProviders() []configProvider {
return c.Providers
}

type configProvider struct {
Name string `json:"name"`
Directory string `json:"directory"`
RateLimitInterval duration `json:"rate_limit_interval"`
RateLimitBurst uint `json:"rate_limit_burst"`
UpdateEvery duration `json:"update_every"`
HTTPTimeout duration `json:"http_timeout"`
SpecificParameters map[string]string `json:"specific_parameters"`
Name string `json:"name"`
Directory string `json:"directory"`
RateLimitInterval duration `json:"rate_limit_interval"`
RateLimitBurst uint `json:"rate_limit_burst"`
CircuitBreakerOpenThreshold uint32 `json:"circuit_breaker_open_threshold"`
CircuitBreakerHalfOpenTimeout duration `json:"circuit_breaker_half_open_timeout"`
CircuitBreakerResetFailuresTimeout duration `json:"circuit_breaker_reset_failures_timeout"`
UpdateEvery duration `json:"update_every"`
HTTPTimeout duration `json:"http_timeout"`
SpecificParameters map[string]string `json:"specific_parameters"`
}

func (c configProvider) GetName() string {
Expand Down Expand Up @@ -124,6 +130,30 @@ func (c configProvider) GetRateLimitBurst() int {
return int(c.RateLimitBurst)
}

func (c configProvider) GetCircuitBreakerOpenThreshold() uint32 {
if c.CircuitBreakerOpenThreshold == 0 {
return DefaultCircuitBreakerOpenThreshold
}

return c.CircuitBreakerOpenThreshold
}

func (c configProvider) GetCircuitBreakerHalfOpenTimeout() time.Duration {
if c.CircuitBreakerHalfOpenTimeout.Duration == 0 {
return DefaultCircuitBreakerHalfOpenTimeout
}

return c.CircuitBreakerHalfOpenTimeout.Duration
}

func (c configProvider) GetCircuitBreakerResetFailuresTimeout() time.Duration {
if c.CircuitBreakerResetFailuresTimeout.Duration == 0 {
return DefaultCircuitBreakerResetFailuresTimeout
}

return c.CircuitBreakerResetFailuresTimeout.Duration
}

func (c configProvider) GetUpdateEvery() time.Duration {
if c.UpdateEvery.Duration == 0 {
return DefaultUpdateEvery
Expand Down
5 changes: 4 additions & 1 deletion providers/init_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,10 @@ func (suite *ProviderTestSuite) SetupTest() {
suite.http = topolib.NewHTTPClient(&http.Client{},
"test-agent",
time.Millisecond,
100)
100,
5,
time.Minute,
time.Minute)
}

type OnlineProviderTestSuite struct {
Expand Down
5 changes: 4 additions & 1 deletion utils.go
Original file line number Diff line number Diff line change
Expand Up @@ -118,7 +118,10 @@ func makeNewHTTPClient(conf configProvider) topolib.HTTPClient {
return topolib.NewHTTPClient(httpClient,
"topographer/"+version,
conf.GetRateLimitInterval(),
conf.GetRateLimitBurst())
conf.GetRateLimitBurst(),
conf.GetCircuitBreakerOpenThreshold(),
conf.GetCircuitBreakerHalfOpenTimeout(),
conf.GetCircuitBreakerResetFailuresTimeout())
}

func boolParam(param string) bool {
Expand Down

0 comments on commit 5de77be

Please sign in to comment.