|
|
|
@ -20,12 +20,7 @@ import (
|
|
|
|
|
"forge.chapril.org/losyme/util" |
|
|
|
|
) |
|
|
|
|
|
|
|
|
|
const ( |
|
|
|
|
_defaultCtoO = 3 |
|
|
|
|
_defaultHOtoC = 1 |
|
|
|
|
_defaultOtoHO = 60 * time.Second |
|
|
|
|
_clientTimeout = 10 * time.Second |
|
|
|
|
) |
|
|
|
|
const _clientTimeout = 10 * time.Second |
|
|
|
|
|
|
|
|
|
type Endpoint struct { |
|
|
|
|
URL string `cfg:"url"` |
|
|
|
@ -211,32 +206,31 @@ func (c *Config) buildTLSCertificate() (*tls.Certificate, error) {
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func (c *Config) buildBreaker(url string) *breaker.Breaker { |
|
|
|
|
b := breaker.New(_defaultCtoO, _defaultHOtoC, _defaultOtoHO) // @FIXME: config
|
|
|
|
|
config := breaker.DefaultConfig() // @FIXME: configigurable ?
|
|
|
|
|
|
|
|
|
|
if c.Logger != nil { |
|
|
|
|
logger := c.Logger |
|
|
|
|
|
|
|
|
|
b.OnStateChange( |
|
|
|
|
func(from, to breaker.State) { |
|
|
|
|
msg := "Endpoint breaker state" |
|
|
|
|
kv := []interface{}{ |
|
|
|
|
"url", url, |
|
|
|
|
"from", from, |
|
|
|
|
"to", to, |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
switch to { |
|
|
|
|
case breaker.StateClosed: |
|
|
|
|
logger.Notice(msg, kv...) //::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
|
|
|
|
|
case breaker.StateHalfOpen: |
|
|
|
|
logger.Warning(msg, kv...) //:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
|
|
|
|
|
case breaker.StateOpen: |
|
|
|
|
logger.Error(msg, kv...) //:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
|
|
|
|
|
} |
|
|
|
|
}, |
|
|
|
|
) |
|
|
|
|
config.OnStateChange = func(from, to breaker.State) { |
|
|
|
|
msg := "Endpoint breaker state" |
|
|
|
|
kv := []interface{}{ |
|
|
|
|
"url", url, |
|
|
|
|
"from", from, |
|
|
|
|
"to", to, |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
switch to { |
|
|
|
|
case breaker.StateClosed: |
|
|
|
|
logger.Notice(msg, kv...) //::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
|
|
|
|
|
case breaker.StateHalfOpen: |
|
|
|
|
logger.Warning(msg, kv...) //:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
|
|
|
|
|
case breaker.StateOpen: |
|
|
|
|
logger.Error(msg, kv...) //:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
|
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return b |
|
|
|
|
return breaker.New(config) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func (c *Config) BuildClient() (*Client, error) { |
|
|
|
|