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

     1  package heroku
     2  
     3  import (
     4  	"github.com/go-kit/log"
     5  	"github.com/go-kit/log/level"
     6  	"github.com/prometheus/client_golang/prometheus"
     7  
     8  	"github.com/grafana/loki/clients/pkg/logentry/stages"
     9  	"github.com/grafana/loki/clients/pkg/promtail/api"
    10  	"github.com/grafana/loki/clients/pkg/promtail/scrapeconfig"
    11  	"github.com/grafana/loki/clients/pkg/promtail/targets/target"
    12  )
    13  
    14  type TargetManager struct {
    15  	logger  log.Logger
    16  	targets map[string]*Target
    17  }
    18  
    19  func NewHerokuDrainTargetManager(
    20  	metrics *Metrics,
    21  	reg prometheus.Registerer,
    22  	logger log.Logger,
    23  	client api.EntryHandler,
    24  	scrapeConfigs []scrapeconfig.Config) (*TargetManager, error) {
    25  
    26  	tm := &TargetManager{
    27  		logger:  logger,
    28  		targets: make(map[string]*Target),
    29  	}
    30  
    31  	for _, cfg := range scrapeConfigs {
    32  		pipeline, err := stages.NewPipeline(log.With(logger, "component", "heroku_drain_pipeline_"+cfg.JobName), cfg.PipelineStages, &cfg.JobName, reg)
    33  		if err != nil {
    34  			return nil, err
    35  		}
    36  
    37  		t, err := NewTarget(metrics, logger, pipeline.Wrap(client), cfg.JobName, cfg.HerokuDrainConfig, cfg.RelabelConfigs)
    38  		if err != nil {
    39  			return nil, err
    40  		}
    41  
    42  		tm.targets[cfg.JobName] = t
    43  	}
    44  
    45  	return tm, nil
    46  }
    47  
    48  func (hm *TargetManager) Ready() bool {
    49  	for _, t := range hm.targets {
    50  		if t.Ready() {
    51  			return true
    52  		}
    53  	}
    54  	return false
    55  }
    56  
    57  func (hm *TargetManager) Stop() {
    58  	for name, t := range hm.targets {
    59  		if err := t.Stop(); err != nil {
    60  			level.Error(t.logger).Log("event", "failed to stop heroku drain target", "name", name, "cause", err)
    61  		}
    62  	}
    63  }
    64  
    65  func (hm *TargetManager) ActiveTargets() map[string][]target.Target {
    66  	return hm.AllTargets()
    67  }
    68  
    69  func (hm *TargetManager) AllTargets() map[string][]target.Target {
    70  	res := make(map[string][]target.Target, len(hm.targets))
    71  	for k, v := range hm.targets {
    72  		res[k] = []target.Target{v}
    73  	}
    74  	return res
    75  }