github.com/makyo/juju@v0.0.0-20160425123129-2608902037e9/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 9 "github.com/juju/juju/api/metricsmanager" 10 "github.com/juju/juju/worker" 11 ) 12 13 // NewMetricsManager creates a runner that will run the metricsmanagement workers. 14 func NewMetricsManager(client metricsmanager.MetricsManagerClient) (worker.Runner, error) { 15 // TODO(fwereade): break this out into separate manifolds (with their own facades). 16 17 // Periodic workers automatically retry so none should return an error. If they do 18 // it's ok to restart them individually. 19 isFatal := func(error) bool { 20 return false 21 } 22 // All errors are equal 23 moreImportant := func(error, error) bool { 24 return false 25 } 26 runner := worker.NewRunner(isFatal, moreImportant, worker.RestartDelay) 27 err := runner.StartWorker("sender", func() (worker.Worker, error) { 28 return NewSender(client), nil 29 }) 30 31 if err != nil { 32 return nil, errors.Trace(err) 33 } 34 err = runner.StartWorker("cleanup", func() (worker.Worker, error) { 35 return NewCleanup(client), nil 36 }) 37 if err != nil { 38 return nil, errors.Trace(err) 39 } 40 return runner, nil 41 }