github.com/niedbalski/juju@v0.0.0-20190215020005-8ff100488e47/worker/pruner/manifold.go (about) 1 // Copyright 2015 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package pruner 5 6 import ( 7 "time" 8 9 "github.com/juju/clock" 10 "github.com/juju/errors" 11 "gopkg.in/juju/worker.v1" 12 "gopkg.in/juju/worker.v1/dependency" 13 14 "github.com/juju/juju/api/base" 15 ) 16 17 // ManifoldConfig describes the resources and configuration on which the 18 // statushistorypruner worker depends. 19 type ManifoldConfig struct { 20 APICallerName string 21 EnvironName string 22 ClockName string 23 PruneInterval time.Duration 24 NewWorker func(Config) (worker.Worker, error) 25 NewFacade func(base.APICaller) Facade 26 } 27 28 // Manifold returns a Manifold that encapsulates the statushistorypruner worker. 29 func Manifold(config ManifoldConfig) dependency.Manifold { 30 return dependency.Manifold{ 31 Inputs: []string{config.APICallerName, config.EnvironName, config.ClockName}, 32 Start: config.start, 33 } 34 } 35 36 // start is a StartFunc for a Worker manifold. 37 func (config ManifoldConfig) start(context dependency.Context) (worker.Worker, error) { 38 if err := config.Validate(); err != nil { 39 return nil, errors.Trace(err) 40 } 41 var apiCaller base.APICaller 42 if err := context.Get(config.APICallerName, &apiCaller); err != nil { 43 return nil, errors.Trace(err) 44 } 45 var clock clock.Clock 46 if err := context.Get(config.ClockName, &clock); err != nil { 47 return nil, errors.Trace(err) 48 } 49 50 facade := config.NewFacade(apiCaller) 51 prunerConfig := Config{ 52 Facade: facade, 53 PruneInterval: config.PruneInterval, 54 Clock: clock, 55 } 56 w, err := config.NewWorker(prunerConfig) 57 if err != nil { 58 return nil, errors.Trace(err) 59 } 60 return w, nil 61 } 62 63 // Validate is called by start to check for bad configuration. 64 func (config ManifoldConfig) Validate() error { 65 if config.APICallerName == "" { 66 return errors.NotValidf("empty APICallerName") 67 } 68 if config.EnvironName == "" { 69 return errors.NotValidf("empty EnvironName") 70 } 71 if config.ClockName == "" { 72 return errors.NotValidf("empty ClockName") 73 } 74 if config.NewWorker == nil { 75 return errors.NotValidf("nil NewWorker") 76 } 77 if config.NewFacade == nil { 78 return errors.NotValidf("nil NewFacade") 79 } 80 return nil 81 }