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
 | 
						|
	}
 | 
						|
}
 |