github.com/niedbalski/juju@v0.0.0-20190215020005-8ff100488e47/worker/logger/manifold.go (about) 1 // Copyright 2015 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package logger 5 6 import ( 7 "gopkg.in/juju/worker.v1" 8 "gopkg.in/juju/worker.v1/dependency" 9 10 "github.com/juju/juju/agent" 11 "github.com/juju/juju/api/base" 12 "github.com/juju/juju/api/logger" 13 ) 14 15 // ManifoldConfig defines the names of the manifolds on which a 16 // Manifold will depend. 17 type ManifoldConfig struct { 18 AgentName string 19 APICallerName string 20 UpdateAgentFunc func(string) error 21 } 22 23 // Manifold returns a dependency manifold that runs a logger 24 // worker, using the resource names defined in the supplied config. 25 func Manifold(config ManifoldConfig) dependency.Manifold { 26 return dependency.Manifold{ 27 Inputs: []string{ 28 config.AgentName, 29 config.APICallerName, 30 }, 31 Start: func(context dependency.Context) (worker.Worker, error) { 32 var a agent.Agent 33 if err := context.Get(config.AgentName, &a); err != nil { 34 return nil, err 35 } 36 currentConfig := a.CurrentConfig() 37 loggingOverride := currentConfig.Value(agent.LoggingOverride) 38 39 var apiCaller base.APICaller 40 if err := context.Get(config.APICallerName, &apiCaller); err != nil { 41 return nil, err 42 } 43 44 loggerFacade := logger.NewState(apiCaller) 45 return NewLogger(loggerFacade, currentConfig.Tag(), loggingOverride, config.UpdateAgentFunc) 46 }, 47 } 48 }