From 9297d773064f12e0bd43b6ceec6c17576740024f Mon Sep 17 00:00:00 2001 From: Thomas Casteleyn Date: Mon, 15 Jul 2024 15:55:39 +0200 Subject: [PATCH] fix(inputs.snmp): Translate field correctly when not in table (#15618) --- internal/snmp/field.go | 11 +++++++++++ internal/snmp/table.go | 11 ----------- internal/snmp/translator_gosmi_test.go | 8 +++++++- internal/snmp/translator_netsnmp_test.go | 8 +++++++- 4 files changed, 25 insertions(+), 13 deletions(-) diff --git a/internal/snmp/field.go b/internal/snmp/field.go index 8f71ead4a..cc81a3c33 100644 --- a/internal/snmp/field.go +++ b/internal/snmp/field.go @@ -95,6 +95,17 @@ func (f *Field) Init(tr Translator) error { // fieldConvert converts from any type according to the conv specification func (f *Field) Convert(ent gosnmp.SnmpPDU) (interface{}, error) { + // snmptranslate table field value here + if f.Translate { + if entOid, ok := ent.Value.(string); ok { + _, _, oidText, _, err := f.translator.SnmpTranslate(entOid) + if err == nil { + // If no error translating, the original value for ent.Value should be replaced + ent.Value = oidText + } + } + } + if f.Conversion == "" { // OctetStrings may contain hex data that needs its own conversion if ent.Type == gosnmp.OctetString && !utf8.Valid(ent.Value.([]byte)[:]) { diff --git a/internal/snmp/table.go b/internal/snmp/table.go index 5100f15df..3c6ff37ba 100644 --- a/internal/snmp/table.go +++ b/internal/snmp/table.go @@ -205,17 +205,6 @@ func (t Table) Build(gs Connection, walk bool) (*RTable, error) { }, idx) } - // snmptranslate table field value here - if f.Translate { - if entOid, ok := ent.Value.(string); ok { - _, _, oidText, _, err := t.translator.SnmpTranslate(entOid) - if err == nil { - // If no error translating, the original value for ent.Value should be replaced - ent.Value = oidText - } - } - } - fv, err := f.Convert(ent) if err != nil { return &walkError{ diff --git a/internal/snmp/translator_gosmi_test.go b/internal/snmp/translator_gosmi_test.go index c89cd28e8..0231b0a46 100644 --- a/internal/snmp/translator_gosmi_test.go +++ b/internal/snmp/translator_gosmi_test.go @@ -274,15 +274,21 @@ func TestTableBuild_noWalkGosmi(t *testing.T) { Name: "noexist", Oid: ".1.2.3.4.5", }, + { + Name: "myfield4", + Oid: ".1.3.6.1.2.1.3.1.1.3.0", + Translate: true, + }, }, } + require.NoError(t, tbl.Init(getGosmiTr(t))) tb, err := tbl.Build(tsc, false) require.NoError(t, err) rtr := RTableRow{ Tags: map[string]string{"myfield1": "baz", "myfield3": "234"}, - Fields: map[string]interface{}{"myfield2": 234}, + Fields: map[string]interface{}{"myfield2": 234, "myfield4": "atNetAddress"}, } require.Len(t, tb.Rows, 1) require.Contains(t, tb.Rows, rtr) diff --git a/internal/snmp/translator_netsnmp_test.go b/internal/snmp/translator_netsnmp_test.go index 28797d524..b4216b273 100644 --- a/internal/snmp/translator_netsnmp_test.go +++ b/internal/snmp/translator_netsnmp_test.go @@ -207,15 +207,21 @@ func TestTableBuild_noWalk(t *testing.T) { Name: "noexist", Oid: ".1.2.3.4.5", }, + { + Name: "myfield4", + Oid: ".1.0.0.0.1.6.0", + Translate: true, + }, }, } + require.NoError(t, tbl.Init(NewNetsnmpTranslator(testutil.Logger{}))) tb, err := tbl.Build(tsc, false) require.NoError(t, err) rtr := RTableRow{ Tags: map[string]string{"myfield1": "baz", "myfield3": "234"}, - Fields: map[string]interface{}{"myfield2": 234}, + Fields: map[string]interface{}{"myfield2": 234, "myfield4": "testTableEntry.7"}, } require.Len(t, tb.Rows, 1) require.Contains(t, tb.Rows, rtr)