chore: Resolve linter issues in config.go and config_test.go (#11929)

This commit is contained in:
Sebastian Spaink 2022-10-04 10:26:02 -05:00 committed by GitHub
parent b5c618ee8b
commit b7591fd67d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 112 additions and 97 deletions

View File

@ -3,7 +3,6 @@ package config
import (
"bytes"
"crypto/tls"
_ "embed"
"errors"
"fmt"
"io"
@ -30,7 +29,6 @@ import (
"github.com/influxdata/telegraf/plugins/inputs"
"github.com/influxdata/telegraf/plugins/outputs"
"github.com/influxdata/telegraf/plugins/parsers"
"github.com/influxdata/telegraf/plugins/parsers/temporary/json_v2"
"github.com/influxdata/telegraf/plugins/processors"
"github.com/influxdata/telegraf/plugins/serializers"
"github.com/influxdata/toml"
@ -599,21 +597,33 @@ func fetchConfig(u *url.URL) ([]byte, error) {
retries := 3
for i := 0; i <= retries; i++ {
resp, err := http.DefaultClient.Do(req)
body, err, retry := func() ([]byte, error, bool) {
resp, err := http.DefaultClient.Do(req)
if err != nil {
return nil, fmt.Errorf("retry %d of %d failed connecting to HTTP config server %s", i, retries, err), false
}
defer resp.Body.Close()
if resp.StatusCode != http.StatusOK {
if i < retries {
log.Printf("Error getting HTTP config. Retry %d of %d in %s. Status=%d", i, retries, httpLoadConfigRetryInterval, resp.StatusCode)
return nil, nil, true
}
return nil, fmt.Errorf("retry %d of %d failed to retrieve remote config: %s", i, retries, resp.Status), false
}
body, err := io.ReadAll(resp.Body)
return body, err, false
}()
if err != nil {
return nil, fmt.Errorf("Retry %d of %d failed connecting to HTTP config server %s", i, retries, err)
return nil, err
}
if resp.StatusCode != http.StatusOK {
if i < retries {
log.Printf("Error getting HTTP config. Retry %d of %d in %s. Status=%d", i, retries, httpLoadConfigRetryInterval, resp.StatusCode)
time.Sleep(httpLoadConfigRetryInterval)
continue
}
return nil, fmt.Errorf("Retry %d of %d failed to retrieve remote config: %s", i, retries, resp.Status)
if retry {
time.Sleep(httpLoadConfigRetryInterval)
continue
}
defer resp.Body.Close()
return io.ReadAll(resp.Body)
return body, err
}
return nil, nil
@ -1109,44 +1119,6 @@ func (c *Config) buildInput(name string, tbl *ast.Table) (*models.InputConfig, e
return cp, nil
}
func getFieldSubtable(c *Config, metricConfig *ast.Table) []json_v2.DataSet {
var fields []json_v2.DataSet
if fieldConfigs, ok := metricConfig.Fields["field"]; ok {
if fieldConfigs, ok := fieldConfigs.([]*ast.Table); ok {
for _, fieldconfig := range fieldConfigs {
var f json_v2.DataSet
c.getFieldString(fieldconfig, "path", &f.Path)
c.getFieldString(fieldconfig, "rename", &f.Rename)
c.getFieldString(fieldconfig, "type", &f.Type)
c.getFieldBool(fieldconfig, "optional", &f.Optional)
fields = append(fields, f)
}
}
}
return fields
}
func getTagSubtable(c *Config, metricConfig *ast.Table) []json_v2.DataSet {
var tags []json_v2.DataSet
if fieldConfigs, ok := metricConfig.Fields["tag"]; ok {
if fieldConfigs, ok := fieldConfigs.([]*ast.Table); ok {
for _, fieldconfig := range fieldConfigs {
var t json_v2.DataSet
c.getFieldString(fieldconfig, "path", &t.Path)
c.getFieldString(fieldconfig, "rename", &t.Rename)
t.Type = "string"
tags = append(tags, t)
c.getFieldBool(fieldconfig, "optional", &t.Optional)
}
}
}
return tags
}
// buildSerializer grabs the necessary entries from the ast.Table for creating
// a serializers.Serializer object, and creates it, which can then be added onto
// an Output object.
@ -1408,21 +1380,6 @@ func (c *Config) getFieldTagFilter(tbl *ast.Table, fieldName string, target *[]m
}
}
func (c *Config) getFieldStringMap(tbl *ast.Table, fieldName string, target *map[string]string) {
*target = map[string]string{}
if node, ok := tbl.Fields[fieldName]; ok {
if subtbl, ok := node.(*ast.Table); ok {
for name, val := range subtbl.Fields {
if kv, ok := val.(*ast.KeyValue); ok {
if str, ok := kv.Value.(*ast.String); ok {
(*target)[name] = str.Value
}
}
}
}
}
}
func keys(m map[string]bool) []string {
result := []string{}
for k := range m {

View File

@ -100,7 +100,7 @@ func TestConfig_LoadSingleInputWithEnvVars(t *testing.T) {
func TestConfig_LoadSingleInput(t *testing.T) {
c := NewConfig()
c.LoadConfig("./testdata/single_plugin.toml")
require.NoError(t, c.LoadConfig("./testdata/single_plugin.toml"))
input := inputs.Inputs["memcached"]().(*MockupInputPlugin)
input.Servers = []string{"localhost"}
@ -359,7 +359,7 @@ func TestConfig_URLRetries3Fails(t *testing.T) {
}))
defer ts.Close()
expected := fmt.Sprintf("Error loading config file %s: Retry 3 of 3 failed to retrieve remote config: 404 Not Found", ts.URL)
expected := fmt.Sprintf("Error loading config file %s: retry 3 of 3 failed to retrieve remote config: 404 Not Found", ts.URL)
c := NewConfig()
err := c.LoadConfig(ts.URL)
@ -783,10 +783,18 @@ type MockupInputPluginParserOld struct {
ParserFunc parsers.ParserFunc
}
func (m *MockupInputPluginParserOld) SampleConfig() string { return "Mockup old parser test plugin" }
func (m *MockupInputPluginParserOld) Gather(acc telegraf.Accumulator) error { return nil }
func (m *MockupInputPluginParserOld) SetParser(parser parsers.Parser) { m.Parser = parser }
func (m *MockupInputPluginParserOld) SetParserFunc(f parsers.ParserFunc) { m.ParserFunc = f }
func (m *MockupInputPluginParserOld) SampleConfig() string {
return "Mockup old parser test plugin"
}
func (m *MockupInputPluginParserOld) Gather(acc telegraf.Accumulator) error {
return nil
}
func (m *MockupInputPluginParserOld) SetParser(parser parsers.Parser) {
m.Parser = parser
}
func (m *MockupInputPluginParserOld) SetParserFunc(f parsers.ParserFunc) {
m.ParserFunc = f
}
/*** Mockup INPUT plugin for (new) parser testing to avoid cyclic dependencies ***/
type MockupInputPluginParserNew struct {
@ -794,10 +802,18 @@ type MockupInputPluginParserNew struct {
ParserFunc telegraf.ParserFunc
}
func (m *MockupInputPluginParserNew) SampleConfig() string { return "Mockup old parser test plugin" }
func (m *MockupInputPluginParserNew) Gather(acc telegraf.Accumulator) error { return nil }
func (m *MockupInputPluginParserNew) SetParser(parser telegraf.Parser) { m.Parser = parser }
func (m *MockupInputPluginParserNew) SetParserFunc(f telegraf.ParserFunc) { m.ParserFunc = f }
func (m *MockupInputPluginParserNew) SampleConfig() string {
return "Mockup old parser test plugin"
}
func (m *MockupInputPluginParserNew) Gather(acc telegraf.Accumulator) error {
return nil
}
func (m *MockupInputPluginParserNew) SetParser(parser telegraf.Parser) {
m.Parser = parser
}
func (m *MockupInputPluginParserNew) SetParserFunc(f telegraf.ParserFunc) {
m.ParserFunc = f
}
/*** Mockup INPUT plugin for testing to avoid cyclic dependencies ***/
type MockupInputPlugin struct {
@ -817,9 +833,15 @@ type MockupInputPlugin struct {
parser telegraf.Parser
}
func (m *MockupInputPlugin) SampleConfig() string { return "Mockup test input plugin" }
func (m *MockupInputPlugin) Gather(acc telegraf.Accumulator) error { return nil }
func (m *MockupInputPlugin) SetParser(parser telegraf.Parser) { m.parser = parser }
func (m *MockupInputPlugin) SampleConfig() string {
return "Mockup test input plugin"
}
func (m *MockupInputPlugin) Gather(acc telegraf.Accumulator) error {
return nil
}
func (m *MockupInputPlugin) SetParser(parser telegraf.Parser) {
m.parser = parser
}
/*** Mockup PROCESSOR plugin for testing to avoid cyclic dependencies ***/
type MockupProcessorPluginParser struct {
@ -827,17 +849,27 @@ type MockupProcessorPluginParser struct {
ParserFunc telegraf.ParserFunc
}
func (m *MockupProcessorPluginParser) Start(acc telegraf.Accumulator) error { return nil }
func (m *MockupProcessorPluginParser) Stop() error { return nil }
func (m *MockupProcessorPluginParser) Start(acc telegraf.Accumulator) error {
return nil
}
func (m *MockupProcessorPluginParser) Stop() error {
return nil
}
func (m *MockupProcessorPluginParser) SampleConfig() string {
return "Mockup test processor plugin with parser"
}
func (m *MockupProcessorPluginParser) Apply(in ...telegraf.Metric) []telegraf.Metric { return nil }
func (m *MockupProcessorPluginParser) Apply(in ...telegraf.Metric) []telegraf.Metric {
return nil
}
func (m *MockupProcessorPluginParser) Add(metric telegraf.Metric, acc telegraf.Accumulator) error {
return nil
}
func (m *MockupProcessorPluginParser) SetParser(parser telegraf.Parser) { m.Parser = parser }
func (m *MockupProcessorPluginParser) SetParserFunc(f telegraf.ParserFunc) { m.ParserFunc = f }
func (m *MockupProcessorPluginParser) SetParser(parser telegraf.Parser) {
m.Parser = parser
}
func (m *MockupProcessorPluginParser) SetParserFunc(f telegraf.ParserFunc) {
m.ParserFunc = f
}
/*** Mockup OUTPUT plugin for testing to avoid cyclic dependencies ***/
type MockupOuputPlugin struct {
@ -849,25 +881,51 @@ type MockupOuputPlugin struct {
tls.ClientConfig
}
func (m *MockupOuputPlugin) Connect() error { return nil }
func (m *MockupOuputPlugin) Close() error { return nil }
func (m *MockupOuputPlugin) SampleConfig() string { return "Mockup test output plugin" }
func (m *MockupOuputPlugin) Write(metrics []telegraf.Metric) error { return nil }
func (m *MockupOuputPlugin) Connect() error {
return nil
}
func (m *MockupOuputPlugin) Close() error {
return nil
}
func (m *MockupOuputPlugin) SampleConfig() string {
return "Mockup test output plugin"
}
func (m *MockupOuputPlugin) Write(metrics []telegraf.Metric) error {
return nil
}
// Register the mockup plugin on loading
func init() {
// Register the mockup input plugin for the required names
inputs.Add("parser_test_new", func() telegraf.Input { return &MockupInputPluginParserNew{} })
inputs.Add("parser_test_old", func() telegraf.Input { return &MockupInputPluginParserOld{} })
inputs.Add("exec", func() telegraf.Input { return &MockupInputPlugin{Timeout: Duration(time.Second * 5)} })
inputs.Add("http_listener_v2", func() telegraf.Input { return &MockupInputPlugin{} })
inputs.Add("memcached", func() telegraf.Input { return &MockupInputPlugin{} })
inputs.Add("procstat", func() telegraf.Input { return &MockupInputPlugin{} })
inputs.Add("parser_test_new", func() telegraf.Input {
return &MockupInputPluginParserNew{}
})
inputs.Add("parser_test_old", func() telegraf.Input {
return &MockupInputPluginParserOld{}
})
inputs.Add("exec", func() telegraf.Input {
return &MockupInputPlugin{Timeout: Duration(time.Second * 5)}
})
inputs.Add("http_listener_v2", func() telegraf.Input {
return &MockupInputPlugin{}
})
inputs.Add("memcached", func() telegraf.Input {
return &MockupInputPlugin{}
})
inputs.Add("procstat", func() telegraf.Input {
return &MockupInputPlugin{}
})
// Register the mockup output plugin for the required names
processors.Add("parser_test", func() telegraf.Processor { return &MockupProcessorPluginParser{} })
processors.Add("parser_test", func() telegraf.Processor {
return &MockupProcessorPluginParser{}
})
// Register the mockup output plugin for the required names
outputs.Add("azure_monitor", func() telegraf.Output { return &MockupOuputPlugin{NamespacePrefix: "Telegraf/"} })
outputs.Add("http", func() telegraf.Output { return &MockupOuputPlugin{} })
outputs.Add("azure_monitor", func() telegraf.Output {
return &MockupOuputPlugin{NamespacePrefix: "Telegraf/"}
})
outputs.Add("http", func() telegraf.Output {
return &MockupOuputPlugin{}
})
}