github.com/netdata/go.d.plugin@v0.58.1/agent/discovery/dummy/discovery.go (about)

     1  // SPDX-License-Identifier: GPL-3.0-or-later
     2  
     3  package dummy
     4  
     5  import (
     6  	"context"
     7  	"fmt"
     8  	"log/slog"
     9  
    10  	"github.com/netdata/go.d.plugin/agent/confgroup"
    11  	"github.com/netdata/go.d.plugin/logger"
    12  )
    13  
    14  func NewDiscovery(cfg Config) (*Discovery, error) {
    15  	if err := validateConfig(cfg); err != nil {
    16  		return nil, fmt.Errorf("config validation: %v", err)
    17  	}
    18  	d := &Discovery{
    19  		Logger: logger.New().With(
    20  			slog.String("component", "discovery dummy"),
    21  		),
    22  		reg:   cfg.Registry,
    23  		names: cfg.Names,
    24  	}
    25  	return d, nil
    26  }
    27  
    28  type Discovery struct {
    29  	*logger.Logger
    30  
    31  	reg   confgroup.Registry
    32  	names []string
    33  }
    34  
    35  func (d *Discovery) String() string {
    36  	return d.Name()
    37  }
    38  
    39  func (d *Discovery) Name() string {
    40  	return "dummy discovery"
    41  }
    42  
    43  func (d *Discovery) Run(ctx context.Context, in chan<- []*confgroup.Group) {
    44  	d.Info("instance is started")
    45  	defer func() { d.Info("instance is stopped") }()
    46  
    47  	select {
    48  	case <-ctx.Done():
    49  	case in <- d.groups():
    50  	}
    51  
    52  	close(in)
    53  }
    54  
    55  func (d *Discovery) groups() (groups []*confgroup.Group) {
    56  	for _, name := range d.names {
    57  		groups = append(groups, d.newCfgGroup(name))
    58  	}
    59  	return groups
    60  }
    61  
    62  func (d *Discovery) newCfgGroup(name string) *confgroup.Group {
    63  	def, ok := d.reg.Lookup(name)
    64  	if !ok {
    65  		return nil
    66  	}
    67  
    68  	cfg := confgroup.Config{}
    69  	cfg.SetModule(name)
    70  	cfg.SetSource(name)
    71  	cfg.SetProvider("dummy")
    72  	cfg.Apply(def)
    73  
    74  	group := &confgroup.Group{
    75  		Configs: []confgroup.Config{cfg},
    76  		Source:  name,
    77  	}
    78  	return group
    79  }