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 }