github.com/yankunsam/loki/v2@v2.6.3-0.20220817130409-389df5235c27/clients/pkg/promtail/targets/cloudflare/targetmanager.go (about) 1 package cloudflare 2 3 import ( 4 "github.com/go-kit/log" 5 6 "github.com/grafana/loki/clients/pkg/logentry/stages" 7 "github.com/grafana/loki/clients/pkg/promtail/api" 8 "github.com/grafana/loki/clients/pkg/promtail/positions" 9 "github.com/grafana/loki/clients/pkg/promtail/scrapeconfig" 10 "github.com/grafana/loki/clients/pkg/promtail/targets/target" 11 ) 12 13 // TargetManager manages a series of cloudflare targets. 14 type TargetManager struct { 15 logger log.Logger 16 targets map[string]*Target 17 } 18 19 // NewTargetManager creates a new cloudflare target managers. 20 func NewTargetManager( 21 metrics *Metrics, 22 logger log.Logger, 23 positions positions.Positions, 24 pushClient api.EntryHandler, 25 scrapeConfigs []scrapeconfig.Config, 26 ) (*TargetManager, error) { 27 tm := &TargetManager{ 28 logger: logger, 29 targets: make(map[string]*Target), 30 } 31 for _, cfg := range scrapeConfigs { 32 if cfg.CloudflareConfig == nil { 33 continue 34 } 35 pipeline, err := stages.NewPipeline(log.With(logger, "component", "cloudflare_pipeline"), cfg.PipelineStages, &cfg.JobName, metrics.reg) 36 if err != nil { 37 return nil, err 38 } 39 t, err := NewTarget(metrics, log.With(logger, "target", "cloudflare"), pipeline.Wrap(pushClient), positions, cfg.CloudflareConfig) 40 if err != nil { 41 return nil, err 42 } 43 tm.targets[cfg.JobName] = t 44 } 45 46 return tm, nil 47 } 48 49 // Ready returns true if at least one cloudflare target is active. 50 func (tm *TargetManager) Ready() bool { 51 for _, t := range tm.targets { 52 if t.Ready() { 53 return true 54 } 55 } 56 return false 57 } 58 59 func (tm *TargetManager) Stop() { 60 for _, t := range tm.targets { 61 t.Stop() 62 } 63 } 64 65 func (tm *TargetManager) ActiveTargets() map[string][]target.Target { 66 result := make(map[string][]target.Target, len(tm.targets)) 67 for k, v := range tm.targets { 68 if v.Ready() { 69 result[k] = []target.Target{v} 70 } 71 } 72 return result 73 } 74 75 func (tm *TargetManager) AllTargets() map[string][]target.Target { 76 result := make(map[string][]target.Target, len(tm.targets)) 77 for k, v := range tm.targets { 78 result[k] = []target.Target{v} 79 } 80 return result 81 }