ensure proper context on snmp error messages (#2220)

This commit is contained in:
Patrick Hemmer 2017-01-09 08:03:33 -05:00 committed by Cameron Sparr
parent 5f6766f6e1
commit a658e6c509
2 changed files with 12 additions and 11 deletions

View File

@ -66,6 +66,7 @@ plugins, not just statsd.
- [#1973](https://github.com/influxdata/telegraf/issues/1973): Partial fix: logparser CLF pattern with IPv6 addresses. - [#1973](https://github.com/influxdata/telegraf/issues/1973): Partial fix: logparser CLF pattern with IPv6 addresses.
- [#1975](https://github.com/influxdata/telegraf/issues/1975) & [#2102](https://github.com/influxdata/telegraf/issues/2102): Fix thread-safety when using multiple instances of the statsd input plugin. - [#1975](https://github.com/influxdata/telegraf/issues/1975) & [#2102](https://github.com/influxdata/telegraf/issues/2102): Fix thread-safety when using multiple instances of the statsd input plugin.
- [#2027](https://github.com/influxdata/telegraf/issues/2027): docker input: interface conversion panic fix. - [#2027](https://github.com/influxdata/telegraf/issues/2027): docker input: interface conversion panic fix.
- [#1814](https://github.com/influxdata/telegraf/issues/1814): snmp: ensure proper context is present on error messages
## v1.1.2 [2016-12-12] ## v1.1.2 [2016-12-12]

View File

@ -146,13 +146,13 @@ func (s *Snmp) init() error {
for i := range s.Tables { for i := range s.Tables {
if err := s.Tables[i].init(); err != nil { if err := s.Tables[i].init(); err != nil {
return err return Errorf(err, "initializing table %s", s.Tables[i].Name)
} }
} }
for i := range s.Fields { for i := range s.Fields {
if err := s.Fields[i].init(); err != nil { if err := s.Fields[i].init(); err != nil {
return err return Errorf(err, "initializing field %s", s.Fields[i].Name)
} }
} }
@ -192,7 +192,7 @@ func (t *Table) init() error {
// initialize all the nested fields // initialize all the nested fields
for i := range t.Fields { for i := range t.Fields {
if err := t.Fields[i].init(); err != nil { if err := t.Fields[i].init(); err != nil {
return err return Errorf(err, "initializing field %s", t.Fields[i].Name)
} }
} }
@ -210,7 +210,7 @@ func (t *Table) initBuild() error {
_, _, oidText, fields, err := snmpTable(t.Oid) _, _, oidText, fields, err := snmpTable(t.Oid)
if err != nil { if err != nil {
return Errorf(err, "initializing table %s", t.Oid) return err
} }
if t.Name == "" { if t.Name == "" {
t.Name = oidText t.Name = oidText
@ -252,7 +252,7 @@ func (f *Field) init() error {
_, oidNum, oidText, conversion, err := snmpTranslate(f.Oid) _, oidNum, oidText, conversion, err := snmpTranslate(f.Oid)
if err != nil { if err != nil {
return Errorf(err, "translating %s", f.Oid) return Errorf(err, "translating")
} }
f.Oid = oidNum f.Oid = oidNum
if f.Name == "" { if f.Name == "" {
@ -358,7 +358,7 @@ func (s *Snmp) Gather(acc telegraf.Accumulator) error {
// Now is the real tables. // Now is the real tables.
for _, t := range s.Tables { for _, t := range s.Tables {
if err := s.gatherTable(acc, gs, t, topTags, true); err != nil { if err := s.gatherTable(acc, gs, t, topTags, true); err != nil {
acc.AddError(Errorf(err, "agent %s", agent)) acc.AddError(Errorf(err, "agent %s: gathering table %s", agent, t.Name))
} }
} }
} }
@ -406,7 +406,7 @@ func (t Table) Build(gs snmpConnection, walk bool) (*RTable, error) {
} }
if len(f.Oid) == 0 { if len(f.Oid) == 0 {
return nil, fmt.Errorf("cannot have empty OID") return nil, fmt.Errorf("cannot have empty OID on field %s", f.Name)
} }
var oid string var oid string
if f.Oid[0] == '.' { if f.Oid[0] == '.' {
@ -426,12 +426,12 @@ func (t Table) Build(gs snmpConnection, walk bool) (*RTable, error) {
// empty string. This results in all the non-table fields sharing the same // empty string. This results in all the non-table fields sharing the same
// index, and being added on the same row. // index, and being added on the same row.
if pkt, err := gs.Get([]string{oid}); err != nil { if pkt, err := gs.Get([]string{oid}); err != nil {
return nil, Errorf(err, "performing get") return nil, Errorf(err, "performing get on field %s", f.Name)
} else if pkt != nil && len(pkt.Variables) > 0 && pkt.Variables[0].Type != gosnmp.NoSuchObject && pkt.Variables[0].Type != gosnmp.NoSuchInstance { } else if pkt != nil && len(pkt.Variables) > 0 && pkt.Variables[0].Type != gosnmp.NoSuchObject && pkt.Variables[0].Type != gosnmp.NoSuchInstance {
ent := pkt.Variables[0] ent := pkt.Variables[0]
fv, err := fieldConvert(f.Conversion, ent.Value) fv, err := fieldConvert(f.Conversion, ent.Value)
if err != nil { if err != nil {
return nil, Errorf(err, "converting %q", ent.Value) return nil, Errorf(err, "converting %q (OID %s) for field %s", ent.Value, ent.Name, f.Name)
} }
if fvs, ok := fv.(string); !ok || fvs != "" { if fvs, ok := fv.(string); !ok || fvs != "" {
ifv[""] = fv ifv[""] = fv
@ -454,7 +454,7 @@ func (t Table) Build(gs snmpConnection, walk bool) (*RTable, error) {
fv, err := fieldConvert(f.Conversion, ent.Value) fv, err := fieldConvert(f.Conversion, ent.Value)
if err != nil { if err != nil {
return Errorf(err, "converting %q", ent.Value) return Errorf(err, "converting %q (OID %s) for field %s", ent.Value, ent.Name, f.Name)
} }
if fvs, ok := fv.(string); !ok || fvs != "" { if fvs, ok := fv.(string); !ok || fvs != "" {
ifv[idx] = fv ifv[idx] = fv
@ -463,7 +463,7 @@ func (t Table) Build(gs snmpConnection, walk bool) (*RTable, error) {
}) })
if err != nil { if err != nil {
if _, ok := err.(NestedError); !ok { if _, ok := err.(NestedError); !ok {
return nil, Errorf(err, "performing bulk walk") return nil, Errorf(err, "performing bulk walk for field %s", f.Name)
} }
} }
} }