example.coffee: simplest snmpget for list of oids (avoid getAll - bulk get not implemented by all devs)
authorTomas Zeman <tzeman@volny.cz>
Wed, 27 Mar 2013 15:37:13 +0100
changeset 1 bf13852dc3ab
parent 0 df62e797a8d4
child 2 cd4a9319d71d
example.coffee: simplest snmpget for list of oids (avoid getAll - bulk get not implemented by all devs)
example.coffee
--- /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)