56 lines
1.2 KiB
Go
56 lines
1.2 KiB
Go
package telemetry
|
|
|
|
import (
|
|
"context"
|
|
"time"
|
|
|
|
influxlogger "github.com/influxdata/influxdb/v2/logger"
|
|
"github.com/prometheus/client_golang/prometheus"
|
|
"go.uber.org/zap"
|
|
)
|
|
|
|
// Reporter reports telemetry metrics to a prometheus push
|
|
// gateway every interval.
|
|
type Reporter struct {
|
|
Pusher *Pusher
|
|
log *zap.Logger
|
|
Interval time.Duration
|
|
}
|
|
|
|
// NewReporter reports telemetry every 24 hours.
|
|
func NewReporter(log *zap.Logger, g prometheus.Gatherer) *Reporter {
|
|
return &Reporter{
|
|
Pusher: NewPusher(g),
|
|
log: log,
|
|
Interval: 24 * time.Hour,
|
|
}
|
|
}
|
|
|
|
// Report starts periodic telemetry reporting each interval.
|
|
func (r *Reporter) Report(ctx context.Context) {
|
|
logger := r.log.With(
|
|
zap.String("service", "telemetry"),
|
|
influxlogger.DurationLiteral("interval", r.Interval),
|
|
)
|
|
|
|
logger.Info("Starting")
|
|
if err := r.Pusher.Push(ctx); err != nil {
|
|
logger.Debug("Failure reporting telemetry metrics", zap.Error(err))
|
|
}
|
|
|
|
ticker := time.NewTicker(r.Interval)
|
|
defer ticker.Stop()
|
|
for {
|
|
select {
|
|
case <-ticker.C:
|
|
logger.Debug("Reporting")
|
|
if err := r.Pusher.Push(ctx); err != nil {
|
|
logger.Debug("Failure reporting telemetry metrics", zap.Error(err))
|
|
}
|
|
case <-ctx.Done():
|
|
logger.Info("Stopping")
|
|
return
|
|
}
|
|
}
|
|
}
|