diff --git a/CHANGELOG.md b/CHANGELOG.md index c1b0769d8..b435e373f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,13 @@ - [#1949](https://github.com/influxdata/telegraf/issues/1949): Fix windows `net` plugin. ## v1.1.1 [unreleased] +## v1.1.2 [2016-12-12] + +### Bugfixes + +- [#2007](https://github.com/influxdata/telegraf/issues/2007): Make snmptranslate not required when using numeric OID. + +## v1.1.1 [2016-11-14] ### Bugfixes diff --git a/plugins/inputs/snmp/snmp.go b/plugins/inputs/snmp/snmp.go index cc750e769..629f526bb 100644 --- a/plugins/inputs/snmp/snmp.go +++ b/plugins/inputs/snmp/snmp.go @@ -848,6 +848,11 @@ func snmpTranslate(oid string) (mibName string, oidNum string, oidText string, c out, err = execCmd("snmptranslate", "-Td", "-Ob", oid) } else { out, err = execCmd("snmptranslate", "-Td", "-Ob", "-m", "all", oid) + if err, ok := err.(*exec.Error); ok && err.Err == exec.ErrNotFound { + // Silently discard error if snmptranslate not found and we have a numeric OID. + // Meaning we can get by without the lookup. + return "", oid, oid, "", nil + } } if err != nil { return "", "", "", "", err diff --git a/plugins/inputs/snmp/snmp_test.go b/plugins/inputs/snmp/snmp_test.go index 6839fdd8f..f7ac913a5 100644 --- a/plugins/inputs/snmp/snmp_test.go +++ b/plugins/inputs/snmp/snmp_test.go @@ -4,6 +4,7 @@ package snmp import ( "fmt" "net" + "os/exec" "sync" "testing" "time" @@ -198,6 +199,56 @@ func TestSnmpInit(t *testing.T) { }, s.Fields[0]) } +func TestSnmpInit_noTranslate(t *testing.T) { + // override execCommand so it returns exec.ErrNotFound + defer func(ec func(string, ...string) *exec.Cmd) { execCommand = ec }(execCommand) + execCommand = func(_ string, _ ...string) *exec.Cmd { + return exec.Command("snmptranslateExecErrNotFound") + } + + s := &Snmp{ + Fields: []Field{ + {Oid: ".1.1.1.1", Name: "one", IsTag: true}, + {Oid: ".1.1.1.2", Name: "two"}, + {Oid: ".1.1.1.3"}, + }, + Tables: []Table{ + {Fields: []Field{ + {Oid: ".1.1.1.4", Name: "four", IsTag: true}, + {Oid: ".1.1.1.5", Name: "five"}, + {Oid: ".1.1.1.6"}, + }}, + }, + } + + err := s.init() + require.NoError(t, err) + + assert.Equal(t, ".1.1.1.1", s.Fields[0].Oid) + assert.Equal(t, "one", s.Fields[0].Name) + assert.Equal(t, true, s.Fields[0].IsTag) + + assert.Equal(t, ".1.1.1.2", s.Fields[1].Oid) + assert.Equal(t, "two", s.Fields[1].Name) + assert.Equal(t, false, s.Fields[1].IsTag) + + assert.Equal(t, ".1.1.1.3", s.Fields[2].Oid) + assert.Equal(t, ".1.1.1.3", s.Fields[2].Name) + assert.Equal(t, false, s.Fields[2].IsTag) + + assert.Equal(t, ".1.1.1.4", s.Tables[0].Fields[0].Oid) + assert.Equal(t, "four", s.Tables[0].Fields[0].Name) + assert.Equal(t, true, s.Tables[0].Fields[0].IsTag) + + assert.Equal(t, ".1.1.1.5", s.Tables[0].Fields[1].Oid) + assert.Equal(t, "five", s.Tables[0].Fields[1].Name) + assert.Equal(t, false, s.Tables[0].Fields[1].IsTag) + + assert.Equal(t, ".1.1.1.6", s.Tables[0].Fields[2].Oid) + assert.Equal(t, ".1.1.1.6", s.Tables[0].Fields[2].Name) + assert.Equal(t, false, s.Tables[0].Fields[2].IsTag) +} + func TestGetSNMPConnection_v2(t *testing.T) { s := &Snmp{ Timeout: internal.Duration{Duration: 3 * time.Second},