github.com/yankunsam/loki/v2@v2.6.3-0.20220817130409-389df5235c27/clients/pkg/promtail/targets/heroku/targetmanager.go (about) 1 package heroku 2 3 import ( 4 "github.com/go-kit/log" 5 "github.com/go-kit/log/level" 6 "github.com/prometheus/client_golang/prometheus" 7 8 "github.com/grafana/loki/clients/pkg/logentry/stages" 9 "github.com/grafana/loki/clients/pkg/promtail/api" 10 "github.com/grafana/loki/clients/pkg/promtail/scrapeconfig" 11 "github.com/grafana/loki/clients/pkg/promtail/targets/target" 12 ) 13 14 type TargetManager struct { 15 logger log.Logger 16 targets map[string]*Target 17 } 18 19 func NewHerokuDrainTargetManager( 20 metrics *Metrics, 21 reg prometheus.Registerer, 22 logger log.Logger, 23 client api.EntryHandler, 24 scrapeConfigs []scrapeconfig.Config) (*TargetManager, error) { 25 26 tm := &TargetManager{ 27 logger: logger, 28 targets: make(map[string]*Target), 29 } 30 31 for _, cfg := range scrapeConfigs { 32 pipeline, err := stages.NewPipeline(log.With(logger, "component", "heroku_drain_pipeline_"+cfg.JobName), cfg.PipelineStages, &cfg.JobName, reg) 33 if err != nil { 34 return nil, err 35 } 36 37 t, err := NewTarget(metrics, logger, pipeline.Wrap(client), cfg.JobName, cfg.HerokuDrainConfig, cfg.RelabelConfigs) 38 if err != nil { 39 return nil, err 40 } 41 42 tm.targets[cfg.JobName] = t 43 } 44 45 return tm, nil 46 } 47 48 func (hm *TargetManager) Ready() bool { 49 for _, t := range hm.targets { 50 if t.Ready() { 51 return true 52 } 53 } 54 return false 55 } 56 57 func (hm *TargetManager) Stop() { 58 for name, t := range hm.targets { 59 if err := t.Stop(); err != nil { 60 level.Error(t.logger).Log("event", "failed to stop heroku drain target", "name", name, "cause", err) 61 } 62 } 63 } 64 65 func (hm *TargetManager) ActiveTargets() map[string][]target.Target { 66 return hm.AllTargets() 67 } 68 69 func (hm *TargetManager) AllTargets() map[string][]target.Target { 70 res := make(map[string][]target.Target, len(hm.targets)) 71 for k, v := range hm.targets { 72 res[k] = []target.Target{v} 73 } 74 return res 75 }