Show platform not supported warning only on plugin creation (#6801)

This commit is contained in:
Daniel Nelson 2020-01-02 16:15:48 -08:00 committed by GitHub
parent 25e1636775
commit 8831651799
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 112 additions and 102 deletions

View File

@ -2,6 +2,8 @@ package ethtool
import ( import (
"net" "net"
"github.com/influxdata/telegraf"
) )
type Command interface { type Command interface {
@ -18,6 +20,8 @@ type Ethtool struct {
// This is the list of interface names to ignore // This is the list of interface names to ignore
InterfaceExclude []string `toml:"interface_exclude"` InterfaceExclude []string `toml:"interface_exclude"`
Log telegraf.Logger `toml:"-"`
// the ethtool command // the ethtool command
command Command command Command
} }

View File

@ -3,19 +3,21 @@
package ethtool package ethtool
import ( import (
"log"
"github.com/influxdata/telegraf" "github.com/influxdata/telegraf"
"github.com/influxdata/telegraf/plugins/inputs" "github.com/influxdata/telegraf/plugins/inputs"
) )
func (e *Ethtool) Init() error {
e.Log.Warn("Current platform is not supported")
return nil
}
func (e *Ethtool) Gather(acc telegraf.Accumulator) error { func (e *Ethtool) Gather(acc telegraf.Accumulator) error {
return nil return nil
} }
func init() { func init() {
inputs.Add(pluginName, func() telegraf.Input { inputs.Add(pluginName, func() telegraf.Input {
log.Print("W! [inputs.ethtool] Current platform is not supported")
return &Ethtool{} return &Ethtool{}
}) })
} }

View File

@ -1,20 +1,16 @@
// +build linux
package synproxy package synproxy
import ( import (
"bufio"
"fmt"
"os" "os"
"path" "path"
"strconv"
"strings"
"github.com/influxdata/telegraf" "github.com/influxdata/telegraf"
"github.com/influxdata/telegraf/plugins/inputs" "github.com/influxdata/telegraf/plugins/inputs"
) )
type Synproxy struct { type Synproxy struct {
Log telegraf.Logger `toml:"-"`
// Synproxy stats filename (proc filesystem) // Synproxy stats filename (proc filesystem)
statFile string statFile string
} }
@ -27,83 +23,6 @@ func (k *Synproxy) SampleConfig() string {
return "" return ""
} }
func (k *Synproxy) Gather(acc telegraf.Accumulator) error {
data, err := k.getSynproxyStat()
if err != nil {
return err
}
acc.AddCounter("synproxy", data, map[string]string{})
return nil
}
func inSlice(haystack []string, needle string) bool {
for _, val := range haystack {
if needle == val {
return true
}
}
return false
}
func (k *Synproxy) getSynproxyStat() (map[string]interface{}, error) {
var hname []string
counters := []string{"entries", "syn_received", "cookie_invalid", "cookie_valid", "cookie_retrans", "conn_reopened"}
fields := make(map[string]interface{})
// Open synproxy file in proc filesystem
file, err := os.Open(k.statFile)
if err != nil {
return nil, err
}
defer file.Close()
// Initialise expected fields
for _, val := range counters {
fields[val] = uint32(0)
}
scanner := bufio.NewScanner(file)
// Read header row
if scanner.Scan() {
line := scanner.Text()
// Parse fields separated by whitespace
dataFields := strings.Fields(line)
for _, val := range dataFields {
if !inSlice(counters, val) {
val = ""
}
hname = append(hname, val)
}
}
if len(hname) == 0 {
return nil, fmt.Errorf("invalid data")
}
// Read data rows
for scanner.Scan() {
line := scanner.Text()
// Parse fields separated by whitespace
dataFields := strings.Fields(line)
// If number of data fields do not match number of header fields
if len(dataFields) != len(hname) {
return nil, fmt.Errorf("invalid number of columns in data, expected %d found %d", len(hname),
len(dataFields))
}
for i, val := range dataFields {
// Convert from hexstring to int32
x, err := strconv.ParseUint(val, 16, 32)
// If field is not a valid hexstring
if err != nil {
return nil, fmt.Errorf("invalid value '%s' found", val)
}
if hname[i] != "" {
fields[hname[i]] = fields[hname[i]].(uint32) + uint32(x)
}
}
}
return fields, nil
}
func getHostProc() string { func getHostProc() string {
procPath := "/proc" procPath := "/proc"
if os.Getenv("HOST_PROC") != "" { if os.Getenv("HOST_PROC") != "" {

View File

@ -0,0 +1,90 @@
// +build linux
package synproxy
import (
"bufio"
"fmt"
"os"
"strconv"
"strings"
"github.com/influxdata/telegraf"
)
func (k *Synproxy) Gather(acc telegraf.Accumulator) error {
data, err := k.getSynproxyStat()
if err != nil {
return err
}
acc.AddCounter("synproxy", data, map[string]string{})
return nil
}
func inSlice(haystack []string, needle string) bool {
for _, val := range haystack {
if needle == val {
return true
}
}
return false
}
func (k *Synproxy) getSynproxyStat() (map[string]interface{}, error) {
var hname []string
counters := []string{"entries", "syn_received", "cookie_invalid", "cookie_valid", "cookie_retrans", "conn_reopened"}
fields := make(map[string]interface{})
// Open synproxy file in proc filesystem
file, err := os.Open(k.statFile)
if err != nil {
return nil, err
}
defer file.Close()
// Initialise expected fields
for _, val := range counters {
fields[val] = uint32(0)
}
scanner := bufio.NewScanner(file)
// Read header row
if scanner.Scan() {
line := scanner.Text()
// Parse fields separated by whitespace
dataFields := strings.Fields(line)
for _, val := range dataFields {
if !inSlice(counters, val) {
val = ""
}
hname = append(hname, val)
}
}
if len(hname) == 0 {
return nil, fmt.Errorf("invalid data")
}
// Read data rows
for scanner.Scan() {
line := scanner.Text()
// Parse fields separated by whitespace
dataFields := strings.Fields(line)
// If number of data fields do not match number of header fields
if len(dataFields) != len(hname) {
return nil, fmt.Errorf("invalid number of columns in data, expected %d found %d", len(hname),
len(dataFields))
}
for i, val := range dataFields {
// Convert from hexstring to int32
x, err := strconv.ParseUint(val, 16, 32)
// If field is not a valid hexstring
if err != nil {
return nil, fmt.Errorf("invalid value '%s' found", val)
}
if hname[i] != "" {
fields[hname[i]] = fields[hname[i]].(uint32) + uint32(x)
}
}
}
return fields, nil
}

View File

@ -3,29 +3,21 @@
package synproxy package synproxy
import ( import (
"log"
"github.com/influxdata/telegraf" "github.com/influxdata/telegraf"
"github.com/influxdata/telegraf/plugins/inputs" "github.com/influxdata/telegraf/plugins/inputs"
) )
type Synproxy struct{} func (k *Synproxy) Init() error {
k.Log.Warn("Current platform is not supported")
return nil
}
func (k *Synproxy) Gather(acc telegraf.Accumulator) error { func (k *Synproxy) Gather(acc telegraf.Accumulator) error {
return nil return nil
} }
func (k *Synproxy) Description() string {
return ""
}
func (k *Synproxy) SampleConfig() string {
return ""
}
func init() { func init() {
inputs.Add("synproxy", func() telegraf.Input { inputs.Add("synproxy", func() telegraf.Input {
log.Print("W! [inputs.synproxy] Current platform is not supported")
return &Synproxy{} return &Synproxy{}
}) })
} }

View File

@ -7,7 +7,8 @@ import (
// Wireless is used to store configuration values. // Wireless is used to store configuration values.
type Wireless struct { type Wireless struct {
HostProc string `toml:"host_proc"` HostProc string `toml:"host_proc"`
Log telegraf.Logger `toml:"-"`
} }
var sampleConfig = ` var sampleConfig = `

View File

@ -3,19 +3,21 @@
package wireless package wireless
import ( import (
"log"
"github.com/influxdata/telegraf" "github.com/influxdata/telegraf"
"github.com/influxdata/telegraf/plugins/inputs" "github.com/influxdata/telegraf/plugins/inputs"
) )
func (w *Wireless) Init() error {
w.Log.Warn("Current platform is not supported")
return nil
}
func (w *Wireless) Gather(acc telegraf.Accumulator) error { func (w *Wireless) Gather(acc telegraf.Accumulator) error {
return nil return nil
} }
func init() { func init() {
inputs.Add("wireless", func() telegraf.Input { inputs.Add("wireless", func() telegraf.Input {
log.Print("W! [inputs.wireless] Current platform is not supported")
return &Wireless{} return &Wireless{}
}) })
} }