1
// Copyright 2015 Canonical Ltd.
2
// Licensed under the AGPLv3, see LICENCE file for details.
9
"github.com/juju/errors"
10
"github.com/juju/loggo"
11
"gopkg.in/juju/names.v2"
13
"github.com/juju/juju/agent"
14
"github.com/juju/juju/api/base"
15
"github.com/juju/juju/api/metricsadder"
16
"github.com/juju/juju/worker"
17
"github.com/juju/juju/worker/dependency"
18
"github.com/juju/juju/worker/metrics/spool"
19
"github.com/juju/juju/worker/uniter"
23
logger = loggo.GetLogger("juju.worker.metrics.sender")
24
newMetricAdderClient = func(apiCaller base.APICaller) metricsadder.MetricsAdderClient {
25
return metricsadder.NewClient(apiCaller)
30
period = time.Minute * 5
33
// ManifoldConfig defines configuration of a metric sender manifold.
34
type ManifoldConfig struct {
37
MetricSpoolName string
40
// Manifold creates a metric sender manifold.
41
func Manifold(config ManifoldConfig) dependency.Manifold {
42
return dependency.Manifold{
46
config.MetricSpoolName,
48
Start: func(context dependency.Context) (worker.Worker, error) {
49
var apicaller base.APICaller
50
var factory spool.MetricFactory
51
err := context.Get(config.APICallerName, &apicaller)
53
return nil, errors.Trace(err)
55
err = context.Get(config.MetricSpoolName, &factory)
57
return nil, errors.Trace(err)
60
if err := context.Get(config.AgentName, &agent); err != nil {
63
agentConfig := agent.CurrentConfig()
64
tag := agentConfig.Tag()
65
unitTag, ok := tag.(names.UnitTag)
67
return nil, errors.Errorf("expected a unit tag, got %v", tag)
69
paths := uniter.NewWorkerPaths(agentConfig.DataDir(), unitTag, "metrics-send")
71
client := newMetricAdderClient(apicaller)
73
s, err := newSender(client, factory, paths.State.BaseDir, unitTag.String())
75
return nil, errors.Trace(err)
77
return spool.NewPeriodicWorker(s.Do, period, worker.NewTimer, s.stop), nil