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

     1  // Copyright 2015 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package sender
     5  
     6  import (
     7  	"time"
     8  
     9  	"github.com/juju/errors"
    10  	"github.com/juju/loggo"
    11  
    12  	"github.com/juju/juju/api/base"
    13  	"github.com/juju/juju/api/metricsadder"
    14  	"github.com/juju/juju/worker"
    15  	"github.com/juju/juju/worker/dependency"
    16  	"github.com/juju/juju/worker/metrics/spool"
    17  )
    18  
    19  var (
    20  	logger               = loggo.GetLogger("juju.worker.metrics.sender")
    21  	newMetricAdderClient = func(apiCaller base.APICaller) metricsadder.MetricsAdderClient {
    22  		return metricsadder.NewClient(apiCaller)
    23  	}
    24  )
    25  
    26  const (
    27  	period = time.Minute * 5
    28  )
    29  
    30  // ManifoldConfig defines configuration of a metric sender manifold.
    31  type ManifoldConfig struct {
    32  	APICallerName   string
    33  	MetricSpoolName string
    34  }
    35  
    36  // Manifold creates a metric sender manifold.
    37  func Manifold(config ManifoldConfig) dependency.Manifold {
    38  	return dependency.Manifold{
    39  		Inputs: []string{
    40  			config.APICallerName,
    41  			config.MetricSpoolName,
    42  		},
    43  		Start: func(getResource dependency.GetResourceFunc) (worker.Worker, error) {
    44  			var apicaller base.APICaller
    45  			var factory spool.MetricFactory
    46  			err := getResource(config.APICallerName, &apicaller)
    47  			if err != nil {
    48  				return nil, errors.Trace(err)
    49  			}
    50  			err = getResource(config.MetricSpoolName, &factory)
    51  			if err != nil {
    52  				return nil, errors.Trace(err)
    53  			}
    54  
    55  			client := newMetricAdderClient(apicaller)
    56  
    57  			s := newSender(client, factory)
    58  			return worker.NewPeriodicWorker(s.Do, period, worker.NewTimer), nil
    59  		},
    60  	}
    61  }