lib/utils.coffee
author Tomas Zeman <tzeman@volny.cz>
Thu, 28 Mar 2013 21:55:07 +0100
changeset 5 2db4f3d512bb
permissions -rw-r--r--
Server prototype
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
5
2db4f3d512bb Server prototype
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
     1
snmp = require('snmp-native')
2db4f3d512bb Server prototype
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
     2
snmpTypes = require('./snmp-types').snmpTypes
2db4f3d512bb Server prototype
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
     3
typeStr = require('./snmp-types').typeStr
2db4f3d512bb Server prototype
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
     4
2db4f3d512bb Server prototype
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
     5
2db4f3d512bb Server prototype
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
     6
###
2db4f3d512bb Server prototype
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
     7
Converts TimeTicks value to easy-to-use structure.
2db4f3d512bb Server prototype
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
     8
###
2db4f3d512bb Server prototype
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
     9
convertTimeTicks = (v) ->
2db4f3d512bb Server prototype
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    10
  intDiv = (a, b) -> Math.floor(a / b)
2db4f3d512bb Server prototype
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    11
  msec = v % 100
2db4f3d512bb Server prototype
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    12
  v = intDiv(v, 100)
2db4f3d512bb Server prototype
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    13
  secs = v % 60
2db4f3d512bb Server prototype
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    14
  v = intDiv(v, 60)
2db4f3d512bb Server prototype
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    15
  mins = v % 60
2db4f3d512bb Server prototype
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    16
  v = intDiv(v, 60)
2db4f3d512bb Server prototype
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    17
  hours = v % 24
2db4f3d512bb Server prototype
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    18
  days = intDiv(v, 24)
2db4f3d512bb Server prototype
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    19
  
2db4f3d512bb Server prototype
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    20
  days: days
2db4f3d512bb Server prototype
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    21
  hours: hours
2db4f3d512bb Server prototype
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    22
  mins: mins
2db4f3d512bb Server prototype
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    23
  secs: secs
2db4f3d512bb Server prototype
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    24
  msecs: msec
2db4f3d512bb Server prototype
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    25
2db4f3d512bb Server prototype
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    26
###
2db4f3d512bb Server prototype
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    27
Processes SNMP result value.
2db4f3d512bb Server prototype
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    28
###
2db4f3d512bb Server prototype
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    29
processVarBind = (vb) ->
2db4f3d512bb Server prototype
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    30
  rv =
2db4f3d512bb Server prototype
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    31
    oid: "." + vb.oid.reduce (x,y) -> x+"."+y
2db4f3d512bb Server prototype
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    32
    value: vb.value
2db4f3d512bb Server prototype
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    33
    type: vb.type
2db4f3d512bb Server prototype
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    34
    typeStr: typeStr[vb.type] ? 'Unknown'
2db4f3d512bb Server prototype
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    35
    ts: Date.now() / 1000
2db4f3d512bb Server prototype
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    36
  if (rv.type == snmpTypes.TimeTicks)
2db4f3d512bb Server prototype
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    37
    rv.timeTicks = convertTimeTicks(vb.value)
2db4f3d512bb Server prototype
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    38
  rv
2db4f3d512bb Server prototype
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    39
2db4f3d512bb Server prototype
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    40
###
2db4f3d512bb Server prototype
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    41
Creates SNMP session and retrieves values for the supplied OIDs.
2db4f3d512bb Server prototype
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    42
###
2db4f3d512bb Server prototype
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    43
snmpget = (opts, cb) ->
2db4f3d512bb Server prototype
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    44
  sess = new snmp.Session(opts)
2db4f3d512bb Server prototype
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    45
  res = []
2db4f3d512bb Server prototype
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    46
  snmpgetOne = (i) ->
2db4f3d512bb Server prototype
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    47
    if (i < opts.oids.length)
2db4f3d512bb Server prototype
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    48
      oid = opts.oids[i]
2db4f3d512bb Server prototype
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    49
      sess.get({oid: oid}, (err, vbs) ->
2db4f3d512bb Server prototype
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    50
        if (err)
2db4f3d512bb Server prototype
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    51
          res.push { error: err, oid: oid }
2db4f3d512bb Server prototype
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    52
          if (opts.abortOnError)
2db4f3d512bb Server prototype
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    53
            i = opts.oids.length
2db4f3d512bb Server prototype
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    54
        else
2db4f3d512bb Server prototype
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    55
          res.push vbs.map(processVarBind)...
2db4f3d512bb Server prototype
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    56
        snmpgetOne ++i
2db4f3d512bb Server prototype
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    57
      )
2db4f3d512bb Server prototype
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    58
    else
2db4f3d512bb Server prototype
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    59
      sess.close()
2db4f3d512bb Server prototype
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    60
      cb(res)
2db4f3d512bb Server prototype
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    61
  snmpgetOne 0
2db4f3d512bb Server prototype
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    62
2db4f3d512bb Server prototype
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    63
exports.snmpget = snmpget