prober: rename Probe to ProbeFunc.

Making way for a future Probe struct to encapsulate per-probe state.

Signed-off-by: David Anderson <danderson@tailscale.com>
pull/4251/head
David Anderson 3 years ago committed by Dave Anderson
parent 7b4960316b
commit 94aaec5c66

@ -16,11 +16,11 @@ const maxHTTPBody = 4 << 20 // MiB
// HTTP returns a Probe that healthchecks an HTTP URL. // HTTP returns a Probe that healthchecks an HTTP URL.
// //
// The Probe sends a GET request for url, expects an HTTP 200 // The ProbeFunc sends a GET request for url, expects an HTTP 200
// response, and verifies that want is present in the response // response, and verifies that want is present in the response
// body. If the URL is HTTPS, the probe further checks that the TLS // body. If the URL is HTTPS, the probe further checks that the TLS
// certificate is good for at least the next 7 days. // certificate is good for at least the next 7 days.
func HTTP(url, wantText string) Probe { func HTTP(url, wantText string) ProbeFunc {
return func(ctx context.Context) error { return func(ctx context.Context) error {
return probeHTTP(ctx, url, []byte(wantText)) return probeHTTP(ctx, url, []byte(wantText))
} }

@ -18,10 +18,10 @@ import (
"tailscale.com/metrics" "tailscale.com/metrics"
) )
// Probe is a function that probes something and reports whether the // ProbeFunc is a function that probes something and reports whether the
// probe succeeded. The provided context must be used to ensure timely // probe succeeded. The provided context must be used to ensure timely
// cancellation and timeout behavior. // cancellation and timeout behavior.
type Probe func(context.Context) error type ProbeFunc func(context.Context) error
// a Prober manages a set of probes and keeps track of their results. // a Prober manages a set of probes and keeps track of their results.
type Prober struct { type Prober struct {
@ -101,7 +101,7 @@ func (p *Prober) Expvar() *metrics.Set {
// returns. // returns.
// //
// Registering a probe under an already-registered name panics. // Registering a probe under an already-registered name panics.
func (p *Prober) Run(name string, interval time.Duration, fun Probe) context.CancelFunc { func (p *Prober) Run(name string, interval time.Duration, fun ProbeFunc) context.CancelFunc {
p.mu.Lock() p.mu.Lock()
defer p.mu.Unlock() defer p.mu.Unlock()
ticker := p.registerLocked(name, interval) ticker := p.registerLocked(name, interval)
@ -120,7 +120,7 @@ func (p *Prober) Run(name string, interval time.Duration, fun Probe) context.Can
// probeLoop invokes runProbe on fun every interval. The first probe // probeLoop invokes runProbe on fun every interval. The first probe
// is run after interval. // is run after interval.
func (p *Prober) probeLoop(ctx context.Context, name string, interval time.Duration, tick ticker, fun Probe) { func (p *Prober) probeLoop(ctx context.Context, name string, interval time.Duration, tick ticker, fun ProbeFunc) {
defer func() { defer func() {
p.unregister(name) p.unregister(name)
tick.Stop() tick.Stop()
@ -143,7 +143,7 @@ func (p *Prober) probeLoop(ctx context.Context, name string, interval time.Durat
// fun is invoked with a timeout slightly less than interval, so that // fun is invoked with a timeout slightly less than interval, so that
// the probe either succeeds or fails before the next cycle is // the probe either succeeds or fails before the next cycle is
// scheduled to start. // scheduled to start.
func (p *Prober) runProbe(ctx context.Context, name string, interval time.Duration, fun Probe) { func (p *Prober) runProbe(ctx context.Context, name string, interval time.Duration, fun ProbeFunc) {
start := p.start(name) start := p.start(name)
defer func() { defer func() {
// Prevent a panic within one probe function from killing the // Prevent a panic within one probe function from killing the

@ -12,8 +12,8 @@ import (
// TCP returns a Probe that healthchecks a TCP endpoint. // TCP returns a Probe that healthchecks a TCP endpoint.
// //
// The Probe reports whether it can successfully connect to addr. // The ProbeFunc reports whether it can successfully connect to addr.
func TCP(addr string) Probe { func TCP(addr string) ProbeFunc {
return func(ctx context.Context) error { return func(ctx context.Context) error {
return probeTCP(ctx, addr) return probeTCP(ctx, addr)
} }

@ -14,10 +14,10 @@ import (
// TLS returns a Probe that healthchecks a TLS endpoint. // TLS returns a Probe that healthchecks a TLS endpoint.
// //
// The Probe connects to hostname, does a TLS handshake, verifies that // The ProbeFunc connects to hostname, does a TLS handshake, verifies
// the hostname matches the presented certificate, and that the // that the hostname matches the presented certificate, and that the
// certificate expires in more than 7 days from the probe time. // certificate expires in more than 7 days from the probe time.
func TLS(hostname string) Probe { func TLS(hostname string) ProbeFunc {
return func(ctx context.Context) error { return func(ctx context.Context) error {
return probeTLS(ctx, hostname) return probeTLS(ctx, hostname)
} }

Loading…
Cancel
Save