checks

package
v0.12.0 Latest Latest
Warning

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

Go to latest
Published: Oct 28, 2026 License: Apache-2.0 Imports: 37 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type Checker

type Checker interface {
	Check(ctx context.Context) Result
	Type() string
}

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

func (c *DNSChecker) Check(ctx context.Context) Result

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) Check added in v0.5.0

func (c *GRPCChecker) Check(ctx context.Context) Result

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

func (c *HTTPChecker) Check(ctx context.Context) Result

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

type LocalAddress struct {
	Interface string
	Addr      netip.Addr
}

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

func (c *PingChecker) Check(ctx context.Context) Result

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

func (s *Scheduler) CheckName() string

CheckName returns the name of the check this scheduler runs.

func (*Scheduler) ConsecutiveFail

func (s *Scheduler) ConsecutiveFail() int

func (*Scheduler) ConsecutiveOK

func (s *Scheduler) ConsecutiveOK() int

func (*Scheduler) IsHealthy

func (s *Scheduler) IsHealthy() bool

func (*Scheduler) LastResult

func (s *Scheduler) LastResult() Result

func (*Scheduler) Run

func (s *Scheduler) Run(ctx context.Context)

func (*Scheduler) SetCallbacks

func (s *Scheduler) SetCallbacks(onTransition func(HealthTransition), onCheckResult func(vipName, checkName string, result Result))

func (*Scheduler) TriggerCheck

func (s *Scheduler) TriggerCheck(ctx context.Context) (Result, error)

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.

func (*Scheduler) VIPName

func (s *Scheduler) VIPName() string

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) Check added in v0.3.0

func (c *TCPChecker) Check(ctx context.Context) Result

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) Check added in v0.3.0

func (c *UDPChecker) Check(ctx context.Context) Result

func (*UDPChecker) Type added in v0.3.0

func (c *UDPChecker) Type() string

Jump to

Keyboard shortcuts

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