From 503c672ffb308cb99fd488336f20e71ea16a7ade Mon Sep 17 00:00:00 2001 From: greg linton Date: Wed, 28 Aug 2019 08:37:57 -0600 Subject: [PATCH] Avoid type switch on every call to gather --- plugins/inputs/file/file.go | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/plugins/inputs/file/file.go b/plugins/inputs/file/file.go index f517a86a..31f42680 100644 --- a/plugins/inputs/file/file.go +++ b/plugins/inputs/file/file.go @@ -15,6 +15,8 @@ type File struct { Files []string `toml:"files"` parser parsers.Parser + csvParser csv.Parser + csv bool filenames []string } @@ -51,11 +53,9 @@ func (f *File) Gather(acc telegraf.Accumulator) error { for _, k := range f.filenames { p := f.parser - switch pp := f.parser.(type) { - case *csv.Parser: - // get and use a unique parser per file (allows headers to be re-read) - p2 := *pp - p = &p2 + if f.csv { + pp := f.csvParser + p = &pp } metrics, err := f.readMetric(p, k) @@ -72,6 +72,13 @@ func (f *File) Gather(acc telegraf.Accumulator) error { func (f *File) SetParser(p parsers.Parser) { f.parser = p + switch pp := p.(type) { + case *csv.Parser: + // Save a copy of the csv parser (allows headers to be re-read) + f.csvParser = *pp + f.csv = true + } + } func (f *File) refreshFilePaths() error {