Documentation
¶
Index ¶
- type Checker
- type DNSChecker
- type GRPCChecker
- type HTTPChecker
- type HealthTransition
- type LocalAddress
- type LocalAddressGuard
- type PingChecker
- type Result
- type Scheduler
- func (s *Scheduler) CheckName() string
- func (s *Scheduler) ConsecutiveFail() int
- func (s *Scheduler) ConsecutiveOK() int
- func (s *Scheduler) IsHealthy() bool
- func (s *Scheduler) LastResult() Result
- func (s *Scheduler) Run(ctx context.Context)
- func (s *Scheduler) SetCallbacks(onTransition func(HealthTransition), ...)
- func (s *Scheduler) TriggerCheck(ctx context.Context) (Result, error)
- func (s *Scheduler) VIPName() string
- type SchedulerConfig
- type TCPChecker
- type UDPChecker
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type Checker ¶
func NewChecker ¶
func NewChecker(cfg *config.CheckConfig) (Checker, error)
type DNSChecker ¶
type DNSChecker struct {
// contains filtered or unexported fields
}
func NewDNSChecker ¶
func NewDNSChecker(cfg *config.DNSCheckConfig) *DNSChecker
func (*DNSChecker) Type ¶
func (c *DNSChecker) Type() string
type GRPCChecker ¶ added in v0.5.0
type GRPCChecker struct {
// contains filtered or unexported fields
}
GRPCChecker performs a gRPC health check.
When cfg.Method is empty it uses the standard gRPC Health Checking Protocol (grpc.health.v1.Health/Check) and requires the response status to be SERVING.
When cfg.Method is set it calls that unary RPC with an empty proto3 request and considers the call passing if the returned gRPC status code is in OKCodes (default: OK). This mirrors the HTTP checker's response_codes semantics.
func NewGRPCChecker ¶ added in v0.5.0
func NewGRPCChecker(cfg *config.GRPCCheckConfig) (*GRPCChecker, error)
func (*GRPCChecker) Type ¶ added in v0.5.0
func (c *GRPCChecker) Type() string
type HTTPChecker ¶
type HTTPChecker struct {
// contains filtered or unexported fields
}
func NewHTTPChecker ¶
func NewHTTPChecker(cfg *config.HTTPCheckConfig) (*HTTPChecker, error)
func (*HTTPChecker) Type ¶
func (c *HTTPChecker) Type() string
type HealthTransition ¶
type HealthTransition struct {
Ctx context.Context // trace context; may be nil when called synthetically
VIPName string
CheckName string // which of the VIP's checks crossed the threshold
Healthy bool
Reason string
CheckResult Result
}
HealthTransition is fired when a VIP crosses the rise or fall threshold. Ctx carries the trace context of the check that caused the transition so that downstream operations (e.g. BGP announce/withdraw) appear as child spans.
type LocalAddress ¶ added in v0.12.0
LocalAddress is one address configured on a local interface.
func ListLocalAddresses ¶ added in v0.12.0
func ListLocalAddresses() ([]LocalAddress, error)
ListLocalAddresses returns every IP address configured on the host's interfaces.
type LocalAddressGuard ¶ added in v0.12.0
type LocalAddressGuard struct {
// contains filtered or unexported fields
}
LocalAddressGuard reports failure while the VIP address is not configured on a local interface (optionally a specific one), so the route is never announced for an address this host cannot serve. One guard serves all checks of a VIP: Wrap returns a Checker that runs the inner check only once the address is present, and state-change logging happens once per VIP.
func NewLocalAddressGuard ¶ added in v0.12.0
func NewLocalAddressGuard(vipName, prefix, iface string, onState func(assigned bool)) (*LocalAddressGuard, error)
NewLocalAddressGuard builds a guard for the VIP prefix. iface may be empty to accept any interface. onState is called whenever the assigned state is observed to change (and on the first observation); it may be nil.
func (*LocalAddressGuard) Wrap ¶ added in v0.12.0
func (g *LocalAddressGuard) Wrap(inner Checker) Checker
Wrap returns a Checker that verifies the VIP address is present before running inner.
type PingChecker ¶
type PingChecker struct {
// contains filtered or unexported fields
}
func NewPingChecker ¶
func NewPingChecker(cfg *config.PingCheckConfig) *PingChecker
func (*PingChecker) Type ¶
func (c *PingChecker) Type() string
type Result ¶
type Result struct {
Success bool `json:"success"`
Detail string `json:"detail"`
Duration time.Duration `json:"duration"`
Err error `json:"-"`
TimedOut bool `json:"timed_out,omitempty"`
// Details holds check-type-specific observations (status code, RTTs,
// rcode, ...) when the backend got far enough to produce them.
Details model.CheckDetails `json:"details,omitempty"`
}
type Scheduler ¶
type Scheduler struct {
// contains filtered or unexported fields
}
func NewScheduler ¶
func NewScheduler(cfg SchedulerConfig) *Scheduler
func (*Scheduler) CheckName ¶ added in v0.12.0
CheckName returns the name of the check this scheduler runs.
func (*Scheduler) ConsecutiveFail ¶
func (*Scheduler) ConsecutiveOK ¶
func (*Scheduler) LastResult ¶
func (*Scheduler) SetCallbacks ¶
func (s *Scheduler) SetCallbacks(onTransition func(HealthTransition), onCheckResult func(vipName, checkName string, result Result))
func (*Scheduler) TriggerCheck ¶
TriggerCheck runs an ad-hoc check. The check is detached from ctx cancellation (only the configured timeout applies), so an aborted caller cannot produce a spurious failure that counts toward fall.
type SchedulerConfig ¶
type SchedulerConfig struct {
VIPName string
// CheckName identifies the check within the VIP; defaults to the checker type.
CheckName string
Checker Checker
Interval time.Duration
Timeout time.Duration
Rise int
Fall int
OnTransition func(HealthTransition)
OnCheckResult func(vipName, checkName string, result Result)
}
type TCPChecker ¶ added in v0.3.0
type TCPChecker struct {
// contains filtered or unexported fields
}
TCPChecker dials host:port over TCP. A successful connection means the port is open and accepting connections; the connection is closed immediately after.
func NewTCPChecker ¶ added in v0.3.0
func NewTCPChecker(cfg *config.TCPCheckConfig) *TCPChecker
func (*TCPChecker) Type ¶ added in v0.3.0
func (c *TCPChecker) Type() string
type UDPChecker ¶ added in v0.3.0
type UDPChecker struct {
// contains filtered or unexported fields
}
UDPChecker probes a UDP port by sending a small datagram and waiting for an ICMP port-unreachable reply. On Linux, when a UDP socket is connected and a datagram is sent to a port with no listener, the kernel delivers the ICMP error back to the socket as ECONNREFUSED on the next I/O call — without requiring elevated privileges or raw sockets.
Decision logic:
- ECONNREFUSED on read → nothing is listening → check fails
- Read timeout (no ICMP received) → datagram was accepted → check passes
- Actual data received → server responded → check passes
func NewUDPChecker ¶ added in v0.3.0
func NewUDPChecker(cfg *config.UDPCheckConfig) *UDPChecker
func (*UDPChecker) Type ¶ added in v0.3.0
func (c *UDPChecker) Type() string