github.com/juju/juju@v0.0.0-20240327075706-a90865de2538/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 "github.com/juju/worker/v3" 12 "github.com/juju/worker/v3/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 Clock clock.Clock 22 PruneInterval time.Duration 23 NewWorker func(Config) (worker.Worker, error) 24 NewClient func(base.APICaller) Facade 25 Logger Logger 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}, 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 46 facade := config.NewClient(apiCaller) 47 prunerConfig := Config{ 48 Facade: facade, 49 PruneInterval: config.PruneInterval, 50 Clock: config.Clock, 51 Logger: config.Logger, 52 } 53 w, err := config.NewWorker(prunerConfig) 54 if err != nil { 55 return nil, errors.Trace(err) 56 } 57 return w, nil 58 } 59 60 // Validate is called by start to check for bad configuration. 61 func (config ManifoldConfig) Validate() error { 62 if config.APICallerName == "" { 63 return errors.NotValidf("empty APICallerName") 64 } 65 if config.Clock == nil { 66 return errors.NotValidf("nil Clock") 67 } 68 if config.NewWorker == nil { 69 return errors.NotValidf("nil NewWorker") 70 } 71 if config.NewClient == nil { 72 return errors.NotValidf("nil NewClient") 73 } 74 if config.Logger == nil { 75 return errors.NotValidf("nil Logger") 76 } 77 return nil 78 }