// Manifold returns a collect-metrics manifold. func Manifold(config ManifoldConfig) dependency.Manifold { return dependency.Manifold{ Inputs: []string{ config.AgentName, config.MetricSpoolName, config.CharmDirName, }, Start: func(getResource dependency.GetResourceFunc) (worker.Worker, error) { collector, err := newCollect(config, getResource) if err != nil { return nil, err } return spool.NewPeriodicWorker(collector.Do, collector.period, worker.NewTimer, collector.stop), nil }, } }
// Manifold creates a metric sender manifold. func Manifold(config ManifoldConfig) dependency.Manifold { return dependency.Manifold{ Inputs: []string{ config.AgentName, config.APICallerName, config.MetricSpoolName, }, Start: func(context dependency.Context) (worker.Worker, error) { var apicaller base.APICaller var factory spool.MetricFactory err := context.Get(config.APICallerName, &apicaller) if err != nil { return nil, errors.Trace(err) } err = context.Get(config.MetricSpoolName, &factory) if err != nil { return nil, errors.Trace(err) } var agent agent.Agent if err := context.Get(config.AgentName, &agent); err != nil { return nil, err } agentConfig := agent.CurrentConfig() tag := agentConfig.Tag() unitTag, ok := tag.(names.UnitTag) if !ok { return nil, errors.Errorf("expected a unit tag, got %v", tag) } paths := uniter.NewWorkerPaths(agentConfig.DataDir(), unitTag, "metrics-send") client := newMetricAdderClient(apicaller) s, err := newSender(client, factory, paths.State.BaseDir, unitTag.String()) if err != nil { return nil, errors.Trace(err) } return spool.NewPeriodicWorker(s.Do, period, worker.NewTimer, s.stop), nil }, } }