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  }