master
go 76 lines 1.44 KB
Raw
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/netdata/go/plugins/logger"
11 "github.com/netdata/netdata/go/plugins/plugin/framework/confgroup"
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"),
21 slog.String("discoverer", "dummy"),
22 ),
23 reg: cfg.Registry,
24 names: cfg.Names,
25 }
26 return d, nil
27 }
28
29 type Discovery struct {
30 *logger.Logger
31
32 reg confgroup.Registry
33 names []string
34 }
35
36 func (d *Discovery) String() string {
37 return d.Name()
38 }
39
40 func (d *Discovery) Name() string {
41 return "dummy discovery"
42 }
43
44 func (d *Discovery) Run(ctx context.Context, in chan<- []*confgroup.Group) {
45 d.Info("instance is started")
46 defer func() { d.Info("instance is stopped") }()
47
48 select {
49 case <-ctx.Done():
50 case in <- d.groups():
51 }
52
53 close(in)
54 }
55
56 func (d *Discovery) groups() []*confgroup.Group {
57 group := &confgroup.Group{Source: "internal"}
58
59 for _, name := range d.names {
60 def, ok := d.reg.Lookup(name)
61 if !ok {
62 continue
63 }
64 src := "internal"
65 cfg := confgroup.Config{}
66 cfg.SetModule(name)
67 cfg.SetProvider("dummy")
68 cfg.SetSourceType(confgroup.TypeStock)
69 cfg.SetSource(src)
70 cfg.ApplyDefaults(def)
71
72 group.Configs = append(group.Configs, cfg)
73 }
74
75 return []*confgroup.Group{group}
76 }