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