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

     1  //go:build windows
     2  // +build windows
     3  
     4  package windows
     5  
     6  import (
     7  	"github.com/go-kit/log"
     8  	"github.com/go-kit/log/level"
     9  	"github.com/prometheus/client_golang/prometheus"
    10  
    11  	"github.com/grafana/loki/clients/pkg/logentry/stages"
    12  	"github.com/grafana/loki/clients/pkg/promtail/api"
    13  	"github.com/grafana/loki/clients/pkg/promtail/scrapeconfig"
    14  	"github.com/grafana/loki/clients/pkg/promtail/targets/target"
    15  )
    16  
    17  // TargetManager manages a series of windows event targets.
    18  type TargetManager struct {
    19  	logger  log.Logger
    20  	targets map[string]*Target
    21  }
    22  
    23  // NewTargetManager creates a new Windows managers.
    24  func NewTargetManager(
    25  	reg prometheus.Registerer,
    26  	logger log.Logger,
    27  	client api.EntryHandler,
    28  	scrapeConfigs []scrapeconfig.Config,
    29  ) (*TargetManager, error) {
    30  	tm := &TargetManager{
    31  		logger:  logger,
    32  		targets: make(map[string]*Target),
    33  	}
    34  
    35  	for _, cfg := range scrapeConfigs {
    36  		pipeline, err := stages.NewPipeline(log.With(logger, "component", "windows_pipeline"), cfg.PipelineStages, &cfg.JobName, reg)
    37  		if err != nil {
    38  			return nil, err
    39  		}
    40  
    41  		t, err := New(logger, pipeline.Wrap(client), cfg.RelabelConfigs, cfg.WindowsConfig)
    42  		if err != nil {
    43  			return nil, err
    44  		}
    45  
    46  		tm.targets[cfg.JobName] = t
    47  	}
    48  
    49  	return tm, nil
    50  }
    51  
    52  // Ready returns true if at least one Windows target is also ready.
    53  func (tm *TargetManager) Ready() bool {
    54  	for _, t := range tm.targets {
    55  		if t.Ready() {
    56  			return true
    57  		}
    58  	}
    59  	return false
    60  }
    61  
    62  // Stop stops the Windows target manager and all of its targets.
    63  func (tm *TargetManager) Stop() {
    64  	for _, t := range tm.targets {
    65  		if err := t.Stop(); err != nil {
    66  			level.Error(t.logger).Log("msg", "error stopping windows target", "err", err.Error())
    67  		}
    68  	}
    69  }
    70  
    71  // ActiveTargets returns the list of active Windows targets.
    72  func (tm *TargetManager) ActiveTargets() map[string][]target.Target {
    73  	result := make(map[string][]target.Target, len(tm.targets))
    74  	for k, v := range tm.targets {
    75  		if v.Ready() {
    76  			result[k] = []target.Target{v}
    77  		}
    78  	}
    79  	return result
    80  }
    81  
    82  // AllTargets returns the list of all targets.
    83  func (tm *TargetManager) AllTargets() map[string][]target.Target {
    84  	result := make(map[string][]target.Target, len(tm.targets))
    85  	for k, v := range tm.targets {
    86  		result[k] = []target.Target{v}
    87  	}
    88  	return result
    89  }