# HG changeset patch # User Tomas Zeman # Date 1364395033 -3600 # Node ID bf13852dc3ab2d25d4beee9b99c7f9994c290f26 # Parent df62e797a8d4deaa0481b2bf0db834482c5f1f98 example.coffee: simplest snmpget for list of oids (avoid getAll - bulk get not implemented by all devs) diff -r df62e797a8d4 -r bf13852dc3ab 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)