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 (
|
import (
|
||||||
"bytes"
|
"bytes"
|
||||||
"crypto/tls"
|
"crypto/tls"
|
||||||
_ "embed"
|
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
|
|
@ -30,7 +29,6 @@ import (
|
||||||
"github.com/influxdata/telegraf/plugins/inputs"
|
"github.com/influxdata/telegraf/plugins/inputs"
|
||||||
"github.com/influxdata/telegraf/plugins/outputs"
|
"github.com/influxdata/telegraf/plugins/outputs"
|
||||||
"github.com/influxdata/telegraf/plugins/parsers"
|
"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/processors"
|
||||||
"github.com/influxdata/telegraf/plugins/serializers"
|
"github.com/influxdata/telegraf/plugins/serializers"
|
||||||
"github.com/influxdata/toml"
|
"github.com/influxdata/toml"
|
||||||
|
|
@ -599,21 +597,33 @@ func fetchConfig(u *url.URL) ([]byte, error) {
|
||||||
|
|
||||||
retries := 3
|
retries := 3
|
||||||
for i := 0; i <= retries; i++ {
|
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 {
|
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 retry {
|
||||||
if i < retries {
|
time.Sleep(httpLoadConfigRetryInterval)
|
||||||
log.Printf("Error getting HTTP config. Retry %d of %d in %s. Status=%d", i, retries, httpLoadConfigRetryInterval, resp.StatusCode)
|
continue
|
||||||
time.Sleep(httpLoadConfigRetryInterval)
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
return nil, fmt.Errorf("Retry %d of %d failed to retrieve remote config: %s", i, retries, resp.Status)
|
|
||||||
}
|
}
|
||||||
defer resp.Body.Close()
|
|
||||||
return io.ReadAll(resp.Body)
|
return body, err
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil, nil
|
return nil, nil
|
||||||
|
|
@ -1109,44 +1119,6 @@ func (c *Config) buildInput(name string, tbl *ast.Table) (*models.InputConfig, e
|
||||||
return cp, nil
|
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
|
// buildSerializer grabs the necessary entries from the ast.Table for creating
|
||||||
// a serializers.Serializer object, and creates it, which can then be added onto
|
// a serializers.Serializer object, and creates it, which can then be added onto
|
||||||
// an Output object.
|
// 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 {
|
func keys(m map[string]bool) []string {
|
||||||
result := []string{}
|
result := []string{}
|
||||||
for k := range m {
|
for k := range m {
|
||||||
|
|
|
||||||
|
|
@ -100,7 +100,7 @@ func TestConfig_LoadSingleInputWithEnvVars(t *testing.T) {
|
||||||
|
|
||||||
func TestConfig_LoadSingleInput(t *testing.T) {
|
func TestConfig_LoadSingleInput(t *testing.T) {
|
||||||
c := NewConfig()
|
c := NewConfig()
|
||||||
c.LoadConfig("./testdata/single_plugin.toml")
|
require.NoError(t, c.LoadConfig("./testdata/single_plugin.toml"))
|
||||||
|
|
||||||
input := inputs.Inputs["memcached"]().(*MockupInputPlugin)
|
input := inputs.Inputs["memcached"]().(*MockupInputPlugin)
|
||||||
input.Servers = []string{"localhost"}
|
input.Servers = []string{"localhost"}
|
||||||
|
|
@ -359,7 +359,7 @@ func TestConfig_URLRetries3Fails(t *testing.T) {
|
||||||
}))
|
}))
|
||||||
defer ts.Close()
|
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()
|
c := NewConfig()
|
||||||
err := c.LoadConfig(ts.URL)
|
err := c.LoadConfig(ts.URL)
|
||||||
|
|
@ -783,10 +783,18 @@ type MockupInputPluginParserOld struct {
|
||||||
ParserFunc parsers.ParserFunc
|
ParserFunc parsers.ParserFunc
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *MockupInputPluginParserOld) SampleConfig() string { return "Mockup old parser test plugin" }
|
func (m *MockupInputPluginParserOld) SampleConfig() string {
|
||||||
func (m *MockupInputPluginParserOld) Gather(acc telegraf.Accumulator) error { return nil }
|
return "Mockup old parser test plugin"
|
||||||
func (m *MockupInputPluginParserOld) SetParser(parser parsers.Parser) { m.Parser = parser }
|
}
|
||||||
func (m *MockupInputPluginParserOld) SetParserFunc(f parsers.ParserFunc) { m.ParserFunc = f }
|
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 ***/
|
/*** Mockup INPUT plugin for (new) parser testing to avoid cyclic dependencies ***/
|
||||||
type MockupInputPluginParserNew struct {
|
type MockupInputPluginParserNew struct {
|
||||||
|
|
@ -794,10 +802,18 @@ type MockupInputPluginParserNew struct {
|
||||||
ParserFunc telegraf.ParserFunc
|
ParserFunc telegraf.ParserFunc
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *MockupInputPluginParserNew) SampleConfig() string { return "Mockup old parser test plugin" }
|
func (m *MockupInputPluginParserNew) SampleConfig() string {
|
||||||
func (m *MockupInputPluginParserNew) Gather(acc telegraf.Accumulator) error { return nil }
|
return "Mockup old parser test plugin"
|
||||||
func (m *MockupInputPluginParserNew) SetParser(parser telegraf.Parser) { m.Parser = parser }
|
}
|
||||||
func (m *MockupInputPluginParserNew) SetParserFunc(f telegraf.ParserFunc) { m.ParserFunc = f }
|
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 ***/
|
/*** Mockup INPUT plugin for testing to avoid cyclic dependencies ***/
|
||||||
type MockupInputPlugin struct {
|
type MockupInputPlugin struct {
|
||||||
|
|
@ -817,9 +833,15 @@ type MockupInputPlugin struct {
|
||||||
parser telegraf.Parser
|
parser telegraf.Parser
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *MockupInputPlugin) SampleConfig() string { return "Mockup test input plugin" }
|
func (m *MockupInputPlugin) SampleConfig() string {
|
||||||
func (m *MockupInputPlugin) Gather(acc telegraf.Accumulator) error { return nil }
|
return "Mockup test input plugin"
|
||||||
func (m *MockupInputPlugin) SetParser(parser telegraf.Parser) { m.parser = parser }
|
}
|
||||||
|
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 ***/
|
/*** Mockup PROCESSOR plugin for testing to avoid cyclic dependencies ***/
|
||||||
type MockupProcessorPluginParser struct {
|
type MockupProcessorPluginParser struct {
|
||||||
|
|
@ -827,17 +849,27 @@ type MockupProcessorPluginParser struct {
|
||||||
ParserFunc telegraf.ParserFunc
|
ParserFunc telegraf.ParserFunc
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *MockupProcessorPluginParser) Start(acc telegraf.Accumulator) error { return nil }
|
func (m *MockupProcessorPluginParser) Start(acc telegraf.Accumulator) error {
|
||||||
func (m *MockupProcessorPluginParser) Stop() error { return nil }
|
return nil
|
||||||
|
}
|
||||||
|
func (m *MockupProcessorPluginParser) Stop() error {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
func (m *MockupProcessorPluginParser) SampleConfig() string {
|
func (m *MockupProcessorPluginParser) SampleConfig() string {
|
||||||
return "Mockup test processor plugin with parser"
|
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 {
|
func (m *MockupProcessorPluginParser) Add(metric telegraf.Metric, acc telegraf.Accumulator) error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
func (m *MockupProcessorPluginParser) SetParser(parser telegraf.Parser) { m.Parser = parser }
|
func (m *MockupProcessorPluginParser) SetParser(parser telegraf.Parser) {
|
||||||
func (m *MockupProcessorPluginParser) SetParserFunc(f telegraf.ParserFunc) { m.ParserFunc = f }
|
m.Parser = parser
|
||||||
|
}
|
||||||
|
func (m *MockupProcessorPluginParser) SetParserFunc(f telegraf.ParserFunc) {
|
||||||
|
m.ParserFunc = f
|
||||||
|
}
|
||||||
|
|
||||||
/*** Mockup OUTPUT plugin for testing to avoid cyclic dependencies ***/
|
/*** Mockup OUTPUT plugin for testing to avoid cyclic dependencies ***/
|
||||||
type MockupOuputPlugin struct {
|
type MockupOuputPlugin struct {
|
||||||
|
|
@ -849,25 +881,51 @@ type MockupOuputPlugin struct {
|
||||||
tls.ClientConfig
|
tls.ClientConfig
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *MockupOuputPlugin) Connect() error { return nil }
|
func (m *MockupOuputPlugin) Connect() error {
|
||||||
func (m *MockupOuputPlugin) Close() error { return nil }
|
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) 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
|
// Register the mockup plugin on loading
|
||||||
func init() {
|
func init() {
|
||||||
// Register the mockup input plugin for the required names
|
// Register the mockup input plugin for the required names
|
||||||
inputs.Add("parser_test_new", func() telegraf.Input { return &MockupInputPluginParserNew{} })
|
inputs.Add("parser_test_new", func() telegraf.Input {
|
||||||
inputs.Add("parser_test_old", func() telegraf.Input { return &MockupInputPluginParserOld{} })
|
return &MockupInputPluginParserNew{}
|
||||||
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("parser_test_old", func() telegraf.Input {
|
||||||
inputs.Add("memcached", func() telegraf.Input { return &MockupInputPlugin{} })
|
return &MockupInputPluginParserOld{}
|
||||||
inputs.Add("procstat", func() telegraf.Input { return &MockupInputPlugin{} })
|
})
|
||||||
|
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
|
// 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
|
// Register the mockup output plugin for the required names
|
||||||
outputs.Add("azure_monitor", func() telegraf.Output { return &MockupOuputPlugin{NamespacePrefix: "Telegraf/"} })
|
outputs.Add("azure_monitor", func() telegraf.Output {
|
||||||
outputs.Add("http", func() telegraf.Output { return &MockupOuputPlugin{} })
|
return &MockupOuputPlugin{NamespacePrefix: "Telegraf/"}
|
||||||
|
})
|
||||||
|
outputs.Add("http", func() telegraf.Output {
|
||||||
|
return &MockupOuputPlugin{}
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue