github.com/niedbalski/juju@v0.0.0-20190215020005-8ff100488e47/worker/cleaner/manifold.go (about)

     1  // Copyright 2015 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package cleaner
     5  
     6  import (
     7  	"github.com/juju/clock"
     8  	"github.com/juju/errors"
     9  	"gopkg.in/juju/worker.v1"
    10  	"gopkg.in/juju/worker.v1/dependency"
    11  
    12  	"github.com/juju/juju/api/base"
    13  	"github.com/juju/juju/api/cleaner"
    14  )
    15  
    16  // ManifoldConfig describes the resources used by the cleanup worker.
    17  type ManifoldConfig struct {
    18  	APICallerName string
    19  	ClockName     string
    20  }
    21  
    22  // Validate is called by start to check for bad configuration.
    23  func (config ManifoldConfig) Validate() error {
    24  	if config.APICallerName == "" {
    25  		return errors.NotValidf("empty APICallerName")
    26  	}
    27  	if config.ClockName == "" {
    28  		return errors.NotValidf("empty ClockName")
    29  	}
    30  	return nil
    31  }
    32  
    33  // Manifold returns a Manifold that encapsulates the cleanup worker.
    34  func Manifold(config ManifoldConfig) dependency.Manifold {
    35  	return dependency.Manifold{
    36  		Inputs: []string{config.APICallerName, config.ClockName},
    37  		Start:  config.start,
    38  	}
    39  }
    40  
    41  // start is a StartFunc for a Worker manifold.
    42  func (config ManifoldConfig) start(context dependency.Context) (worker.Worker, error) {
    43  	if err := config.Validate(); err != nil {
    44  		return nil, errors.Trace(err)
    45  	}
    46  	var apiCaller base.APICaller
    47  	if err := context.Get(config.APICallerName, &apiCaller); err != nil {
    48  		return nil, errors.Trace(err)
    49  	}
    50  	var clock clock.Clock
    51  	if err := context.Get(config.ClockName, &clock); err != nil {
    52  		return nil, errors.Trace(err)
    53  	}
    54  	api := cleaner.NewAPI(apiCaller)
    55  	w, err := NewCleaner(api, clock)
    56  	if err != nil {
    57  		return nil, errors.Trace(err)
    58  	}
    59  	return w, nil
    60  }