github.com/niedbalski/juju@v0.0.0-20190215020005-8ff100488e47/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  	"gopkg.in/juju/worker.v1"
     9  
    10  	"github.com/juju/juju/api/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) (*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  	})
    27  	err := runner.StartWorker("sender", func() (worker.Worker, error) {
    28  		return newSender(client, notify), nil
    29  	})
    30  
    31  	if err != nil {
    32  		return nil, errors.Trace(err)
    33  	}
    34  
    35  	err = runner.StartWorker("cleanup", func() (worker.Worker, error) {
    36  		return newCleanup(client, notify), nil
    37  	})
    38  	if err != nil {
    39  		return nil, errors.Trace(err)
    40  	}
    41  	return runner, nil
    42  }