From 9e50853ab8e293827f25a3bb1aaf3c5dc8f9d1a1 Mon Sep 17 00:00:00 2001 From: Sebastian Spaink <3441183+sspaink@users.noreply.github.com> Date: Thu, 30 Jun 2022 13:20:32 -0500 Subject: [PATCH] feat: Migrate nagios parser to new style (#11402) --- plugins/inputs/exec/exec.go | 2 +- plugins/parsers/all/all.go | 1 + plugins/parsers/nagios/parser.go | 32 +++++++++++++++++++++------ plugins/parsers/nagios/parser_test.go | 4 ++-- plugins/parsers/registry.go | 7 ------ 5 files changed, 29 insertions(+), 17 deletions(-) diff --git a/plugins/inputs/exec/exec.go b/plugins/inputs/exec/exec.go index 5fbca698c..96a8fe072 100644 --- a/plugins/inputs/exec/exec.go +++ b/plugins/inputs/exec/exec.go @@ -135,7 +135,7 @@ func (*Exec) SampleConfig() string { func (e *Exec) ProcessCommand(command string, acc telegraf.Accumulator, wg *sync.WaitGroup) { defer wg.Done() - _, isNagios := e.parser.(*nagios.NagiosParser) + _, isNagios := e.parser.(*nagios.Parser) out, errBuf, runErr := e.runner.Run(command, e.Environment, time.Duration(e.Timeout)) if !isNagios && runErr != nil { diff --git a/plugins/parsers/all/all.go b/plugins/parsers/all/all.go index 441d53866..fc99b3e22 100644 --- a/plugins/parsers/all/all.go +++ b/plugins/parsers/all/all.go @@ -11,6 +11,7 @@ import ( _ "github.com/influxdata/telegraf/plugins/parsers/json" _ "github.com/influxdata/telegraf/plugins/parsers/json_v2" _ "github.com/influxdata/telegraf/plugins/parsers/logfmt" + _ "github.com/influxdata/telegraf/plugins/parsers/nagios" _ "github.com/influxdata/telegraf/plugins/parsers/value" _ "github.com/influxdata/telegraf/plugins/parsers/wavefront" _ "github.com/influxdata/telegraf/plugins/parsers/xpath" diff --git a/plugins/parsers/nagios/parser.go b/plugins/parsers/nagios/parser.go index 22aa5c0df..a13cfd55e 100644 --- a/plugins/parsers/nagios/parser.go +++ b/plugins/parsers/nagios/parser.go @@ -13,6 +13,7 @@ import ( "github.com/influxdata/telegraf" "github.com/influxdata/telegraf/metric" + "github.com/influxdata/telegraf/plugins/parsers" ) // unknownExitCode is the nagios unknown status code @@ -85,10 +86,11 @@ func AddState(runErr error, errMessage []byte, metrics []telegraf.Metric) []tele return append(metrics, m) } -type NagiosParser struct { - MetricName string - DefaultTags map[string]string - Log telegraf.Logger `toml:"-"` +type Parser struct { + DefaultTags map[string]string `toml:"-"` + Log telegraf.Logger `toml:"-"` + + metricName string } // Got from Alignak @@ -98,16 +100,16 @@ var ( nagiosRegExp = regexp.MustCompile(`^([^=]+)=([\d\.\-\+eE]+)([\w\/%]*);?([\d\.\-\+eE:~@]+)?;?([\d\.\-\+eE:~@]+)?;?([\d\.\-\+eE]+)?;?([\d\.\-\+eE]+)?;?\s*`) ) -func (p *NagiosParser) ParseLine(line string) (telegraf.Metric, error) { +func (p *Parser) ParseLine(line string) (telegraf.Metric, error) { metrics, err := p.Parse([]byte(line)) return metrics[0], err } -func (p *NagiosParser) SetDefaultTags(tags map[string]string) { +func (p *Parser) SetDefaultTags(tags map[string]string) { p.DefaultTags = tags } -func (p *NagiosParser) Parse(buf []byte) ([]telegraf.Metric, error) { +func (p *Parser) Parse(buf []byte) ([]telegraf.Metric, error) { ts := time.Now().UTC() s := bufio.NewScanner(bytes.NewReader(buf)) @@ -308,3 +310,19 @@ func parseThreshold(threshold string) (min float64, max float64, err error) { return min, max, err } + +func init() { + // Register parser + parsers.Add("nagios", + func(defaultMetricName string) telegraf.Parser { + return &Parser{metricName: defaultMetricName} + }, + ) +} + +// InitFromConfig is a compatibility function to construct the parser the old way +func (p *Parser) InitFromConfig(config *parsers.Config) error { + p.metricName = config.MetricName + p.DefaultTags = config.DefaultTags + return nil +} diff --git a/plugins/parsers/nagios/parser_test.go b/plugins/parsers/nagios/parser_test.go index 79a54ffa7..dd3dd98d5 100644 --- a/plugins/parsers/nagios/parser_test.go +++ b/plugins/parsers/nagios/parser_test.go @@ -215,8 +215,8 @@ func assertNagiosState(t *testing.T, m telegraf.Metric, f map[string]interface{} } func TestParse(t *testing.T) { - parser := NagiosParser{ - MetricName: "nagios_test", + parser := Parser{ + metricName: "nagios_test", } tests := []struct { diff --git a/plugins/parsers/registry.go b/plugins/parsers/registry.go index eef89f049..4be105f53 100644 --- a/plugins/parsers/registry.go +++ b/plugins/parsers/registry.go @@ -6,7 +6,6 @@ import ( "github.com/influxdata/telegraf" "github.com/influxdata/telegraf/plugins/parsers/influx" "github.com/influxdata/telegraf/plugins/parsers/influx/influx_upstream" - "github.com/influxdata/telegraf/plugins/parsers/nagios" "github.com/influxdata/telegraf/plugins/parsers/prometheus" "github.com/influxdata/telegraf/plugins/parsers/prometheusremotewrite" "github.com/influxdata/telegraf/plugins/parsers/temporary/json_v2" @@ -203,8 +202,6 @@ func NewParser(config *Config) (Parser, error) { } else { parser, err = NewInfluxParser() } - case "nagios": - parser, err = NewNagiosParser() case "prometheus": parser, err = NewPrometheusParser( config.DefaultTags, @@ -230,10 +227,6 @@ func NewParser(config *Config) (Parser, error) { return parser, err } -func NewNagiosParser() (Parser, error) { - return &nagios.NagiosParser{}, nil -} - func NewInfluxParser() (Parser, error) { handler := influx.NewMetricHandler() return influx.NewParser(handler), nil