github.com/yankunsam/loki/v2@v2.6.3-0.20220817130409-389df5235c27/clients/pkg/promtail/targets/windows/targetmanager_windows.go (about) 1 //go:build windows 2 // +build windows 3 4 package windows 5 6 import ( 7 "github.com/go-kit/log" 8 "github.com/go-kit/log/level" 9 "github.com/prometheus/client_golang/prometheus" 10 11 "github.com/grafana/loki/clients/pkg/logentry/stages" 12 "github.com/grafana/loki/clients/pkg/promtail/api" 13 "github.com/grafana/loki/clients/pkg/promtail/scrapeconfig" 14 "github.com/grafana/loki/clients/pkg/promtail/targets/target" 15 ) 16 17 // TargetManager manages a series of windows event targets. 18 type TargetManager struct { 19 logger log.Logger 20 targets map[string]*Target 21 } 22 23 // NewTargetManager creates a new Windows managers. 24 func NewTargetManager( 25 reg prometheus.Registerer, 26 logger log.Logger, 27 client api.EntryHandler, 28 scrapeConfigs []scrapeconfig.Config, 29 ) (*TargetManager, error) { 30 tm := &TargetManager{ 31 logger: logger, 32 targets: make(map[string]*Target), 33 } 34 35 for _, cfg := range scrapeConfigs { 36 pipeline, err := stages.NewPipeline(log.With(logger, "component", "windows_pipeline"), cfg.PipelineStages, &cfg.JobName, reg) 37 if err != nil { 38 return nil, err 39 } 40 41 t, err := New(logger, pipeline.Wrap(client), cfg.RelabelConfigs, cfg.WindowsConfig) 42 if err != nil { 43 return nil, err 44 } 45 46 tm.targets[cfg.JobName] = t 47 } 48 49 return tm, nil 50 } 51 52 // Ready returns true if at least one Windows target is also ready. 53 func (tm *TargetManager) Ready() bool { 54 for _, t := range tm.targets { 55 if t.Ready() { 56 return true 57 } 58 } 59 return false 60 } 61 62 // Stop stops the Windows target manager and all of its targets. 63 func (tm *TargetManager) Stop() { 64 for _, t := range tm.targets { 65 if err := t.Stop(); err != nil { 66 level.Error(t.logger).Log("msg", "error stopping windows target", "err", err.Error()) 67 } 68 } 69 } 70 71 // ActiveTargets returns the list of active Windows targets. 72 func (tm *TargetManager) ActiveTargets() map[string][]target.Target { 73 result := make(map[string][]target.Target, len(tm.targets)) 74 for k, v := range tm.targets { 75 if v.Ready() { 76 result[k] = []target.Target{v} 77 } 78 } 79 return result 80 } 81 82 // AllTargets returns the list of all targets. 83 func (tm *TargetManager) 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 }