github.com/netdata/go.d.plugin@v0.58.1/modules/snmp/collect.go (about) 1 // SPDX-License-Identifier: GPL-3.0-or-later 2 3 package snmp 4 5 import ( 6 "github.com/gosnmp/gosnmp" 7 ) 8 9 func (s *SNMP) collect() (map[string]int64, error) { 10 collected := make(map[string]int64) 11 12 if err := s.collectOIDs(collected); err != nil { 13 return nil, err 14 } 15 16 return collected, nil 17 } 18 19 func (s *SNMP) collectOIDs(collected map[string]int64) error { 20 for i, end := 0, 0; i < len(s.oids); i += s.Options.MaxOIDs { 21 if end = i + s.Options.MaxOIDs; end > len(s.oids) { 22 end = len(s.oids) 23 } 24 25 oids := s.oids[i:end] 26 resp, err := s.snmpClient.Get(oids) 27 if err != nil { 28 s.Errorf("cannot get SNMP data: %v", err) 29 return err 30 } 31 32 for i, oid := range oids { 33 if i >= len(resp.Variables) { 34 continue 35 } 36 37 switch v := resp.Variables[i]; v.Type { 38 case gosnmp.Boolean, 39 gosnmp.Counter32, 40 gosnmp.Counter64, 41 gosnmp.Gauge32, 42 gosnmp.TimeTicks, 43 gosnmp.Uinteger32, 44 gosnmp.OpaqueFloat, 45 gosnmp.OpaqueDouble, 46 gosnmp.Integer: 47 collected[oid] = gosnmp.ToBigInt(v.Value).Int64() 48 default: 49 s.Debugf("skipping OID '%s' (unsupported type '%s')", oid, v.Type) 50 } 51 } 52 } 53 54 return nil 55 }