Package statskeeper implements utilities that are shared across multiple probe types.



This section is empty.


This section is empty.


func StatsKeeper

func StatsKeeper(ctx context.Context, ptype, name string, opts *options.Options, targetsFunc func() []endpoint.Endpoint, resultsChan <-chan ProbeResult, dataChan chan<- *metrics.EventMetrics)

StatsKeeper manages and outputs probe results.

Typical StatsKeeper usage pattern is that the probes start a StatsKeeper goroutine in the beginning. StatsKeeper goroutine manages access to the per-target cumulative metrics. It listens on an input channel for probe results and updates the metrics whenever a new probe result is obtained. It exports aggregate probe statistics to the output channel, at intervals controlled by a Ticker. These two operations are mutually exclusive. This is the only goroutine that accesses the metrics. StatsKeeper runs indefinitely, across multiple probe runs, and should not stop during normal program execution.

If we get a new result on resultsChan, update the probe statistics. If we get a timer tick on doExport, export probe data for all targets. If context is canceled, return.

Note that StatsKeeper calls a function (targetsFunc) to get the list of the targets for exporting results, instead of getting a static list in the arguments. We do that as the list of targets is usually dynamic and is updated on a regular basis.


type ProbeResult

type ProbeResult interface {
	// Metrics converts ProbeResult into a map of the metrics that is suitable for
	// working with metrics.EventMetrics.
	Metrics() *metrics.EventMetrics

	// Target returns the target associated with the probe result.
	Target() string

ProbeResult represents results of a probe run.

Source Files