example.coffee: simplest snmpget for list of oids (avoid getAll - bulk get not implemented by all devs)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/example.coffee Wed Mar 27 15:37:13 2013 +0100
@@ -0,0 +1,85 @@
+snmp = require('snmp-native')
+snmpTypes = require('snmp-native/lib/asn1ber').types
+
+typeStr = {}
+typeStr[snmpTypes.Integer] = 'Integer'
+typeStr[snmpTypes.OctetString] = 'OctetString'
+typeStr[snmpTypes.Null] = 'Null'
+typeStr[snmpTypes.ObjectIdentifier] = 'ObjectIdentifier'
+typeStr[snmpTypes.Sequence] = 'Sequence'
+typeStr[snmpTypes.IpAddress] = 'IpAddress'
+typeStr[snmpTypes.Counter] = 'Counter'
+typeStr[snmpTypes.Gauge] = 'Gauge'
+typeStr[snmpTypes.TimeTicks] = 'TimeTicks'
+typeStr[snmpTypes.Opaque] = 'Opaque'
+typeStr[snmpTypes.NsapAddress] = 'NsapAddress'
+typeStr[snmpTypes.Counter64] = 'Counter64'
+typeStr[snmpTypes.NoSuchObject] = 'NoSuchObject'
+typeStr[snmpTypes.NoSuchInstance] = 'NoSuchInstance'
+typeStr[snmpTypes.EndOfMibView] = 'EndOfMibView'
+typeStr[snmpTypes.PDUBase] = 'PDUBase'
+
+convertTimeTicks = (v) ->
+ intDiv = (a, b) -> Math.floor(a / b)
+ msec = v % 100
+ v = intDiv(v, 100)
+ secs = v % 60
+ v = intDiv(v, 60)
+ mins = v % 60
+ v = intDiv(v, 60)
+ hours = v % 24
+ days = intDiv(v, 24)
+
+ days: days
+ hours: hours
+ mins: mins
+ secs: secs
+ msecs: msec
+
+
+processVarBind = (vb) ->
+ rv =
+ oid: vb.oid.reduce (x,y) -> x+"."+y
+ value: vb.value
+ type: vb.type
+ typeStr: typeStr[vb.type] ? 'Unknown'
+ if (rv.type == snmpTypes.TimeTicks)
+ rv.timeTicks = convertTimeTicks(vb.value)
+ rv
+
+
+
+snmpget = (opts, cb) ->
+ sess = new snmp.Session({host: opts.host, community: opts.community})
+ res = []
+ snmpgetOne = (i) ->
+ if (i < opts.oids.length)
+ sess.get({oid: opts.oids[i]}, (err, vbs) ->
+ if (err)
+ res.push { error: err }
+ else
+ res.push vbs.map(processVarBind)...
+ snmpgetOne ++i
+ )
+ else
+ sess.close()
+ cb(res)
+ snmpgetOne 0
+
+oids = [
+ '.1.3.6.1.2.1.1.1.0',
+ '.1.3.6.1.2.1.1.2.0',
+ '.1.3.6.1.2.1.1.3.0',
+ '.1.3.6.1.4.1.9.2.1.57.0',
+ '.1.3.6.1.4.1.9.2.1.58.0',
+ '.1.3.6.1.4.1.9.9.48.1.1.1.5.1',
+ '.1.3.6.1.4.1.9.9.48.1.1.1.6.1',
+ '.1.3.6.1.4.1.9.9.13.1.3.1.3.1'
+]
+
+opts =
+ host: process.env.HOST ? "localhost"
+ community: process.env.COMMUNITY ? "public"
+ oids: oids
+
+snmpget(opts, (res) -> console.log res)