github.com/influxdata/influxdb/v2@v2.7.6/telemetry/reporter.go (about) 1 package telemetry 2 3 import ( 4 "context" 5 "time" 6 7 influxlogger "github.com/influxdata/influxdb/v2/logger" 8 "github.com/prometheus/client_golang/prometheus" 9 "go.uber.org/zap" 10 ) 11 12 // Reporter reports telemetry metrics to a prometheus push 13 // gateway every interval. 14 type Reporter struct { 15 Pusher *Pusher 16 log *zap.Logger 17 Interval time.Duration 18 } 19 20 // NewReporter reports telemetry every 24 hours. 21 func NewReporter(log *zap.Logger, g prometheus.Gatherer) *Reporter { 22 return &Reporter{ 23 Pusher: NewPusher(g), 24 log: log, 25 Interval: 24 * time.Hour, 26 } 27 } 28 29 // Report starts periodic telemetry reporting each interval. 30 func (r *Reporter) Report(ctx context.Context) { 31 logger := r.log.With( 32 zap.String("service", "telemetry"), 33 influxlogger.DurationLiteral("interval", r.Interval), 34 ) 35 36 logger.Info("Starting") 37 if err := r.Pusher.Push(ctx); err != nil { 38 logger.Debug("Failure reporting telemetry metrics", zap.Error(err)) 39 } 40 41 ticker := time.NewTicker(r.Interval) 42 defer ticker.Stop() 43 for { 44 select { 45 case <-ticker.C: 46 logger.Debug("Reporting") 47 if err := r.Pusher.Push(ctx); err != nil { 48 logger.Debug("Failure reporting telemetry metrics", zap.Error(err)) 49 } 50 case <-ctx.Done(): 51 logger.Info("Stopping") 52 return 53 } 54 } 55 }