github.com/niedbalski/juju@v0.0.0-20190215020005-8ff100488e47/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  	"gopkg.in/juju/worker.v1"
    11  
    12  	"github.com/juju/juju/api/metricsmanager"
    13  	jworker "github.com/juju/juju/worker"
    14  )
    15  
    16  var senderLogger = loggo.GetLogger("juju.worker.metricworker.sender")
    17  
    18  const senderPeriod = 5 * time.Minute
    19  
    20  // NewSender creates a new periodic worker that sends metrics
    21  // to a collection service.
    22  func newSender(client metricsmanager.MetricsManagerClient, notify chan string) worker.Worker {
    23  	f := func(stopCh <-chan struct{}) error {
    24  		err := client.SendMetrics()
    25  		if err != nil {
    26  			senderLogger.Warningf("failed to send metrics %v - will retry later", err)
    27  			return nil
    28  		}
    29  		select {
    30  		case notify <- "senderCalled":
    31  		default:
    32  		}
    33  		return nil
    34  	}
    35  	return jworker.NewPeriodicWorker(f, senderPeriod, jworker.NewTimer)
    36  }