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 }