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 }