chore: Resolve linter issues in config.go and config_test.go (#11929)
This commit is contained in:
parent
b5c618ee8b
commit
b7591fd67d
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -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{}
|
||||
})
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue