github.com/cloud-green/juju@v0.0.0-20151002100041-a00291338d3d/worker/logsender/manifold.go (about)

     1  // Copyright 2015 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package logsender
     5  
     6  import (
     7  	"github.com/juju/juju/agent"
     8  	"github.com/juju/juju/feature"
     9  	"github.com/juju/juju/worker"
    10  	"github.com/juju/juju/worker/dependency"
    11  	"github.com/juju/juju/worker/gate"
    12  )
    13  
    14  // ManifoldConfig defines the names of the manifolds on which a
    15  // Manifold will depend.
    16  type ManifoldConfig struct {
    17  	AgentName       string
    18  	APIInfoGateName string
    19  	LogSource       LogRecordCh
    20  }
    21  
    22  // Manifold returns a dependency manifold that runs a logger
    23  // worker, using the resource names defined in the supplied config.
    24  func Manifold(config ManifoldConfig) dependency.Manifold {
    25  	return dependency.Manifold{
    26  		Inputs: []string{
    27  			config.AgentName,
    28  			config.APIInfoGateName,
    29  		},
    30  		Start: func(getResource dependency.GetResourceFunc) (worker.Worker, error) {
    31  			if !feature.IsDbLogEnabled() {
    32  				logger.Warningf("log sender manifold disabled by feature flag")
    33  				return nil, dependency.ErrMissing
    34  			}
    35  
    36  			var gate gate.Waiter
    37  			if err := getResource(config.APIInfoGateName, &gate); err != nil {
    38  				return nil, err
    39  			}
    40  			var agent agent.Agent
    41  			if err := getResource(config.AgentName, &agent); err != nil {
    42  				return nil, err
    43  			}
    44  			return New(config.LogSource, gate, agent), nil
    45  		},
    46  	}
    47  }