diff --git a/src/go/plugin/go.d/README.md b/src/go/plugin/go.d/README.md index e8eebe6a9e..35541947ee 100644 --- a/src/go/plugin/go.d/README.md +++ b/src/go/plugin/go.d/README.md @@ -76,7 +76,6 @@ see the appropriate collector readme. | [dovecot](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/modules/dovecot) | Dovecot | | [elasticsearch](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/modules/elasticsearch) | Elasticsearch/OpenSearch | | [envoy](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/modules/envoy) | Envoy | -| [example](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/modules/example) | - | | [exim](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/modules/exim) | Exim | | [fail2ban](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/modules/fail2ban) | Fail2Ban Jails | | [filecheck](https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/modules/filecheck) | Files and Directories | diff --git a/src/go/plugin/go.d/config/go.d.conf b/src/go/plugin/go.d/config/go.d.conf index bdcef4b283..f76d397632 100644 --- a/src/go/plugin/go.d/config/go.d.conf +++ b/src/go/plugin/go.d/config/go.d.conf @@ -41,7 +41,6 @@ modules: # dovecot: yes # elasticsearch: yes # envoy: yes -# example: no # exim: yes # fail2ban: yes # filecheck: yes diff --git a/src/go/plugin/go.d/config/go.d/example.conf b/src/go/plugin/go.d/config/go.d/example.conf deleted file mode 100644 index f92669a682..0000000000 --- a/src/go/plugin/go.d/config/go.d/example.conf +++ /dev/null @@ -1,5 +0,0 @@ -## All available configuration options, their descriptions and default values: -## https://github.com/netdata/netdata/tree/master/src/go/plugin/go.d/modules/example#readme - -jobs: - - name: example diff --git a/src/go/plugin/go.d/modules/example/README.md b/src/go/plugin/go.d/modules/example/README.md deleted file mode 100644 index 934dfd108f..0000000000 --- a/src/go/plugin/go.d/modules/example/README.md +++ /dev/null @@ -1,80 +0,0 @@ -<!-- -title: "Example module" -description: "Use this example data collection module, which produces example charts with random values, to better understand how to build your own collector in Go." -custom_edit_url: "https://github.com/netdata/go.d.plugin/edit/master/modules/example/README.md" -sidebar_label: "Example module in Go" -learn_status: "Published" -learn_topic_type: "References" -learn_rel_path: "Integrations/Monitor/Mock Collectors" ---> - -# Example module - -An example data collection module. Use it as an example writing a new module. - -## Charts - -This module produces example charts with random values. Number of charts, dimensions and chart type is configurable. - -## Configuration - -Edit the `go.d/example.conf` configuration file using `edit-config` from the -Netdata [config directory](/docs/netdata-agent/configuration/README.md), which is typically at `/etc/netdata`. - -```bash -cd /etc/netdata # Replace this path with your Netdata config directory -sudo ./edit-config go.d/example.conf -``` - -Disabled by default. Should be explicitly enabled -in [go.d.conf](https://github.com/netdata/netdata/blob/master/src/go/plugin/go.d/config/go.d.conf). - -```yaml -# go.d.conf -modules: - example: yes -``` - -Here is an example configuration with several jobs: - -```yaml -jobs: - - name: example - charts: - num: 3 - dimensions: 5 - - - name: hidden_example - hidden_charts: - num: 3 - dimensions: 5 -``` - ---- - -For all available options, see the Example -collector's [configuration file](https://github.com/netdata/netdata/blob/master/src/go/plugin/go.d/config/go.d/example.conf). - -## Troubleshooting - -To troubleshoot issues with the `example` collector, run the `go.d.plugin` with the debug option enabled. The output -should give you clues as to why the collector isn't working. - -- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on - your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`. - - ```bash - cd /usr/libexec/netdata/plugins.d/ - ``` - -- Switch to the `netdata` user. - - ```bash - sudo -u netdata -s - ``` - -- Run the `go.d.plugin` to debug the collector: - - ```bash - ./go.d.plugin -d -m example - ``` diff --git a/src/go/plugin/go.d/modules/example/init.go b/src/go/plugin/go.d/modules/example/init.go deleted file mode 100644 index 71854a55af..0000000000 --- a/src/go/plugin/go.d/modules/example/init.go +++ /dev/null @@ -1,64 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0-or-later - -package example - -import ( - "errors" - - "github.com/netdata/netdata/go/plugins/plugin/go.d/agent/module" -) - -func (e *Example) validateConfig() error { - if e.Config.Charts.Num <= 0 && e.Config.HiddenCharts.Num <= 0 { - return errors.New("'charts->num' or `hidden_charts->num` must be > 0") - } - if e.Config.Charts.Num > 0 && e.Config.Charts.Dims <= 0 { - return errors.New("'charts->dimensions' must be > 0") - } - if e.Config.HiddenCharts.Num > 0 && e.Config.HiddenCharts.Dims <= 0 { - return errors.New("'hidden_charts->dimensions' must be > 0") - } - return nil -} - -func (e *Example) initCharts() (*module.Charts, error) { - charts := &module.Charts{} - - var ctx int - v := calcContextEvery(e.Config.Charts.Num, e.Config.Charts.Contexts) - for i := 0; i < e.Config.Charts.Num; i++ { - if i != 0 && v != 0 && ctx < (e.Config.Charts.Contexts-1) && i%v == 0 { - ctx++ - } - chart := newChart(i, ctx, e.Config.Charts.Labels, module.ChartType(e.Config.Charts.Type)) - - if err := charts.Add(chart); err != nil { - return nil, err - } - } - - ctx = 0 - v = calcContextEvery(e.Config.HiddenCharts.Num, e.Config.HiddenCharts.Contexts) - for i := 0; i < e.Config.HiddenCharts.Num; i++ { - if i != 0 && v != 0 && ctx < (e.Config.HiddenCharts.Contexts-1) && i%v == 0 { - ctx++ - } - chart := newHiddenChart(i, ctx, e.Config.HiddenCharts.Labels, module.ChartType(e.Config.HiddenCharts.Type)) - - if err := charts.Add(chart); err != nil { - return nil, err - } - } - - return charts, nil -} - -func calcContextEvery(charts, contexts int) int { - if contexts <= 1 { - return 0 - } - if contexts > charts { - return 1 - } - return charts / contexts -} diff --git a/src/go/plugin/go.d/modules/init.go b/src/go/plugin/go.d/modules/init.go index 628625c2c1..00fd247312 100644 --- a/src/go/plugin/go.d/modules/init.go +++ b/src/go/plugin/go.d/modules/init.go @@ -30,7 +30,6 @@ import ( _ "github.com/netdata/netdata/go/plugins/plugin/go.d/modules/dovecot" _ "github.com/netdata/netdata/go/plugins/plugin/go.d/modules/elasticsearch" _ "github.com/netdata/netdata/go/plugins/plugin/go.d/modules/envoy" - _ "github.com/netdata/netdata/go/plugins/plugin/go.d/modules/example" _ "github.com/netdata/netdata/go/plugins/plugin/go.d/modules/exim" _ "github.com/netdata/netdata/go/plugins/plugin/go.d/modules/fail2ban" _ "github.com/netdata/netdata/go/plugins/plugin/go.d/modules/filecheck" @@ -101,6 +100,7 @@ import ( _ "github.com/netdata/netdata/go/plugins/plugin/go.d/modules/supervisord" _ "github.com/netdata/netdata/go/plugins/plugin/go.d/modules/systemdunits" _ "github.com/netdata/netdata/go/plugins/plugin/go.d/modules/tengine" + _ "github.com/netdata/netdata/go/plugins/plugin/go.d/modules/testrandom" _ "github.com/netdata/netdata/go/plugins/plugin/go.d/modules/tomcat" _ "github.com/netdata/netdata/go/plugins/plugin/go.d/modules/tor" _ "github.com/netdata/netdata/go/plugins/plugin/go.d/modules/traefik" diff --git a/src/go/plugin/go.d/modules/example/charts.go b/src/go/plugin/go.d/modules/testrandom/charts.go similarity index 80% rename from src/go/plugin/go.d/modules/example/charts.go rename to src/go/plugin/go.d/modules/testrandom/charts.go index be534fa7d3..10dfb05fa2 100644 --- a/src/go/plugin/go.d/modules/example/charts.go +++ b/src/go/plugin/go.d/modules/testrandom/charts.go @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-3.0-or-later -package example +package testrandom import ( "fmt" @@ -13,7 +13,7 @@ var chartTemplate = module.Chart{ Title: "A Random Number", Units: "random", Fam: "random", - Ctx: "example.random", + Ctx: "testrandom.random", } var hiddenChartTemplate = module.Chart{ @@ -21,7 +21,7 @@ var hiddenChartTemplate = module.Chart{ Title: "A Random Number", Units: "random", Fam: "random", - Ctx: "example.random", + Ctx: "testrandom.random", Opts: module.Opts{ Hidden: true, }, @@ -36,8 +36,8 @@ func newChart(num, ctx, labels int, typ module.ChartType) *module.Chart { } for i := 0; i < labels; i++ { chart.Labels = append(chart.Labels, module.Label{ - Key: fmt.Sprintf("example_name_%d", i), - Value: fmt.Sprintf("example_value_%d_%d", num, i), + Key: fmt.Sprintf("random_name_%d", i), + Value: fmt.Sprintf("random_value_%d_%d", num, i), }) } return chart @@ -52,8 +52,8 @@ func newHiddenChart(num, ctx, labels int, typ module.ChartType) *module.Chart { } for i := 0; i < labels; i++ { chart.Labels = append(chart.Labels, module.Label{ - Key: fmt.Sprintf("example_name_%d", i), - Value: fmt.Sprintf("example_value_%d_%d", num, i), + Key: fmt.Sprintf("random_name_%d", i), + Value: fmt.Sprintf("random_value_%d_%d", num, i), }) } return chart diff --git a/src/go/plugin/go.d/modules/example/collect.go b/src/go/plugin/go.d/modules/testrandom/collect.go similarity index 53% rename from src/go/plugin/go.d/modules/example/collect.go rename to src/go/plugin/go.d/modules/testrandom/collect.go index b72d3c252a..1a0508d287 100644 --- a/src/go/plugin/go.d/modules/example/collect.go +++ b/src/go/plugin/go.d/modules/testrandom/collect.go @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-3.0-or-later -package example +package testrandom import ( "fmt" @@ -8,40 +8,40 @@ import ( "github.com/netdata/netdata/go/plugins/plugin/go.d/agent/module" ) -func (e *Example) collect() (map[string]int64, error) { +func (tr *TestRandom) collect() (map[string]int64, error) { collected := make(map[string]int64) - for _, chart := range *e.Charts() { - e.collectChart(collected, chart) + for _, chart := range *tr.Charts() { + tr.collectChart(collected, chart) } return collected, nil } -func (e *Example) collectChart(collected map[string]int64, chart *module.Chart) { +func (tr *TestRandom) collectChart(collected map[string]int64, chart *module.Chart) { var num int if chart.Opts.Hidden { - num = e.Config.HiddenCharts.Dims + num = tr.Config.HiddenCharts.Dims } else { - num = e.Config.Charts.Dims + num = tr.Config.Charts.Dims } for i := 0; i < num; i++ { name := fmt.Sprintf("random%d", i) id := fmt.Sprintf("%s_%s", chart.ID, name) - if !e.collectedDims[id] { - e.collectedDims[id] = true + if !tr.collectedDims[id] { + tr.collectedDims[id] = true dim := &module.Dim{ID: id, Name: name} if err := chart.AddDim(dim); err != nil { - e.Warning(err) + tr.Warning(err) } chart.MarkNotCreated() } if i%2 == 0 { - collected[id] = e.randInt() + collected[id] = tr.randInt() } else { - collected[id] = -e.randInt() + collected[id] = -tr.randInt() } } } diff --git a/src/go/plugin/go.d/modules/example/config_schema.json b/src/go/plugin/go.d/modules/testrandom/config_schema.json similarity index 100% rename from src/go/plugin/go.d/modules/example/config_schema.json rename to src/go/plugin/go.d/modules/testrandom/config_schema.json diff --git a/src/go/plugin/go.d/modules/testrandom/init.go b/src/go/plugin/go.d/modules/testrandom/init.go new file mode 100644 index 0000000000..f5085ae0db --- /dev/null +++ b/src/go/plugin/go.d/modules/testrandom/init.go @@ -0,0 +1,64 @@ +// SPDX-License-Identifier: GPL-3.0-or-later + +package testrandom + +import ( + "errors" + + "github.com/netdata/netdata/go/plugins/plugin/go.d/agent/module" +) + +func (tr *TestRandom) validateConfig() error { + if tr.Config.Charts.Num <= 0 && tr.Config.HiddenCharts.Num <= 0 { + return errors.New("'charts->num' or `hidden_charts->num` must be > 0") + } + if tr.Config.Charts.Num > 0 && tr.Config.Charts.Dims <= 0 { + return errors.New("'charts->dimensions' must be > 0") + } + if tr.Config.HiddenCharts.Num > 0 && tr.Config.HiddenCharts.Dims <= 0 { + return errors.New("'hidden_charts->dimensions' must be > 0") + } + return nil +} + +func (tr *TestRandom) initCharts() (*module.Charts, error) { + charts := &module.Charts{} + + var ctx int + v := calcContextEvery(tr.Config.Charts.Num, tr.Config.Charts.Contexts) + for i := 0; i < tr.Config.Charts.Num; i++ { + if i != 0 && v != 0 && ctx < (tr.Config.Charts.Contexts-1) && i%v == 0 { + ctx++ + } + chart := newChart(i, ctx, tr.Config.Charts.Labels, module.ChartType(tr.Config.Charts.Type)) + + if err := charts.Add(chart); err != nil { + return nil, err + } + } + + ctx = 0 + v = calcContextEvery(tr.Config.HiddenCharts.Num, tr.Config.HiddenCharts.Contexts) + for i := 0; i < tr.Config.HiddenCharts.Num; i++ { + if i != 0 && v != 0 && ctx < (tr.Config.HiddenCharts.Contexts-1) && i%v == 0 { + ctx++ + } + chart := newHiddenChart(i, ctx, tr.Config.HiddenCharts.Labels, module.ChartType(tr.Config.HiddenCharts.Type)) + + if err := charts.Add(chart); err != nil { + return nil, err + } + } + + return charts, nil +} + +func calcContextEvery(charts, contexts int) int { + if contexts <= 1 { + return 0 + } + if contexts > charts { + return 1 + } + return charts / contexts +} diff --git a/src/go/plugin/go.d/modules/example/testdata/config.json b/src/go/plugin/go.d/modules/testrandom/testdata/config.json similarity index 100% rename from src/go/plugin/go.d/modules/example/testdata/config.json rename to src/go/plugin/go.d/modules/testrandom/testdata/config.json diff --git a/src/go/plugin/go.d/modules/example/testdata/config.yaml b/src/go/plugin/go.d/modules/testrandom/testdata/config.yaml similarity index 100% rename from src/go/plugin/go.d/modules/example/testdata/config.yaml rename to src/go/plugin/go.d/modules/testrandom/testdata/config.yaml diff --git a/src/go/plugin/go.d/modules/example/example.go b/src/go/plugin/go.d/modules/testrandom/testrandom.go similarity index 71% rename from src/go/plugin/go.d/modules/example/example.go rename to src/go/plugin/go.d/modules/testrandom/testrandom.go index 2ca0ad976a..940c861c87 100644 --- a/src/go/plugin/go.d/modules/example/example.go +++ b/src/go/plugin/go.d/modules/testrandom/testrandom.go @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-3.0-or-later -package example +package testrandom import ( _ "embed" @@ -13,7 +13,7 @@ import ( var configSchema string func init() { - module.Register("example", module.Creator{ + module.Register("testrandom", module.Creator{ JobConfigSchema: configSchema, Defaults: module.Defaults{ UpdateEvery: module.UpdateEvery, @@ -25,8 +25,8 @@ func init() { }) } -func New() *Example { - return &Example{ +func New() *TestRandom { + return &TestRandom{ Config: Config{ Charts: ConfigCharts{ Num: 1, @@ -58,7 +58,7 @@ type ( } ) -type Example struct { +type TestRandom struct { module.Base // should be embedded by every module Config `yaml:",inline"` @@ -67,38 +67,38 @@ type Example struct { collectedDims map[string]bool } -func (e *Example) Configuration() any { - return e.Config +func (tr *TestRandom) Configuration() any { + return tr.Config } -func (e *Example) Init() error { - err := e.validateConfig() +func (tr *TestRandom) Init() error { + err := tr.validateConfig() if err != nil { - e.Errorf("config validation: %v", err) + tr.Errorf("config validation: %v", err) return err } - charts, err := e.initCharts() + charts, err := tr.initCharts() if err != nil { - e.Errorf("charts init: %v", err) + tr.Errorf("charts init: %v", err) return err } - e.charts = charts + tr.charts = charts return nil } -func (e *Example) Check() error { +func (tr *TestRandom) Check() error { return nil } -func (e *Example) Charts() *module.Charts { - return e.charts +func (tr *TestRandom) Charts() *module.Charts { + return tr.charts } -func (e *Example) Collect() map[string]int64 { - mx, err := e.collect() +func (tr *TestRandom) Collect() map[string]int64 { + mx, err := tr.collect() if err != nil { - e.Error(err) + tr.Error(err) } if len(mx) == 0 { @@ -107,4 +107,4 @@ func (e *Example) Collect() map[string]int64 { return mx } -func (e *Example) Cleanup() {} +func (tr *TestRandom) Cleanup() {} diff --git a/src/go/plugin/go.d/modules/example/example_test.go b/src/go/plugin/go.d/modules/testrandom/testrandom_test.go similarity index 56% rename from src/go/plugin/go.d/modules/example/example_test.go rename to src/go/plugin/go.d/modules/testrandom/testrandom_test.go index 26b3ec9c8b..052d4249ef 100644 --- a/src/go/plugin/go.d/modules/example/example_test.go +++ b/src/go/plugin/go.d/modules/testrandom/testrandom_test.go @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-3.0-or-later -package example +package testrandom import ( "os" @@ -26,23 +26,15 @@ func Test_testDataIsValid(t *testing.T) { } } -func TestExample_ConfigurationSerialize(t *testing.T) { - module.TestConfigurationSerialize(t, &Example{}, dataConfigJSON, dataConfigYAML) +func TestTestRandom_ConfigurationSerialize(t *testing.T) { + module.TestConfigurationSerialize(t, &TestRandom{}, dataConfigJSON, dataConfigYAML) } func TestNew(t *testing.T) { - // We want to ensure that module is a reference type, nothing more. - - assert.IsType(t, (*Example)(nil), New()) + assert.IsType(t, (*TestRandom)(nil), New()) } -func TestExample_Init(t *testing.T) { - // 'Init() bool' initializes the module with an appropriate config, so to test it we need: - // - provide the config. - // - set module.Config field with the config. - // - call Init() and compare its return value with the expected value. - - // 'test' map contains different test cases. +func TestTestRandom_Init(t *testing.T) { tests := map[string]struct { config Config wantFail bool @@ -113,106 +105,87 @@ func TestExample_Init(t *testing.T) { for name, test := range tests { t.Run(name, func(t *testing.T) { - example := New() - example.Config = test.config + tr := New() + tr.Config = test.config if test.wantFail { - assert.Error(t, example.Init()) + assert.Error(t, tr.Init()) } else { - assert.NoError(t, example.Init()) + assert.NoError(t, tr.Init()) } }) } } -func TestExample_Check(t *testing.T) { - // 'Check() bool' reports whether the module is able to collect any data, so to test it we need: - // - provide the module with a specific config. - // - initialize the module (call Init()). - // - call Check() and compare its return value with the expected value. - - // 'test' map contains different test cases. +func TestTestRandom_Check(t *testing.T) { tests := map[string]struct { - prepare func() *Example + prepare func() *TestRandom wantFail bool }{ - "success on default": {prepare: prepareExampleDefault}, - "success when only 'charts' set": {prepare: prepareExampleOnlyCharts}, - "success when only 'hidden_charts' set": {prepare: prepareExampleOnlyHiddenCharts}, - "success when 'charts' and 'hidden_charts' set": {prepare: prepareExampleChartsAndHiddenCharts}, + "success on default": {prepare: prepareTRDefault}, + "success when only 'charts' set": {prepare: prepareTROnlyCharts}, + "success when only 'hidden_charts' set": {prepare: prepareTROnlyHiddenCharts}, + "success when 'charts' and 'hidden_charts' set": {prepare: prepareTRChartsAndHiddenCharts}, } for name, test := range tests { t.Run(name, func(t *testing.T) { - example := test.prepare() - require.NoError(t, example.Init()) + tr := test.prepare() + require.NoError(t, tr.Init()) if test.wantFail { - assert.Error(t, example.Check()) + assert.Error(t, tr.Check()) } else { - assert.NoError(t, example.Check()) + assert.NoError(t, tr.Check()) } }) } } -func TestExample_Charts(t *testing.T) { - // We want to ensure that initialized module does not return 'nil'. - // If it is not 'nil' we are ok. - - // 'test' map contains different test cases. +func TestTestRandom_Charts(t *testing.T) { tests := map[string]struct { - prepare func(t *testing.T) *Example + prepare func(t *testing.T) *TestRandom wantNil bool }{ "not initialized collector": { wantNil: true, - prepare: func(t *testing.T) *Example { + prepare: func(t *testing.T) *TestRandom { return New() }, }, "initialized collector": { - prepare: func(t *testing.T) *Example { - example := New() - require.NoError(t, example.Init()) - return example + prepare: func(t *testing.T) *TestRandom { + tr := New() + require.NoError(t, tr.Init()) + return tr }, }, } for name, test := range tests { t.Run(name, func(t *testing.T) { - example := test.prepare(t) + tr := test.prepare(t) if test.wantNil { - assert.Nil(t, example.Charts()) + assert.Nil(t, tr.Charts()) } else { - assert.NotNil(t, example.Charts()) + assert.NotNil(t, tr.Charts()) } }) } } -func TestExample_Cleanup(t *testing.T) { - // Since this module has nothing to clean up, - // we want just to ensure that Cleanup() not panics. - +func TestTestRandom_Cleanup(t *testing.T) { assert.NotPanics(t, New().Cleanup) } -func TestExample_Collect(t *testing.T) { - // 'Collect() map[string]int64' returns collected data, so to test it we need: - // - provide the module with a specific config. - // - initialize the module (call Init()). - // - call Collect() and compare its return value with the expected value. - - // 'test' map contains different test cases. +func TestTestRandom_Collect(t *testing.T) { tests := map[string]struct { - prepare func() *Example + prepare func() *TestRandom wantCollected map[string]int64 }{ "default config": { - prepare: prepareExampleDefault, + prepare: prepareTRDefault, wantCollected: map[string]int64{ "random_0_random0": 1, "random_0_random1": -1, @@ -221,7 +194,7 @@ func TestExample_Collect(t *testing.T) { }, }, "only 'charts' set": { - prepare: prepareExampleOnlyCharts, + prepare: prepareTROnlyCharts, wantCollected: map[string]int64{ "random_0_random0": 1, "random_0_random1": -1, @@ -236,7 +209,7 @@ func TestExample_Collect(t *testing.T) { }, }, "only 'hidden_charts' set": { - prepare: prepareExampleOnlyHiddenCharts, + prepare: prepareTROnlyHiddenCharts, wantCollected: map[string]int64{ "hidden_random_0_random0": 1, "hidden_random_0_random1": -1, @@ -251,7 +224,7 @@ func TestExample_Collect(t *testing.T) { }, }, "'charts' and 'hidden_charts' set": { - prepare: prepareExampleChartsAndHiddenCharts, + prepare: prepareTRChartsAndHiddenCharts, wantCollected: map[string]int64{ "hidden_random_0_random0": 1, "hidden_random_0_random1": -1, @@ -279,41 +252,23 @@ func TestExample_Collect(t *testing.T) { for name, test := range tests { t.Run(name, func(t *testing.T) { - example := test.prepare() - require.NoError(t, example.Init()) + tr := test.prepare() + require.NoError(t, tr.Init()) - collected := example.Collect() + mx := tr.Collect() - assert.Equal(t, test.wantCollected, collected) - ensureCollectedHasAllChartsDimsVarsIDs(t, example, collected) + assert.Equal(t, test.wantCollected, mx) + module.TestMetricsHasAllChartsDims(t, tr.Charts(), mx) }) } } -func ensureCollectedHasAllChartsDimsVarsIDs(t *testing.T, e *Example, collected map[string]int64) { - for _, chart := range *e.Charts() { - if chart.Obsolete { - continue - } - for _, dim := range chart.Dims { - _, ok := collected[dim.ID] - assert.Truef(t, ok, - "collected metrics has no data for dim '%s' chart '%s'", dim.ID, chart.ID) - } - for _, v := range chart.Vars { - _, ok := collected[v.ID] - assert.Truef(t, ok, - "collected metrics has no data for var '%s' chart '%s'", v.ID, chart.ID) - } - } +func prepareTRDefault() *TestRandom { + return prepareTR(New().Config) } -func prepareExampleDefault() *Example { - return prepareExample(New().Config) -} - -func prepareExampleOnlyCharts() *Example { - return prepareExample(Config{ +func prepareTROnlyCharts() *TestRandom { + return prepareTR(Config{ Charts: ConfigCharts{ Num: 2, Dims: 5, @@ -321,8 +276,8 @@ func prepareExampleOnlyCharts() *Example { }) } -func prepareExampleOnlyHiddenCharts() *Example { - return prepareExample(Config{ +func prepareTROnlyHiddenCharts() *TestRandom { + return prepareTR(Config{ HiddenCharts: ConfigCharts{ Num: 2, Dims: 5, @@ -330,8 +285,8 @@ func prepareExampleOnlyHiddenCharts() *Example { }) } -func prepareExampleChartsAndHiddenCharts() *Example { - return prepareExample(Config{ +func prepareTRChartsAndHiddenCharts() *TestRandom { + return prepareTR(Config{ Charts: ConfigCharts{ Num: 2, Dims: 5, @@ -343,9 +298,9 @@ func prepareExampleChartsAndHiddenCharts() *Example { }) } -func prepareExample(cfg Config) *Example { - example := New() - example.Config = cfg - example.randInt = func() int64 { return 1 } - return example +func prepareTR(cfg Config) *TestRandom { + tr := New() + tr.Config = cfg + tr.randInt = func() int64 { return 1 } + return tr }