github.com/makyo/juju@v0.0.0-20160425123129-2608902037e9/worker/metricworker/sender.go (about) 1 // Copyright 2014 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package metricworker 5 6 import ( 7 "time" 8 9 "github.com/juju/loggo" 10 11 "github.com/juju/juju/api/metricsmanager" 12 "github.com/juju/juju/worker" 13 ) 14 15 var ( 16 senderLogger = loggo.GetLogger("juju.worker.metricworker.sender") 17 ) 18 19 const ( 20 senderPeriod = 5 * time.Minute 21 ) 22 23 // NewSender creates a new periodic worker that sends metrics 24 // to a collection service. 25 func NewSender(client metricsmanager.MetricsManagerClient) worker.Worker { 26 f := func(stopCh <-chan struct{}) error { 27 err := client.SendMetrics() 28 if err != nil { 29 senderLogger.Warningf("failed to send metrics %v - will retry later", err) 30 return nil 31 } 32 select { 33 case notify <- "senderCalled": 34 default: 35 } 36 return nil 37 } 38 return worker.NewPeriodicWorker(f, senderPeriod, worker.NewTimer) 39 }