summaryrefslogtreecommitdiffstats
path: root/src/go/collectors/go.d.plugin/agent/discovery/dummy/discovery.go
blob: fed257b2f61de4713b6da348ff5f488d7578f1f1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
// SPDX-License-Identifier: GPL-3.0-or-later

package dummy

import (
	"context"
	"fmt"
	"log/slog"

	"github.com/netdata/netdata/go/go.d.plugin/agent/confgroup"
	"github.com/netdata/netdata/go/go.d.plugin/logger"
)

func NewDiscovery(cfg Config) (*Discovery, error) {
	if err := validateConfig(cfg); err != nil {
		return nil, fmt.Errorf("config validation: %v", err)
	}
	d := &Discovery{
		Logger: logger.New().With(
			slog.String("component", "discovery"),
			slog.String("discoverer", "dummy"),
		),
		reg:   cfg.Registry,
		names: cfg.Names,
	}
	return d, nil
}

type Discovery struct {
	*logger.Logger

	reg   confgroup.Registry
	names []string
}

func (d *Discovery) String() string {
	return d.Name()
}

func (d *Discovery) Name() string {
	return "dummy discovery"
}

func (d *Discovery) Run(ctx context.Context, in chan<- []*confgroup.Group) {
	d.Info("instance is started")
	defer func() { d.Info("instance is stopped") }()

	select {
	case <-ctx.Done():
	case in <- d.groups():
	}

	close(in)
}

func (d *Discovery) groups() []*confgroup.Group {
	group := &confgroup.Group{Source: "internal"}

	for _, name := range d.names {
		def, ok := d.reg.Lookup(name)
		if !ok {
			continue
		}
		src := "internal"
		cfg := confgroup.Config{}
		cfg.SetModule(name)
		cfg.SetProvider("dummy")
		cfg.SetSourceType(confgroup.TypeStock)
		cfg.SetSource(src)
		cfg.ApplyDefaults(def)

		group.Configs = append(group.Configs, cfg)
	}

	return []*confgroup.Group{group}
}