--- /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