Documentation ¶
Index ¶
- Constants
- func GetTargetNameFromContext(r *http.Request) string
- func GetVisitedTargetsFromContext(r *http.Request) []uint
- func NewReverseProxy(targetConfig TargetConfig, config Config) (*httputil.ReverseProxy, error)
- type Config
- type ContextFailoverKeyInt
- type HTTPTarget
- type HealthCheckConfig
- type HealthcheckManager
- func (h *HealthcheckManager) GetNextHealthyTargetIndex() int
- func (h *HealthcheckManager) GetNextHealthyTargetIndexExcluding(excludedIdx []uint) int
- func (h *HealthcheckManager) GetTargetByName(name string) Healthchecker
- func (h *HealthcheckManager) GetTargetIndexByName(name string) int
- func (h *HealthcheckManager) IsTargetHealthy(name string) bool
- func (h *HealthcheckManager) Start(ctx context.Context) error
- func (h *HealthcheckManager) Stop(ctx context.Context) error
- func (h *HealthcheckManager) TaintTarget(name string)
- type HealthcheckManagerConfig
- type Healthchecker
- type JSONRPCResponse
- type Proxy
- type ProxyConfig
- type RPCHealthchecker
- func (h *RPCHealthchecker) BlockNumber() uint64
- func (h *RPCHealthchecker) CheckAndSetHealth()
- func (h *RPCHealthchecker) IsHealthy() bool
- func (h *RPCHealthchecker) IsTainted() bool
- func (h *RPCHealthchecker) Name() string
- func (h *RPCHealthchecker) RemoveTaint()
- func (h *RPCHealthchecker) SetMetric(i int, metric interface{})
- func (h *RPCHealthchecker) Start(ctx context.Context)
- func (h *RPCHealthchecker) Stop(_ context.Context) error
- func (h *RPCHealthchecker) Taint()
- type RPCHealthcheckerConfig
- type TargetConfig
- type TargetConfigConnection
- type TargetConnectionHTTP
Constants ¶
View Source
const ( MetricBlockNumber int = iota MetricGasLimit MetricResponseTime )
Variables ¶
This section is empty.
Functions ¶
func GetTargetNameFromContext ¶
GetTargetNameFromContext returns the target name for request.
func GetVisitedTargetsFromContext ¶
GetVisitedTargetsFromContext returns the visited targets for request.
func NewReverseProxy ¶
func NewReverseProxy(targetConfig TargetConfig, config Config) (*httputil.ReverseProxy, error)
Types ¶
type Config ¶
type Config struct { Proxy ProxyConfig Targets []TargetConfig HealthChecks HealthCheckConfig }
This struct is temporary. It's about to keep the input interface clean and simple.
type ContextFailoverKeyInt ¶
type ContextFailoverKeyInt int
const ( TargetName ContextFailoverKeyInt = iota VisitedTargets )
type HTTPTarget ¶
type HTTPTarget struct { Config TargetConfig Proxy *httputil.ReverseProxy }
type HealthCheckConfig ¶
type HealthcheckManager ¶
type HealthcheckManager struct {
// contains filtered or unexported fields
}
func NewHealthcheckManager ¶
func NewHealthcheckManager(config HealthcheckManagerConfig) *HealthcheckManager
func (*HealthcheckManager) GetNextHealthyTargetIndex ¶
func (h *HealthcheckManager) GetNextHealthyTargetIndex() int
func (*HealthcheckManager) GetNextHealthyTargetIndexExcluding ¶
func (h *HealthcheckManager) GetNextHealthyTargetIndexExcluding(excludedIdx []uint) int
func (*HealthcheckManager) GetTargetByName ¶
func (h *HealthcheckManager) GetTargetByName(name string) Healthchecker
func (*HealthcheckManager) GetTargetIndexByName ¶
func (h *HealthcheckManager) GetTargetIndexByName(name string) int
func (*HealthcheckManager) IsTargetHealthy ¶
func (h *HealthcheckManager) IsTargetHealthy(name string) bool
func (*HealthcheckManager) TaintTarget ¶
func (h *HealthcheckManager) TaintTarget(name string)
type HealthcheckManagerConfig ¶
type HealthcheckManagerConfig struct { Targets []TargetConfig Config HealthCheckConfig }
type Healthchecker ¶
type Healthchecker interface { Start(ctx context.Context) Stop(ctx context.Context) error IsHealthy() bool BlockNumber() uint64 Taint() RemoveTaint() IsTainted() bool Name() string SetMetric(int, interface{}) }
func NewHealthchecker ¶
func NewHealthchecker(config RPCHealthcheckerConfig) (Healthchecker, error)
type JSONRPCResponse ¶
type Proxy ¶
type Proxy struct {
// contains filtered or unexported fields
}
func NewProxy ¶
func NewProxy(proxyConfig Config, healthCheckManager *HealthcheckManager) *Proxy
func (*Proxy) GetNextTarget ¶
func (h *Proxy) GetNextTarget() *HTTPTarget
func (*Proxy) GetNextTargetExcluding ¶
func (h *Proxy) GetNextTargetExcluding(indexes []uint) *HTTPTarget
func (*Proxy) GetNextTargetName ¶
type ProxyConfig ¶
type RPCHealthchecker ¶
type RPCHealthchecker struct {
// contains filtered or unexported fields
}
func (*RPCHealthchecker) BlockNumber ¶
func (h *RPCHealthchecker) BlockNumber() uint64
func (*RPCHealthchecker) CheckAndSetHealth ¶
func (h *RPCHealthchecker) CheckAndSetHealth()
CheckAndSetHealth makes the following calls - `eth_blockNumber` - to get the latest block reported by the node - `eth_call` - to get the gas limit And sets the health status based on the responses.
func (*RPCHealthchecker) IsHealthy ¶
func (h *RPCHealthchecker) IsHealthy() bool
func (*RPCHealthchecker) IsTainted ¶
func (h *RPCHealthchecker) IsTainted() bool
func (*RPCHealthchecker) Name ¶
func (h *RPCHealthchecker) Name() string
func (*RPCHealthchecker) RemoveTaint ¶
func (h *RPCHealthchecker) RemoveTaint()
func (*RPCHealthchecker) SetMetric ¶
func (h *RPCHealthchecker) SetMetric(i int, metric interface{})
func (*RPCHealthchecker) Start ¶
func (h *RPCHealthchecker) Start(ctx context.Context)
func (*RPCHealthchecker) Taint ¶
func (h *RPCHealthchecker) Taint()
type RPCHealthcheckerConfig ¶
type RPCHealthcheckerConfig struct { URL string Name string // identifier imported from RPC gateway config // How often to check health. Interval time.Duration `yaml:"healthcheckInterval"` // How long to wait for responses before failing Timeout time.Duration `yaml:"healthcheckTimeout"` // Try FailureThreshold times before marking as unhealthy FailureThreshold uint `yaml:"healthcheckInterval"` // Minimum consecutive successes required to mark as healthy SuccessThreshold uint `yaml:"healthcheckInterval"` }
type TargetConfig ¶
type TargetConfig struct { Name string `yaml:"name"` Connection TargetConfigConnection `yaml:"connection"` }
type TargetConfigConnection ¶
type TargetConfigConnection struct {
HTTP TargetConnectionHTTP `yaml:"http"`
}
type TargetConnectionHTTP ¶
Click to show internal directories.
Click to hide internal directories.