proxy

package
v0.0.0-...-48366c5 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 25, 2023 License: Apache-2.0 Imports: 22 Imported by: 0

Documentation

Index

Constants

View Source
const (
	MetricBlockNumber int = iota
	MetricGasLimit
	MetricResponseTime
)

Variables

This section is empty.

Functions

func GetTargetNameFromContext

func GetTargetNameFromContext(r *http.Request) string

GetTargetNameFromContext returns the target name for request.

func GetVisitedTargetsFromContext

func GetVisitedTargetsFromContext(r *http.Request) []uint

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 HealthCheckConfig struct {
	Interval         time.Duration `yaml:"interval"`
	Timeout          time.Duration `yaml:"timeout"`
	FailureThreshold uint          `yaml:"failureThreshold"`
	SuccessThreshold uint          `yaml:"successThreshold"`
}

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) Start

func (h *HealthcheckManager) Start(ctx context.Context) error

func (*HealthcheckManager) Stop

func (h *HealthcheckManager) Stop(ctx context.Context) error

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 JSONRPCResponse struct {
	Jsonrpc string `json:"jsonrpc"`
	ID      int    `json:"id"`
	Result  string `json:"result"`
}

type Proxy

type Proxy struct {
	// contains filtered or unexported fields
}

func NewProxy

func NewProxy(proxyConfig Config, healthCheckManager *HealthcheckManager) *Proxy

func (*Proxy) AddTarget

func (h *Proxy) AddTarget(target TargetConfig, index uint) error

func (*Proxy) GetNextTarget

func (h *Proxy) GetNextTarget() *HTTPTarget

func (*Proxy) GetNextTargetExcluding

func (h *Proxy) GetNextTargetExcluding(indexes []uint) *HTTPTarget

func (*Proxy) GetNextTargetName

func (h *Proxy) GetNextTargetName() string

func (*Proxy) ServeHTTP

func (h *Proxy) ServeHTTP(w http.ResponseWriter, r *http.Request)

type ProxyConfig

type ProxyConfig struct {
	Port            string        `yaml:"port"`
	UpstreamTimeout time.Duration `yaml:"upstreamTimeout"`
}

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) Stop

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

type TargetConnectionHTTP struct {
	URL               string `yaml:"url"`
	Compression       bool   `yaml:"compression"`
	DisableKeepAlives bool   `yaml:"disableKeepAlives"`
}

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL