github.com/yankunsam/loki/v2@v2.6.3-0.20220817130409-389df5235c27/clients/pkg/promtail/targets/gelf/gelftargetmanager.go (about)

     1  package gelf
     2  
     3  import (
     4  	"github.com/go-kit/log"
     5  	"github.com/prometheus/client_golang/prometheus"
     6  
     7  	"github.com/grafana/loki/clients/pkg/logentry/stages"
     8  	"github.com/grafana/loki/clients/pkg/promtail/api"
     9  	"github.com/grafana/loki/clients/pkg/promtail/scrapeconfig"
    10  	"github.com/grafana/loki/clients/pkg/promtail/targets/target"
    11  )
    12  
    13  // TargetManager manages a series of Gelf Targets.
    14  type TargetManager struct {
    15  	logger  log.Logger
    16  	targets map[string]*Target
    17  }
    18  
    19  // NewTargetManager creates a new Gelf TargetManager.
    20  func NewTargetManager(
    21  	metrics *Metrics,
    22  	logger log.Logger,
    23  	client api.EntryHandler,
    24  	scrapeConfigs []scrapeconfig.Config,
    25  ) (*TargetManager, error) {
    26  	reg := metrics.reg
    27  	if reg == nil {
    28  		reg = prometheus.DefaultRegisterer
    29  	}
    30  
    31  	tm := &TargetManager{
    32  		logger:  logger,
    33  		targets: make(map[string]*Target),
    34  	}
    35  
    36  	for _, cfg := range scrapeConfigs {
    37  		pipeline, err := stages.NewPipeline(log.With(logger, "component", "gelf_pipeline"), cfg.PipelineStages, &cfg.JobName, reg)
    38  		if err != nil {
    39  			return nil, err
    40  		}
    41  
    42  		t, err := NewTarget(metrics, logger, pipeline.Wrap(client), cfg.RelabelConfigs, cfg.GelfConfig)
    43  		if err != nil {
    44  			return nil, err
    45  		}
    46  
    47  		tm.targets[cfg.JobName] = t
    48  	}
    49  
    50  	return tm, nil
    51  }
    52  
    53  // Ready returns true if at least one GelfTarget is also ready.
    54  func (tm *TargetManager) Ready() bool {
    55  	for _, t := range tm.targets {
    56  		if t.Ready() {
    57  			return true
    58  		}
    59  	}
    60  	return false
    61  }
    62  
    63  // Stop stops the GelfTargetManager and all of its GelfTargets.
    64  func (tm *TargetManager) Stop() {
    65  	for _, t := range tm.targets {
    66  		t.Stop()
    67  	}
    68  }
    69  
    70  // ActiveTargets returns the list of GelfTargets where Gelf data
    71  // is being read. ActiveTargets is an alias to AllTargets as
    72  // GelfTargets cannot be deactivated, only stopped.
    73  func (tm *TargetManager) ActiveTargets() map[string][]target.Target {
    74  	return tm.AllTargets()
    75  }
    76  
    77  // AllTargets returns the list of all targets where gelf data
    78  // is currently being read.
    79  func (tm *TargetManager) AllTargets() map[string][]target.Target {
    80  	result := make(map[string][]target.Target, len(tm.targets))
    81  	for k, v := range tm.targets {
    82  		result[k] = []target.Target{v}
    83  	}
    84  	return result
    85  }