github.com/yankunsam/loki/v2@v2.6.3-0.20220817130409-389df5235c27/clients/pkg/promtail/targets/journal/journaltargetmanager_linux.go (about) 1 //go:build cgo 2 // +build cgo 3 4 package journal 5 6 import ( 7 "github.com/go-kit/log" 8 "github.com/go-kit/log/level" 9 10 "github.com/grafana/loki/clients/pkg/logentry/stages" 11 "github.com/grafana/loki/clients/pkg/promtail/api" 12 "github.com/grafana/loki/clients/pkg/promtail/positions" 13 "github.com/grafana/loki/clients/pkg/promtail/scrapeconfig" 14 "github.com/grafana/loki/clients/pkg/promtail/targets/target" 15 ) 16 17 // JournalTargetManager manages a series of JournalTargets. 18 // nolint 19 type JournalTargetManager struct { 20 logger log.Logger 21 targets map[string]*JournalTarget 22 23 metrics *Metrics 24 } 25 26 // NewJournalTargetManager creates a new JournalTargetManager. 27 func NewJournalTargetManager( 28 metrics *Metrics, 29 logger log.Logger, 30 positions positions.Positions, 31 client api.EntryHandler, 32 scrapeConfigs []scrapeconfig.Config, 33 ) (*JournalTargetManager, error) { 34 tm := &JournalTargetManager{ 35 logger: logger, 36 targets: make(map[string]*JournalTarget), 37 metrics: metrics, 38 } 39 40 for _, cfg := range scrapeConfigs { 41 if cfg.JournalConfig == nil { 42 continue 43 } 44 45 pipeline, err := stages.NewPipeline(log.With(logger, "component", "journal_pipeline"), cfg.PipelineStages, &cfg.JobName, metrics.reg) 46 if err != nil { 47 return nil, err 48 } 49 50 t, err := NewJournalTarget( 51 tm.metrics, 52 logger, 53 pipeline.Wrap(client), 54 positions, 55 cfg.JobName, 56 cfg.RelabelConfigs, 57 cfg.JournalConfig, 58 ) 59 if err != nil { 60 return nil, err 61 } 62 63 tm.targets[cfg.JobName] = t 64 } 65 66 return tm, nil 67 } 68 69 // Ready returns true if at least one JournalTarget is also ready. 70 func (tm *JournalTargetManager) Ready() bool { 71 for _, t := range tm.targets { 72 if t.Ready() { 73 return true 74 } 75 } 76 return false 77 } 78 79 // Stop stops the JournalTargetManager and all of its JournalTargets. 80 func (tm *JournalTargetManager) Stop() { 81 for _, t := range tm.targets { 82 if err := t.Stop(); err != nil { 83 level.Error(t.logger).Log("msg", "error stopping JournalTarget", "err", err.Error()) 84 } 85 } 86 } 87 88 // ActiveTargets returns the list of JournalTargets where journal data 89 // is being read. ActiveTargets is an alias to AllTargets as 90 // JournalTargets cannot be deactivated, only stopped. 91 func (tm *JournalTargetManager) ActiveTargets() map[string][]target.Target { 92 return tm.AllTargets() 93 } 94 95 // AllTargets returns the list of all targets where journal data 96 // is currently being read. 97 func (tm *JournalTargetManager) AllTargets() map[string][]target.Target { 98 result := make(map[string][]target.Target, len(tm.targets)) 99 for k, v := range tm.targets { 100 result[k] = []target.Target{v} 101 } 102 return result 103 }