From 19f61607b65087e41ec6bcd389792162c98f2334 Mon Sep 17 00:00:00 2001 From: David Anderson Date: Sat, 19 Mar 2022 18:41:27 -0700 Subject: [PATCH] prober: run all probes once on initial registration. Turns out, it's annoying to have to wait the entire interval before getting any monitorable data, especially for very long interval probes like hourly/daily checks. Signed-off-by: David Anderson --- prober/prober.go | 2 ++ prober/prober_test.go | 15 ++++++++------- 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/prober/prober.go b/prober/prober.go index d4ea1f651..0e053db0b 100644 --- a/prober/prober.go +++ b/prober/prober.go @@ -126,6 +126,8 @@ func (p *Prober) probeLoop(ctx context.Context, name string, interval time.Durat tick.Stop() }() + // Do a first probe right away, so that the prober immediately exports results for everything. + p.runProbe(ctx, name, interval, fun) for { select { case <-tick.Chan(): diff --git a/prober/prober_test.go b/prober/prober_test.go index 76f0264ec..8813bc95f 100644 --- a/prober/prober_test.go +++ b/prober/prober_test.go @@ -19,7 +19,7 @@ import ( ) const ( - probeInterval = 10 * time.Second // So expvars that are integer numbers of seconds change + probeInterval = 8 * time.Second // So expvars that are integer numbers of seconds change halfProbeInterval = probeInterval / 2 quarterProbeInterval = probeInterval / 4 convergenceTimeout = time.Second @@ -58,6 +58,7 @@ func TestProberTiming(t *testing.T) { waitActiveProbes(t, p, 1) + called() notCalled() clk.Advance(probeInterval + halfProbeInterval) called() @@ -106,6 +107,7 @@ func TestProberRun(t *testing.T) { } waitActiveProbes(t, p, startingProbes) + checkCnt(startingProbes) clk.Advance(probeInterval + halfProbeInterval) checkCnt(startingProbes) @@ -135,19 +137,18 @@ func TestExpvar(t *testing.T) { }) waitActiveProbes(t, p, 1) - clk.Advance(probeInterval + halfProbeInterval) - waitExpInt(t, p, "start_secs/probe", int((probeInterval + halfProbeInterval).Seconds())) - waitExpInt(t, p, "end_secs/probe", int((probeInterval + halfProbeInterval).Seconds())) + waitExpInt(t, p, "start_secs/probe", 0) + waitExpInt(t, p, "end_secs/probe", 0) waitExpInt(t, p, "interval_secs/probe", int(probeInterval.Seconds())) waitExpInt(t, p, "latency_millis/probe", int(aFewMillis.Milliseconds())) waitExpInt(t, p, "result/probe", 0) succeed.Set(true) - clk.Advance(probeInterval) + clk.Advance(probeInterval + halfProbeInterval) - waitExpInt(t, p, "start_secs/probe", int((probeInterval + probeInterval + halfProbeInterval).Seconds())) - waitExpInt(t, p, "end_secs/probe", int((probeInterval + probeInterval + halfProbeInterval).Seconds())) + waitExpInt(t, p, "start_secs/probe", int((probeInterval + halfProbeInterval).Seconds())) + waitExpInt(t, p, "end_secs/probe", int((probeInterval + halfProbeInterval).Seconds())) waitExpInt(t, p, "interval_secs/probe", int(probeInterval.Seconds())) waitExpInt(t, p, "latency_millis/probe", int(aFewMillis.Milliseconds())) waitExpInt(t, p, "result/probe", 1)