feat: Migrate nagios parser to new style (#11402)

This commit is contained in:
Sebastian Spaink 2022-06-30 13:20:32 -05:00 committed by GitHub
parent 7d83b076c2
commit 9e50853ab8
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 29 additions and 17 deletions

View File

@ -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 {

View File

@ -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"

View File

@ -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
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
}

View File

@ -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 {

View File

@ -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