fix: eliminate MIB dependency for ifname processor (#10214)
This commit is contained in:
parent
2d420fbd35
commit
3ddc3c6b51
|
|
@ -1,6 +1,7 @@
|
||||||
package ifname
|
package ifname
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"strconv"
|
"strconv"
|
||||||
"sync"
|
"sync"
|
||||||
|
|
@ -192,13 +193,14 @@ func (d *IfName) invalidate(agent string) {
|
||||||
|
|
||||||
func (d *IfName) Start(acc telegraf.Accumulator) error {
|
func (d *IfName) Start(acc telegraf.Accumulator) error {
|
||||||
var err error
|
var err error
|
||||||
d.ifTable, err = d.makeTable("IF-MIB::ifDescr")
|
|
||||||
|
d.ifTable, err = d.makeTable("1.3.6.1.2.1.2.2.1.2")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("looking up ifDescr in local MIB: %w", err)
|
return fmt.Errorf("preparing ifTable: %v", err)
|
||||||
}
|
}
|
||||||
d.ifXTable, err = d.makeTable("IF-MIB::ifName")
|
d.ifXTable, err = d.makeTable("1.3.6.1.2.1.31.1.1.1.1")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("looking up ifName in local MIB: %w", err)
|
return fmt.Errorf("preparing ifXTable: %v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn := func(m telegraf.Metric) []telegraf.Metric {
|
fn := func(m telegraf.Metric) []telegraf.Metric {
|
||||||
|
|
@ -307,11 +309,11 @@ func (d *IfName) getMapRemoteNoMock(agent string) (nameMap, error) {
|
||||||
//try ifXtable and ifName first. if that fails, fall back to
|
//try ifXtable and ifName first. if that fails, fall back to
|
||||||
//ifTable and ifDescr
|
//ifTable and ifDescr
|
||||||
var m nameMap
|
var m nameMap
|
||||||
if m, err = buildMap(gs, d.ifXTable, "ifName"); err == nil {
|
if m, err = buildMap(gs, d.ifXTable); err == nil {
|
||||||
return m, nil
|
return m, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
if m, err = buildMap(gs, d.ifTable, "ifDescr"); err == nil {
|
if m, err = buildMap(gs, d.ifTable); err == nil {
|
||||||
return m, nil
|
return m, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -338,13 +340,13 @@ func init() {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
func makeTableNoMock(fieldName string) (*si.Table, error) {
|
func makeTableNoMock(oid string) (*si.Table, error) {
|
||||||
var err error
|
var err error
|
||||||
tab := si.Table{
|
tab := si.Table{
|
||||||
Name: "ifTable",
|
Name: "ifTable",
|
||||||
IndexAsTag: true,
|
IndexAsTag: true,
|
||||||
Fields: []si.Field{
|
Fields: []si.Field{
|
||||||
{Oid: fieldName},
|
{Oid: oid, Name: "ifName"},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -357,7 +359,7 @@ func makeTableNoMock(fieldName string) (*si.Table, error) {
|
||||||
return &tab, nil
|
return &tab, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func buildMap(gs snmp.GosnmpWrapper, tab *si.Table, column string) (nameMap, error) {
|
func buildMap(gs snmp.GosnmpWrapper, tab *si.Table) (nameMap, error) {
|
||||||
var err error
|
var err error
|
||||||
|
|
||||||
rtab, err := tab.Build(gs, true)
|
rtab, err := tab.Build(gs, true)
|
||||||
|
|
@ -382,13 +384,13 @@ func buildMap(gs snmp.GosnmpWrapper, tab *si.Table, column string) (nameMap, err
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("index tag isn't a uint")
|
return nil, fmt.Errorf("index tag isn't a uint")
|
||||||
}
|
}
|
||||||
nameIf, ok := v.Fields[column]
|
nameIf, ok := v.Fields["ifName"]
|
||||||
if !ok {
|
if !ok {
|
||||||
return nil, fmt.Errorf("field %s is missing", column)
|
return nil, errors.New("ifName field is missing")
|
||||||
}
|
}
|
||||||
name, ok := nameIf.(string)
|
name, ok := nameIf.(string)
|
||||||
if !ok {
|
if !ok {
|
||||||
return nil, fmt.Errorf("field %s isn't a string", column)
|
return nil, errors.New("ifName field isn't a string")
|
||||||
}
|
}
|
||||||
|
|
||||||
t[i] = name
|
t[i] = name
|
||||||
|
|
|
||||||
|
|
@ -20,7 +20,7 @@ func TestTable(t *testing.T) {
|
||||||
d := IfName{}
|
d := IfName{}
|
||||||
err := d.Init()
|
err := d.Init()
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
tab, err := d.makeTable("IF-MIB::ifTable")
|
tab, err := d.makeTable("1.3.6.1.2.1.2.2.1.2")
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
clientConfig := snmp.ClientConfig{
|
clientConfig := snmp.ClientConfig{
|
||||||
|
|
@ -36,7 +36,7 @@ func TestTable(t *testing.T) {
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
// Could use ifIndex but oid index is always the same
|
// Could use ifIndex but oid index is always the same
|
||||||
m, err := buildMap(gs, tab, "ifDescr")
|
m, err := buildMap(gs, tab)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
require.NotEmpty(t, m)
|
require.NotEmpty(t, m)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue