Adding upstream version 1.34.4.
Signed-off-by: Daniel Baumann <daniel@debian.org>
This commit is contained in:
parent
e393c3af3f
commit
4978089aab
4963 changed files with 677545 additions and 0 deletions
120
plugins/inputs/wireless/wireless_linux.go
Normal file
120
plugins/inputs/wireless/wireless_linux.go
Normal file
|
@ -0,0 +1,120 @@
|
|||
//go:build linux
|
||||
|
||||
package wireless
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"os"
|
||||
"path"
|
||||
"strconv"
|
||||
"strings"
|
||||
|
||||
"github.com/influxdata/telegraf"
|
||||
"github.com/influxdata/telegraf/internal"
|
||||
"github.com/influxdata/telegraf/plugins/inputs"
|
||||
)
|
||||
|
||||
var newLineByte = []byte("\n")
|
||||
|
||||
// length of wireless interface fields
|
||||
const interfaceFieldLength = 10
|
||||
|
||||
type wirelessInterface struct {
|
||||
Interface string
|
||||
Status int64
|
||||
Link int64
|
||||
Level int64
|
||||
Noise int64
|
||||
Nwid int64
|
||||
Crypt int64
|
||||
Frag int64
|
||||
Retry int64
|
||||
Misc int64
|
||||
Beacon int64
|
||||
}
|
||||
|
||||
func (w *Wireless) Gather(acc telegraf.Accumulator) error {
|
||||
// load proc path, get default value if config value and env variable are empty
|
||||
if w.HostProc == "" {
|
||||
w.HostProc = internal.GetProcPath()
|
||||
}
|
||||
|
||||
wirelessPath := path.Join(w.HostProc, "net", "wireless")
|
||||
table, err := os.ReadFile(wirelessPath)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
interfaces, err := w.loadWirelessTable(table)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
for _, w := range interfaces {
|
||||
tags := map[string]string{
|
||||
"interface": w.Interface,
|
||||
}
|
||||
fieldsG := map[string]interface{}{
|
||||
"status": w.Status,
|
||||
"link": w.Link,
|
||||
"level": w.Level,
|
||||
"noise": w.Noise,
|
||||
}
|
||||
fieldsC := map[string]interface{}{
|
||||
"nwid": w.Nwid,
|
||||
"crypt": w.Crypt,
|
||||
"frag": w.Frag,
|
||||
"retry": w.Retry,
|
||||
"misc": w.Misc,
|
||||
"beacon": w.Beacon,
|
||||
}
|
||||
acc.AddGauge("wireless", fieldsG, tags)
|
||||
acc.AddCounter("wireless", fieldsC, tags)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (w *Wireless) loadWirelessTable(table []byte) ([]*wirelessInterface, error) {
|
||||
var wi []*wirelessInterface
|
||||
lines := bytes.Split(table, newLineByte)
|
||||
|
||||
// iterate over interfaces
|
||||
for i := 2; i < len(lines); i = i + 1 {
|
||||
if len(lines[i]) == 0 {
|
||||
continue
|
||||
}
|
||||
values := make([]int64, 0, interfaceFieldLength)
|
||||
fields := strings.Fields(string(lines[i]))
|
||||
for j := 1; j < len(fields); j = j + 1 {
|
||||
v, err := strconv.ParseInt(strings.Trim(fields[j], "."), 10, 64)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
values = append(values, v)
|
||||
}
|
||||
if len(values) != interfaceFieldLength {
|
||||
w.Log.Error("invalid length of interface values")
|
||||
continue
|
||||
}
|
||||
wi = append(wi, &wirelessInterface{
|
||||
Interface: strings.Trim(fields[0], ":"),
|
||||
Status: values[0],
|
||||
Link: values[1],
|
||||
Level: values[2],
|
||||
Noise: values[3],
|
||||
Nwid: values[4],
|
||||
Crypt: values[5],
|
||||
Frag: values[6],
|
||||
Retry: values[7],
|
||||
Misc: values[8],
|
||||
Beacon: values[9],
|
||||
})
|
||||
}
|
||||
return wi, nil
|
||||
}
|
||||
|
||||
func init() {
|
||||
inputs.Add("wireless", func() telegraf.Input {
|
||||
return &Wireless{}
|
||||
})
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue