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

     1  package cloudflare
     2  
     3  import (
     4  	"github.com/go-kit/log"
     5  
     6  	"github.com/grafana/loki/clients/pkg/logentry/stages"
     7  	"github.com/grafana/loki/clients/pkg/promtail/api"
     8  	"github.com/grafana/loki/clients/pkg/promtail/positions"
     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 cloudflare targets.
    14  type TargetManager struct {
    15  	logger  log.Logger
    16  	targets map[string]*Target
    17  }
    18  
    19  // NewTargetManager creates a new cloudflare target managers.
    20  func NewTargetManager(
    21  	metrics *Metrics,
    22  	logger log.Logger,
    23  	positions positions.Positions,
    24  	pushClient api.EntryHandler,
    25  	scrapeConfigs []scrapeconfig.Config,
    26  ) (*TargetManager, error) {
    27  	tm := &TargetManager{
    28  		logger:  logger,
    29  		targets: make(map[string]*Target),
    30  	}
    31  	for _, cfg := range scrapeConfigs {
    32  		if cfg.CloudflareConfig == nil {
    33  			continue
    34  		}
    35  		pipeline, err := stages.NewPipeline(log.With(logger, "component", "cloudflare_pipeline"), cfg.PipelineStages, &cfg.JobName, metrics.reg)
    36  		if err != nil {
    37  			return nil, err
    38  		}
    39  		t, err := NewTarget(metrics, log.With(logger, "target", "cloudflare"), pipeline.Wrap(pushClient), positions, cfg.CloudflareConfig)
    40  		if err != nil {
    41  			return nil, err
    42  		}
    43  		tm.targets[cfg.JobName] = t
    44  	}
    45  
    46  	return tm, nil
    47  }
    48  
    49  // Ready returns true if at least one cloudflare target is active.
    50  func (tm *TargetManager) Ready() bool {
    51  	for _, t := range tm.targets {
    52  		if t.Ready() {
    53  			return true
    54  		}
    55  	}
    56  	return false
    57  }
    58  
    59  func (tm *TargetManager) Stop() {
    60  	for _, t := range tm.targets {
    61  		t.Stop()
    62  	}
    63  }
    64  
    65  func (tm *TargetManager) ActiveTargets() map[string][]target.Target {
    66  	result := make(map[string][]target.Target, len(tm.targets))
    67  	for k, v := range tm.targets {
    68  		if v.Ready() {
    69  			result[k] = []target.Target{v}
    70  		}
    71  	}
    72  	return result
    73  }
    74  
    75  func (tm *TargetManager) AllTargets() map[string][]target.Target {
    76  	result := make(map[string][]target.Target, len(tm.targets))
    77  	for k, v := range tm.targets {
    78  		result[k] = []target.Target{v}
    79  	}
    80  	return result
    81  }