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