github.com/yankunsam/loki/v2@v2.6.3-0.20220817130409-389df5235c27/clients/pkg/promtail/targets/gelf/gelftargetmanager.go (about) 1 package gelf 2 3 import ( 4 "github.com/go-kit/log" 5 "github.com/prometheus/client_golang/prometheus" 6 7 "github.com/grafana/loki/clients/pkg/logentry/stages" 8 "github.com/grafana/loki/clients/pkg/promtail/api" 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 Gelf Targets. 14 type TargetManager struct { 15 logger log.Logger 16 targets map[string]*Target 17 } 18 19 // NewTargetManager creates a new Gelf TargetManager. 20 func NewTargetManager( 21 metrics *Metrics, 22 logger log.Logger, 23 client api.EntryHandler, 24 scrapeConfigs []scrapeconfig.Config, 25 ) (*TargetManager, error) { 26 reg := metrics.reg 27 if reg == nil { 28 reg = prometheus.DefaultRegisterer 29 } 30 31 tm := &TargetManager{ 32 logger: logger, 33 targets: make(map[string]*Target), 34 } 35 36 for _, cfg := range scrapeConfigs { 37 pipeline, err := stages.NewPipeline(log.With(logger, "component", "gelf_pipeline"), cfg.PipelineStages, &cfg.JobName, reg) 38 if err != nil { 39 return nil, err 40 } 41 42 t, err := NewTarget(metrics, logger, pipeline.Wrap(client), cfg.RelabelConfigs, cfg.GelfConfig) 43 if err != nil { 44 return nil, err 45 } 46 47 tm.targets[cfg.JobName] = t 48 } 49 50 return tm, nil 51 } 52 53 // Ready returns true if at least one GelfTarget is also ready. 54 func (tm *TargetManager) Ready() bool { 55 for _, t := range tm.targets { 56 if t.Ready() { 57 return true 58 } 59 } 60 return false 61 } 62 63 // Stop stops the GelfTargetManager and all of its GelfTargets. 64 func (tm *TargetManager) Stop() { 65 for _, t := range tm.targets { 66 t.Stop() 67 } 68 } 69 70 // ActiveTargets returns the list of GelfTargets where Gelf data 71 // is being read. ActiveTargets is an alias to AllTargets as 72 // GelfTargets cannot be deactivated, only stopped. 73 func (tm *TargetManager) ActiveTargets() map[string][]target.Target { 74 return tm.AllTargets() 75 } 76 77 // AllTargets returns the list of all targets where gelf data 78 // is currently being read. 79 func (tm *TargetManager) AllTargets() map[string][]target.Target { 80 result := make(map[string][]target.Target, len(tm.targets)) 81 for k, v := range tm.targets { 82 result[k] = []target.Target{v} 83 } 84 return result 85 }