github.com/yankunsam/loki/v2@v2.6.3-0.20220817130409-389df5235c27/clients/pkg/promtail/targets/gcplog/targetmanager.go (about) 1 package gcplog 2 3 import ( 4 "fmt" 5 6 "github.com/go-kit/log" 7 "github.com/go-kit/log/level" 8 9 "github.com/grafana/loki/clients/pkg/logentry/stages" 10 "github.com/grafana/loki/clients/pkg/promtail/api" 11 "github.com/grafana/loki/clients/pkg/promtail/scrapeconfig" 12 "github.com/grafana/loki/clients/pkg/promtail/targets/target" 13 ) 14 15 // nolint:revive 16 type GcplogTargetManager struct { 17 logger log.Logger 18 targets map[string]Target 19 } 20 21 func NewGcplogTargetManager( 22 metrics *Metrics, 23 logger log.Logger, 24 client api.EntryHandler, 25 scrape []scrapeconfig.Config, 26 ) (*GcplogTargetManager, error) { 27 tm := &GcplogTargetManager{ 28 logger: logger, 29 targets: make(map[string]Target), 30 } 31 32 for _, cf := range scrape { 33 if cf.GcplogConfig == nil { 34 continue 35 } 36 pipeline, err := stages.NewPipeline(log.With(logger, "component", "pubsub_pipeline"), cf.PipelineStages, &cf.JobName, metrics.reg) 37 if err != nil { 38 return nil, err 39 } 40 41 t, err := NewGCPLogTarget(metrics, logger, pipeline.Wrap(client), cf.RelabelConfigs, cf.JobName, cf.GcplogConfig) 42 if err != nil { 43 return nil, fmt.Errorf("failed to create pubsub target: %w", err) 44 } 45 tm.targets[cf.JobName] = t 46 } 47 48 return tm, nil 49 } 50 51 func (tm *GcplogTargetManager) Ready() bool { 52 for _, t := range tm.targets { 53 if t.Ready() { 54 return true 55 } 56 } 57 return false 58 } 59 60 func (tm *GcplogTargetManager) Stop() { 61 for name, t := range tm.targets { 62 if err := t.Stop(); err != nil { 63 level.Error(tm.logger).Log("event", "failed to stop pubsub target", "name", name, "cause", err) 64 } 65 } 66 } 67 68 func (tm *GcplogTargetManager) ActiveTargets() map[string][]target.Target { 69 // TODO(kavi): if someway to check if specific topic is active and store the state on the target struct? 70 return tm.AllTargets() 71 } 72 73 func (tm *GcplogTargetManager) AllTargets() map[string][]target.Target { 74 res := make(map[string][]target.Target, len(tm.targets)) 75 for k, v := range tm.targets { 76 res[k] = []target.Target{v} 77 } 78 return res 79 }