diff -r df7be338df73 -r 2db4f3d512bb lib/utils.coffee --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lib/utils.coffee Thu Mar 28 21:55:07 2013 +0100 @@ -0,0 +1,63 @@ +snmp = require('snmp-native') +snmpTypes = require('./snmp-types').snmpTypes +typeStr = require('./snmp-types').typeStr + + +### +Converts TimeTicks value to easy-to-use structure. +### +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 + +### +Processes SNMP result value. +### +processVarBind = (vb) -> + rv = + oid: "." + vb.oid.reduce (x,y) -> x+"."+y + value: vb.value + type: vb.type + typeStr: typeStr[vb.type] ? 'Unknown' + ts: Date.now() / 1000 + if (rv.type == snmpTypes.TimeTicks) + rv.timeTicks = convertTimeTicks(vb.value) + rv + +### +Creates SNMP session and retrieves values for the supplied OIDs. +### +snmpget = (opts, cb) -> + sess = new snmp.Session(opts) + res = [] + snmpgetOne = (i) -> + if (i < opts.oids.length) + oid = opts.oids[i] + sess.get({oid: oid}, (err, vbs) -> + if (err) + res.push { error: err, oid: oid } + if (opts.abortOnError) + i = opts.oids.length + else + res.push vbs.map(processVarBind)... + snmpgetOne ++i + ) + else + sess.close() + cb(res) + snmpgetOne 0 + +exports.snmpget = snmpget