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 }