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  }