diff --git a/plugins/inputs/fail2ban/fail2ban.go b/plugins/inputs/fail2ban/fail2ban.go index fb1a30a16..e6f9d64f1 100644 --- a/plugins/inputs/fail2ban/fail2ban.go +++ b/plugins/inputs/fail2ban/fail2ban.go @@ -17,31 +17,30 @@ import ( var sampleConfig string var ( - execCommand = exec.Command // execCommand is used to mock commands in tests. + execCommand = exec.Command // execCommand is used to mock commands in tests. + metricsTargets = []struct { + target string + field string + }{ + { + target: "Currently failed:", + field: "failed", + }, + { + target: "Currently banned:", + field: "banned", + }, + } ) +const cmd = "fail2ban-client" + type Fail2ban struct { UseSudo bool `toml:"use_sudo"` Socket string `toml:"socket"` path string } -var metricsTargets = []struct { - target string - field string -}{ - { - target: "Currently failed:", - field: "failed", - }, - { - target: "Currently banned:", - field: "banned", - }, -} - -const cmd = "fail2ban-client" - func (*Fail2ban) SampleConfig() string { return sampleConfig } diff --git a/plugins/inputs/fibaro/fibaro.go b/plugins/inputs/fibaro/fibaro.go index 4f5113f32..0e1211848 100644 --- a/plugins/inputs/fibaro/fibaro.go +++ b/plugins/inputs/fibaro/fibaro.go @@ -21,7 +21,6 @@ var sampleConfig string const defaultTimeout = 5 * time.Second -// Fibaro contains connection information type Fibaro struct { URL string `toml:"url"` Username string `toml:"username"` @@ -32,6 +31,55 @@ type Fibaro struct { client *http.Client } +func (*Fibaro) SampleConfig() string { + return sampleConfig +} + +func (f *Fibaro) Init() error { + switch f.DeviceType { + case "": + f.DeviceType = "HC2" + case "HC2", "HC3": + default: + return errors.New("invalid option for device type") + } + + return nil +} + +func (f *Fibaro) Gather(acc telegraf.Accumulator) error { + if f.client == nil { + f.client = &http.Client{ + Transport: &http.Transport{ + Proxy: http.ProxyFromEnvironment, + }, + Timeout: time.Duration(f.Timeout), + } + } + + sections, err := f.getJSON("/api/sections") + if err != nil { + return err + } + rooms, err := f.getJSON("/api/rooms") + if err != nil { + return err + } + devices, err := f.getJSON("/api/devices") + if err != nil { + return err + } + + switch f.DeviceType { + case "HC2": + return hc2.Parse(acc, sections, rooms, devices) + case "HC3": + return hc3.Parse(acc, sections, rooms, devices) + } + + return nil +} + // getJSON connects, authenticates and reads JSON payload returned by Fibaro box func (f *Fibaro) getJSON(path string) ([]byte, error) { var requestURL = f.URL + path @@ -66,56 +114,6 @@ func (f *Fibaro) getJSON(path string) ([]byte, error) { return bodyBytes, nil } -func (f *Fibaro) Init() error { - switch f.DeviceType { - case "": - f.DeviceType = "HC2" - case "HC2", "HC3": - default: - return errors.New("invalid option for device type") - } - - return nil -} - -func (*Fibaro) SampleConfig() string { - return sampleConfig -} - -// Gather fetches all required information to output metrics -func (f *Fibaro) Gather(acc telegraf.Accumulator) error { - if f.client == nil { - f.client = &http.Client{ - Transport: &http.Transport{ - Proxy: http.ProxyFromEnvironment, - }, - Timeout: time.Duration(f.Timeout), - } - } - - sections, err := f.getJSON("/api/sections") - if err != nil { - return err - } - rooms, err := f.getJSON("/api/rooms") - if err != nil { - return err - } - devices, err := f.getJSON("/api/devices") - if err != nil { - return err - } - - switch f.DeviceType { - case "HC2": - return hc2.Parse(acc, sections, rooms, devices) - case "HC3": - return hc3.Parse(acc, sections, rooms, devices) - } - - return nil -} - func init() { inputs.Add("fibaro", func() telegraf.Input { return &Fibaro{ diff --git a/plugins/inputs/fibaro/hc2/parser.go b/plugins/inputs/fibaro/hc2/parser.go index 010c1694a..c5ddd9408 100644 --- a/plugins/inputs/fibaro/hc2/parser.go +++ b/plugins/inputs/fibaro/hc2/parser.go @@ -7,7 +7,8 @@ import ( "github.com/influxdata/telegraf" ) -func Parse(acc telegraf.Accumulator, sectionBytes, roomBytes, deviecsBytes []byte) error { +// Parse parses data from sections, rooms and devices, and adds measurements containing parsed data. +func Parse(acc telegraf.Accumulator, sectionBytes, roomBytes, devicesBytes []byte) error { var tmpSections []Sections if err := json.Unmarshal(sectionBytes, &tmpSections); err != nil { return err @@ -28,7 +29,7 @@ func Parse(acc telegraf.Accumulator, sectionBytes, roomBytes, deviecsBytes []byt } var devices []Devices - if err := json.Unmarshal(deviecsBytes, &devices); err != nil { + if err := json.Unmarshal(devicesBytes, &devices); err != nil { return err } diff --git a/plugins/inputs/fibaro/hc3/parser.go b/plugins/inputs/fibaro/hc3/parser.go index d89e7a181..76e60d2e7 100644 --- a/plugins/inputs/fibaro/hc3/parser.go +++ b/plugins/inputs/fibaro/hc3/parser.go @@ -9,7 +9,8 @@ import ( "github.com/influxdata/telegraf/internal" ) -func Parse(acc telegraf.Accumulator, sectionBytes, roomBytes, deviecsBytes []byte) error { +// Parse parses data from sections, rooms and devices, and adds measurements containing parsed data. +func Parse(acc telegraf.Accumulator, sectionBytes, roomBytes, devicesBytes []byte) error { var tmpSections []Sections if err := json.Unmarshal(sectionBytes, &tmpSections); err != nil { return err @@ -29,7 +30,7 @@ func Parse(acc telegraf.Accumulator, sectionBytes, roomBytes, deviecsBytes []byt } var devices []Devices - if err := json.Unmarshal(deviecsBytes, &devices); err != nil { + if err := json.Unmarshal(devicesBytes, &devices); err != nil { return err } diff --git a/plugins/inputs/file/file.go b/plugins/inputs/file/file.go index 127eed78b..3fba04e2e 100644 --- a/plugins/inputs/file/file.go +++ b/plugins/inputs/file/file.go @@ -45,6 +45,10 @@ func (f *File) Init() error { return err } +func (f *File) SetParserFunc(fn telegraf.ParserFunc) { + f.parserFunc = fn +} + func (f *File) Gather(acc telegraf.Accumulator) error { err := f.refreshFilePaths() if err != nil { @@ -71,10 +75,6 @@ func (f *File) Gather(acc telegraf.Accumulator) error { return nil } -func (f *File) SetParserFunc(fn telegraf.ParserFunc) { - f.parserFunc = fn -} - func (f *File) refreshFilePaths() error { var allFiles []string for _, file := range f.Files { diff --git a/plugins/inputs/filecount/filecount.go b/plugins/inputs/filecount/filecount.go index 4dc46fb6e..85c228b7b 100644 --- a/plugins/inputs/filecount/filecount.go +++ b/plugins/inputs/filecount/filecount.go @@ -21,22 +21,41 @@ import ( var sampleConfig string type FileCount struct { - Directory string `toml:"directory" deprecated:"1.9.0;1.35.0;use 'directories' instead"` - Directories []string - Name string - Recursive bool - RegularOnly bool - FollowSymlinks bool - Size config.Size + Directory string `toml:"directory" deprecated:"1.9.0;1.35.0;use 'directories' instead"` + Directories []string `toml:"directories"` + Name string `toml:"name"` + Recursive bool `toml:"recursive"` + RegularOnly bool `toml:"regular_only"` + FollowSymlinks bool `toml:"follow_symlinks"` + Size config.Size `toml:"size"` MTime config.Duration `toml:"mtime"` - fileFilters []fileFilterFunc - globPaths []globpath.GlobPath - Fs fileSystem - Log telegraf.Logger + Log telegraf.Logger `toml:"-"` + + fs fileSystem + fileFilters []fileFilterFunc + globPaths []globpath.GlobPath } type fileFilterFunc func(os.FileInfo) (bool, error) +func (*FileCount) SampleConfig() string { + return sampleConfig +} + +func (fc *FileCount) Gather(acc telegraf.Accumulator) error { + if fc.globPaths == nil { + fc.initGlobPaths(acc) + } + + for _, glob := range fc.globPaths { + for _, dir := range fc.onlyDirectories(glob.GetRoots()) { + fc.count(acc, dir, glob) + } + } + + return nil +} + func rejectNilFilters(filters []fileFilterFunc) []fileFilterFunc { filtered := make([]fileFilterFunc, 0, len(filters)) for _, f := range filters { @@ -226,29 +245,11 @@ func (fc *FileCount) filter(file os.FileInfo) (bool, error) { return true, nil } -func (*FileCount) SampleConfig() string { - return sampleConfig -} - -func (fc *FileCount) Gather(acc telegraf.Accumulator) error { - if fc.globPaths == nil { - fc.initGlobPaths(acc) - } - - for _, glob := range fc.globPaths { - for _, dir := range fc.onlyDirectories(glob.GetRoots()) { - fc.count(acc, dir, glob) - } - } - - return nil -} - func (fc *FileCount) resolveLink(path string) (os.FileInfo, error) { if fc.FollowSymlinks { - return fc.Fs.Stat(path) + return fc.fs.stat(path) } - fi, err := fc.Fs.Lstat(path) + fi, err := fc.fs.lstat(path) if err != nil { return fi, err } @@ -262,7 +263,7 @@ func (fc *FileCount) resolveLink(path string) (os.FileInfo, error) { func (fc *FileCount) onlyDirectories(directories []string) []string { out := make([]string, 0) for _, path := range directories { - info, err := fc.Fs.Stat(path) + info, err := fc.fs.stat(path) if err == nil && info.IsDir() { out = append(out, path) } @@ -295,7 +296,7 @@ func (fc *FileCount) initGlobPaths(acc telegraf.Accumulator) { } } -func NewFileCount() *FileCount { +func newFileCount() *FileCount { return &FileCount{ Directory: "", Directories: []string{}, @@ -306,12 +307,12 @@ func NewFileCount() *FileCount { Size: config.Size(0), MTime: config.Duration(0), fileFilters: nil, - Fs: osFS{}, + fs: osFS{}, } } func init() { inputs.Add("filecount", func() telegraf.Input { - return NewFileCount() + return newFileCount() }) } diff --git a/plugins/inputs/filecount/filecount_test.go b/plugins/inputs/filecount/filecount_test.go index 1e89d0cbc..0139be7ad 100644 --- a/plugins/inputs/filecount/filecount_test.go +++ b/plugins/inputs/filecount/filecount_test.go @@ -13,10 +13,11 @@ import ( "testing" "time" + "github.com/stretchr/testify/require" + "github.com/influxdata/telegraf" "github.com/influxdata/telegraf/config" "github.com/influxdata/telegraf/testutil" - "github.com/stretchr/testify/require" ) func TestNoFilters(t *testing.T) { @@ -147,7 +148,7 @@ func TestDirectoryWithTrailingSlash(t *testing.T) { Directories: []string{getTestdataDir() + string(filepath.Separator)}, Name: "*", Recursive: true, - Fs: getFakeFileSystem(getTestdataDir()), + fs: getFakeFileSystem(getTestdataDir()), } var acc testutil.Accumulator @@ -184,7 +185,7 @@ func getNoFilterFileCount() FileCount { Size: config.Size(0), MTime: config.Duration(0), fileFilters: nil, - Fs: getFakeFileSystem(getTestdataDir()), + fs: getFakeFileSystem(getTestdataDir()), } } diff --git a/plugins/inputs/filecount/filesystem_helpers.go b/plugins/inputs/filecount/filesystem_helpers.go index cd55afba9..0902853ca 100644 --- a/plugins/inputs/filecount/filesystem_helpers.go +++ b/plugins/inputs/filecount/filesystem_helpers.go @@ -12,9 +12,9 @@ import ( */ type fileSystem interface { - Open(name string) (file, error) - Stat(name string) (os.FileInfo, error) - Lstat(name string) (os.FileInfo, error) + open(name string) (file, error) + stat(name string) (os.FileInfo, error) + lstat(name string) (os.FileInfo, error) } type file interface { @@ -28,6 +28,6 @@ type file interface { // osFS implements fileSystem using the local disk type osFS struct{} -func (osFS) Open(name string) (file, error) { return os.Open(name) } -func (osFS) Stat(name string) (os.FileInfo, error) { return os.Stat(name) } -func (osFS) Lstat(name string) (os.FileInfo, error) { return os.Lstat(name) } +func (osFS) open(name string) (file, error) { return os.Open(name) } +func (osFS) stat(name string) (os.FileInfo, error) { return os.Stat(name) } +func (osFS) lstat(name string) (os.FileInfo, error) { return os.Lstat(name) } diff --git a/plugins/inputs/filecount/filesystem_helpers_notwindows.go b/plugins/inputs/filecount/filesystem_helpers_notwindows.go index ca2dbc074..e1a11c78e 100644 --- a/plugins/inputs/filecount/filesystem_helpers_notwindows.go +++ b/plugins/inputs/filecount/filesystem_helpers_notwindows.go @@ -40,18 +40,18 @@ func (f fakeFileInfo) ModTime() time.Time { return f.modtime } func (f fakeFileInfo) IsDir() bool { return f.isdir } func (f fakeFileInfo) Sys() interface{} { return f.sys } -func (f fakeFileSystem) Open(name string) (file, error) { +func (f fakeFileSystem) open(name string) (file, error) { return nil, &os.PathError{Op: "Open", Path: name, Err: errors.New("not implemented by fake filesystem")} } -func (f fakeFileSystem) Stat(name string) (os.FileInfo, error) { +func (f fakeFileSystem) stat(name string) (os.FileInfo, error) { if fakeInfo, found := f.files[name]; found { return fakeInfo, nil } return nil, &os.PathError{Op: "Stat", Path: name, Err: errors.New("no such file or directory")} } -func (f fakeFileSystem) Lstat(name string) (os.FileInfo, error) { +func (f fakeFileSystem) lstat(name string) (os.FileInfo, error) { // not able to test with symlinks currently - return f.Stat(name) + return f.stat(name) } diff --git a/plugins/inputs/filecount/filesystem_helpers_test.go b/plugins/inputs/filecount/filesystem_helpers_test.go index e27a2ab3c..b66643b7b 100644 --- a/plugins/inputs/filecount/filesystem_helpers_test.go +++ b/plugins/inputs/filecount/filesystem_helpers_test.go @@ -17,7 +17,7 @@ func TestMTime(t *testing.T) { mtime := time.Date(2015, time.December, 14, 18, 25, 5, 0, time.UTC) fs := getTestFileSystem() - fileInfo, err := fs.Stat("/testdata/foo") + fileInfo, err := fs.stat("/testdata/foo") require.NoError(t, err) require.Equal(t, mtime, fileInfo.ModTime()) } @@ -26,25 +26,24 @@ func TestSize(t *testing.T) { // this is the time our foo file should have size := int64(4096) fs := getTestFileSystem() - fileInfo, err := fs.Stat("/testdata") + fileInfo, err := fs.stat("/testdata") require.NoError(t, err) require.Equal(t, size, fileInfo.Size()) } func TestIsDir(t *testing.T) { // this is the time our foo file should have - dir := true fs := getTestFileSystem() - fileInfo, err := fs.Stat("/testdata") + fileInfo, err := fs.stat("/testdata") require.NoError(t, err) - require.Equal(t, dir, fileInfo.IsDir()) + require.True(t, fileInfo.IsDir()) } func TestRealFS(t *testing.T) { // test that the default (non-test) empty FS causes expected behaviour var fs fileSystem = osFS{} // the following file exists on disk - and not in our fake fs - fileInfo, err := fs.Stat(getTestdataDir() + "/qux") + fileInfo, err := fs.stat(getTestdataDir() + "/qux") require.NoError(t, err) require.False(t, fileInfo.IsDir()) require.Equal(t, int64(446), fileInfo.Size()) @@ -53,10 +52,10 @@ func TestRealFS(t *testing.T) { fs = getTestFileSystem() // now, the same test as above will return an error as the file doesn't exist in our fake fs expectedError := "Stat " + getTestdataDir() + "/qux: No such file or directory" - _, err = fs.Stat(getTestdataDir() + "/qux") + _, err = fs.stat(getTestdataDir() + "/qux") require.Error(t, err, expectedError) // and verify that what we DO expect to find, we do - fileInfo, err = fs.Stat("/testdata/foo") + fileInfo, err = fs.stat("/testdata/foo") require.NoError(t, err) require.NotNil(t, fileInfo) } diff --git a/plugins/inputs/filestat/filestat.go b/plugins/inputs/filestat/filestat.go index 113084e4c..8bdca7dfb 100644 --- a/plugins/inputs/filestat/filestat.go +++ b/plugins/inputs/filestat/filestat.go @@ -17,10 +17,10 @@ import ( var sampleConfig string type FileStat struct { - Md5 bool - Files []string + Md5 bool `toml:"md5"` + Files []string `toml:"files"` - Log telegraf.Logger + Log telegraf.Logger `toml:"-"` // maps full file paths to globmatch obj globs map[string]*globpath.GlobPath @@ -31,14 +31,6 @@ type FileStat struct { filesWithErrors map[string]bool } -func NewFileStat() *FileStat { - return &FileStat{ - globs: make(map[string]*globpath.GlobPath), - missingFiles: make(map[string]bool), - filesWithErrors: make(map[string]bool), - } -} - func (*FileStat) SampleConfig() string { return sampleConfig } @@ -134,8 +126,16 @@ func getMd5(file string) (string, error) { return hex.EncodeToString(hash.Sum(nil)), nil } +func newFileStat() *FileStat { + return &FileStat{ + globs: make(map[string]*globpath.GlobPath), + missingFiles: make(map[string]bool), + filesWithErrors: make(map[string]bool), + } +} + func init() { inputs.Add("filestat", func() telegraf.Input { - return NewFileStat() + return newFileStat() }) } diff --git a/plugins/inputs/filestat/filestat_test.go b/plugins/inputs/filestat/filestat_test.go index 998e1ef5e..2950d2d30 100644 --- a/plugins/inputs/filestat/filestat_test.go +++ b/plugins/inputs/filestat/filestat_test.go @@ -15,12 +15,10 @@ import ( "github.com/influxdata/telegraf/testutil" ) -var ( - testdataDir = getTestdataDir() -) +var testdataDir = getTestdataDir() func TestGatherNoMd5(t *testing.T) { - fs := NewFileStat() + fs := newFileStat() fs.Log = testutil.Logger{} fs.Files = []string{ filepath.Join(testdataDir, "log1.log"), @@ -50,7 +48,7 @@ func TestGatherNoMd5(t *testing.T) { } func TestGatherExplicitFiles(t *testing.T) { - fs := NewFileStat() + fs := newFileStat() fs.Log = testutil.Logger{} fs.Md5 = true fs.Files = []string{ @@ -83,7 +81,7 @@ func TestGatherExplicitFiles(t *testing.T) { } func TestNonExistentFile(t *testing.T) { - fs := NewFileStat() + fs := newFileStat() fs.Log = testutil.Logger{} fs.Md5 = true fs.Files = []string{ @@ -100,7 +98,7 @@ func TestNonExistentFile(t *testing.T) { } func TestGatherGlob(t *testing.T) { - fs := NewFileStat() + fs := newFileStat() fs.Log = testutil.Logger{} fs.Md5 = true fs.Files = []string{ @@ -126,7 +124,7 @@ func TestGatherGlob(t *testing.T) { } func TestGatherSuperAsterisk(t *testing.T) { - fs := NewFileStat() + fs := newFileStat() fs.Log = testutil.Logger{} fs.Md5 = true fs.Files = []string{ @@ -159,7 +157,7 @@ func TestGatherSuperAsterisk(t *testing.T) { } func TestModificationTime(t *testing.T) { - fs := NewFileStat() + fs := newFileStat() fs.Log = testutil.Logger{} fs.Files = []string{ filepath.Join(testdataDir, "log1.log"), @@ -177,7 +175,7 @@ func TestModificationTime(t *testing.T) { } func TestNoModificationTime(t *testing.T) { - fs := NewFileStat() + fs := newFileStat() fs.Log = testutil.Logger{} fs.Files = []string{ filepath.Join(testdataDir, "non_existent_file"), diff --git a/plugins/inputs/fireboard/fireboard.go b/plugins/inputs/fireboard/fireboard.go index 091e54c2b..bf45fbe53 100644 --- a/plugins/inputs/fireboard/fireboard.go +++ b/plugins/inputs/fireboard/fireboard.go @@ -18,7 +18,6 @@ import ( //go:embed sample.conf var sampleConfig string -// Fireboard gathers statistics from the fireboard.io servers type Fireboard struct { AuthToken string `toml:"auth_token"` URL string `toml:"url"` @@ -27,35 +26,23 @@ type Fireboard struct { client *http.Client } -// NewFireboard return a new instance of Fireboard with a default http client -func NewFireboard() *Fireboard { - tr := &http.Transport{ResponseHeaderTimeout: 3 * time.Second} - client := &http.Client{ - Transport: tr, - Timeout: 4 * time.Second, - } - return &Fireboard{client: client} -} - -// RTT fireboardStats represents the data that is received from Fireboard -type RTT struct { +type rtt struct { Temp float64 `json:"temp"` Channel int64 `json:"channel"` - Degreetype int `json:"degreetype"` + DegreeType int `json:"degreetype"` Created string `json:"created"` } type fireboardStats struct { Title string `json:"title"` UUID string `json:"uuid"` - Latesttemps []RTT `json:"latest_temps"` + LatestTemps []rtt `json:"latest_temps"` } func (*Fireboard) SampleConfig() string { return sampleConfig } -// Init the things func (r *Fireboard) Init() error { if len(r.AuthToken) == 0 { return errors.New("you must specify an authToken") @@ -73,7 +60,6 @@ func (r *Fireboard) Init() error { return nil } -// Gather Reads stats from all configured servers. func (r *Fireboard) Gather(acc telegraf.Accumulator) error { // Perform the GET request to the fireboard servers req, err := http.NewRequest("GET", r.URL, nil) @@ -122,12 +108,12 @@ func scale(n int) string { func (r *Fireboard) gatherTemps(s fireboardStats, acc telegraf.Accumulator) { // Construct lookup for scale values - for _, t := range s.Latesttemps { + for _, t := range s.LatestTemps { tags := map[string]string{ "title": s.Title, "uuid": s.UUID, "channel": strconv.FormatInt(t.Channel, 10), - "scale": scale(t.Degreetype), + "scale": scale(t.DegreeType), } fields := map[string]interface{}{ "temperature": t.Temp, @@ -136,8 +122,17 @@ func (r *Fireboard) gatherTemps(s fireboardStats, acc telegraf.Accumulator) { } } +func newFireboard() *Fireboard { + tr := &http.Transport{ResponseHeaderTimeout: 3 * time.Second} + client := &http.Client{ + Transport: tr, + Timeout: 4 * time.Second, + } + return &Fireboard{client: client} +} + func init() { inputs.Add("fireboard", func() telegraf.Input { - return NewFireboard() + return newFireboard() }) } diff --git a/plugins/inputs/fireboard/fireboard_test.go b/plugins/inputs/fireboard/fireboard_test.go index 7ebaebe44..7f4c18720 100644 --- a/plugins/inputs/fireboard/fireboard_test.go +++ b/plugins/inputs/fireboard/fireboard_test.go @@ -27,7 +27,7 @@ func TestFireboard(t *testing.T) { require.NoError(t, err) // Create a new fb instance with our given test server - fireboard := NewFireboard() + fireboard := newFireboard() fireboard.AuthToken = "b4bb6e6a7b6231acb9f71b304edb2274693d8849" fireboard.URL = u.String() diff --git a/plugins/inputs/fluentd/fluentd.go b/plugins/inputs/fluentd/fluentd.go index 2bdbc15c4..2515b7dae 100644 --- a/plugins/inputs/fluentd/fluentd.go +++ b/plugins/inputs/fluentd/fluentd.go @@ -20,11 +20,11 @@ var sampleConfig string const measurement = "fluentd" -// Fluentd - plugin main structure type Fluentd struct { - Endpoint string - Exclude []string - client *http.Client + Endpoint string `toml:"endpoint"` + Exclude []string `toml:"exclude"` + + client *http.Client } type endpointInfo struct { @@ -51,32 +51,10 @@ type pluginData struct { AvailBufferSpaceRatios *float64 `json:"buffer_available_buffer_space_ratios"` } -// parse JSON from fluentd Endpoint -// Parameters: -// -// data: unprocessed json received from endpoint -// -// Returns: -// -// pluginData: slice that contains parsed plugins -// error: error that may have occurred -func parse(data []byte) (datapointArray []pluginData, err error) { - var endpointData endpointInfo - - if err = json.Unmarshal(data, &endpointData); err != nil { - err = errors.New("processing JSON structure") - return nil, err - } - - datapointArray = append(datapointArray, endpointData.Payload...) - return datapointArray, err -} - func (*Fluentd) SampleConfig() string { return sampleConfig } -// Gather - Main code responsible for gathering, processing and creating metrics func (h *Fluentd) Gather(acc telegraf.Accumulator) error { _, err := url.Parse(h.Endpoint) if err != nil { @@ -219,6 +197,27 @@ func (h *Fluentd) Gather(acc telegraf.Accumulator) error { return nil } +// parse JSON from fluentd Endpoint +// Parameters: +// +// data: unprocessed json received from endpoint +// +// Returns: +// +// pluginData: slice that contains parsed plugins +// error: error that may have occurred +func parse(data []byte) (datapointArray []pluginData, err error) { + var endpointData endpointInfo + + if err = json.Unmarshal(data, &endpointData); err != nil { + err = errors.New("processing JSON structure") + return nil, err + } + + datapointArray = append(datapointArray, endpointData.Payload...) + return datapointArray, err +} + func init() { inputs.Add("fluentd", func() telegraf.Input { return &Fluentd{} }) }