github.com/juju/juju@v0.0.0-20240327075706-a90865de2538/worker/metricworker/metricmanager.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  	"github.com/juju/errors"
     8  	"github.com/juju/worker/v3"
     9  
    10  	"github.com/juju/juju/api/controller/metricsmanager"
    11  	jworker "github.com/juju/juju/worker"
    12  )
    13  
    14  // NewMetricsManager creates a runner that will run the metricsmanagement workers.
    15  func newMetricsManager(client metricsmanager.MetricsManagerClient, notify chan string, logger Logger) (*worker.Runner, error) {
    16  	// TODO(fwereade): break this out into separate manifolds (with their own facades).
    17  
    18  	// Periodic workers automatically retry so none should return an error. If they do
    19  	// it's ok to restart them individually.
    20  	isFatal := func(error) bool {
    21  		return false
    22  	}
    23  	runner := worker.NewRunner(worker.RunnerParams{
    24  		IsFatal:      isFatal,
    25  		RestartDelay: jworker.RestartDelay,
    26  		Logger:       logger,
    27  	})
    28  	err := runner.StartWorker("sender", func() (worker.Worker, error) {
    29  		return newSender(client, notify, logger), nil
    30  	})
    31  
    32  	if err != nil {
    33  		return nil, errors.Trace(err)
    34  	}
    35  
    36  	err = runner.StartWorker("cleanup", func() (worker.Worker, error) {
    37  		return newCleanup(client, notify, logger), nil
    38  	})
    39  	if err != nil {
    40  		return nil, errors.Trace(err)
    41  	}
    42  	return runner, nil
    43  }