39 lines
922 B
Go
39 lines
922 B
Go
package observer
|
|
|
|
import (
|
|
"strconv"
|
|
"time"
|
|
|
|
blog "github.com/letsencrypt/boulder/log"
|
|
"github.com/letsencrypt/boulder/observer/probers"
|
|
)
|
|
|
|
type monitor struct {
|
|
period time.Duration
|
|
prober probers.Prober
|
|
}
|
|
|
|
// start spins off a 'Prober' goroutine on an interval of `m.period`
|
|
// with a timeout of half `m.period`
|
|
func (m monitor) start(logger blog.Logger) {
|
|
ticker := time.NewTicker(m.period)
|
|
timeout := m.period / 2
|
|
for {
|
|
go func() {
|
|
// Attempt to probe the configured target.
|
|
success, dur := m.prober.Probe(timeout)
|
|
|
|
// Produce metrics to be scraped by Prometheus.
|
|
histObservations.WithLabelValues(
|
|
m.prober.Name(), m.prober.Kind(), strconv.FormatBool(success),
|
|
).Observe(dur.Seconds())
|
|
|
|
// Log the outcome of the probe attempt.
|
|
logger.Infof(
|
|
"kind=[%s] success=[%v] duration=[%f] name=[%s]",
|
|
m.prober.Kind(), success, dur.Seconds(), m.prober.Name())
|
|
}()
|
|
<-ticker.C
|
|
}
|
|
}
|