example.coffee
author Tomas Zeman <tzeman@volny.cz>
Wed, 27 Mar 2013 15:37:13 +0100
changeset 1 bf13852dc3ab
child 2 cd4a9319d71d
permissions -rw-r--r--
example.coffee: simplest snmpget for list of oids (avoid getAll - bulk get not implemented by all devs)
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1
bf13852dc3ab example.coffee: simplest snmpget for list of oids (avoid getAll - bulk get not implemented by all devs)
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
     1
snmp = require('snmp-native')
bf13852dc3ab example.coffee: simplest snmpget for list of oids (avoid getAll - bulk get not implemented by all devs)
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
     2
snmpTypes = require('snmp-native/lib/asn1ber').types
bf13852dc3ab example.coffee: simplest snmpget for list of oids (avoid getAll - bulk get not implemented by all devs)
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
     3
bf13852dc3ab example.coffee: simplest snmpget for list of oids (avoid getAll - bulk get not implemented by all devs)
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
     4
typeStr = {}
bf13852dc3ab example.coffee: simplest snmpget for list of oids (avoid getAll - bulk get not implemented by all devs)
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
     5
typeStr[snmpTypes.Integer] =           'Integer'
bf13852dc3ab example.coffee: simplest snmpget for list of oids (avoid getAll - bulk get not implemented by all devs)
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
     6
typeStr[snmpTypes.OctetString] =       'OctetString'
bf13852dc3ab example.coffee: simplest snmpget for list of oids (avoid getAll - bulk get not implemented by all devs)
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
     7
typeStr[snmpTypes.Null] =              'Null'
bf13852dc3ab example.coffee: simplest snmpget for list of oids (avoid getAll - bulk get not implemented by all devs)
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
     8
typeStr[snmpTypes.ObjectIdentifier] =  'ObjectIdentifier'
bf13852dc3ab example.coffee: simplest snmpget for list of oids (avoid getAll - bulk get not implemented by all devs)
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
     9
typeStr[snmpTypes.Sequence] =          'Sequence'
bf13852dc3ab example.coffee: simplest snmpget for list of oids (avoid getAll - bulk get not implemented by all devs)
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    10
typeStr[snmpTypes.IpAddress] =         'IpAddress'
bf13852dc3ab example.coffee: simplest snmpget for list of oids (avoid getAll - bulk get not implemented by all devs)
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    11
typeStr[snmpTypes.Counter] =           'Counter'
bf13852dc3ab example.coffee: simplest snmpget for list of oids (avoid getAll - bulk get not implemented by all devs)
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    12
typeStr[snmpTypes.Gauge] =             'Gauge'
bf13852dc3ab example.coffee: simplest snmpget for list of oids (avoid getAll - bulk get not implemented by all devs)
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    13
typeStr[snmpTypes.TimeTicks] =         'TimeTicks'
bf13852dc3ab example.coffee: simplest snmpget for list of oids (avoid getAll - bulk get not implemented by all devs)
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    14
typeStr[snmpTypes.Opaque] =            'Opaque'
bf13852dc3ab example.coffee: simplest snmpget for list of oids (avoid getAll - bulk get not implemented by all devs)
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    15
typeStr[snmpTypes.NsapAddress] =       'NsapAddress'
bf13852dc3ab example.coffee: simplest snmpget for list of oids (avoid getAll - bulk get not implemented by all devs)
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    16
typeStr[snmpTypes.Counter64] =         'Counter64'
bf13852dc3ab example.coffee: simplest snmpget for list of oids (avoid getAll - bulk get not implemented by all devs)
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    17
typeStr[snmpTypes.NoSuchObject] =      'NoSuchObject'
bf13852dc3ab example.coffee: simplest snmpget for list of oids (avoid getAll - bulk get not implemented by all devs)
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    18
typeStr[snmpTypes.NoSuchInstance] =    'NoSuchInstance'
bf13852dc3ab example.coffee: simplest snmpget for list of oids (avoid getAll - bulk get not implemented by all devs)
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    19
typeStr[snmpTypes.EndOfMibView] =      'EndOfMibView'
bf13852dc3ab example.coffee: simplest snmpget for list of oids (avoid getAll - bulk get not implemented by all devs)
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    20
typeStr[snmpTypes.PDUBase] =           'PDUBase'
bf13852dc3ab example.coffee: simplest snmpget for list of oids (avoid getAll - bulk get not implemented by all devs)
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    21
bf13852dc3ab example.coffee: simplest snmpget for list of oids (avoid getAll - bulk get not implemented by all devs)
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    22
convertTimeTicks = (v) ->
bf13852dc3ab example.coffee: simplest snmpget for list of oids (avoid getAll - bulk get not implemented by all devs)
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    23
  intDiv = (a, b) -> Math.floor(a / b)
bf13852dc3ab example.coffee: simplest snmpget for list of oids (avoid getAll - bulk get not implemented by all devs)
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    24
  msec = v % 100
bf13852dc3ab example.coffee: simplest snmpget for list of oids (avoid getAll - bulk get not implemented by all devs)
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    25
  v = intDiv(v, 100)
bf13852dc3ab example.coffee: simplest snmpget for list of oids (avoid getAll - bulk get not implemented by all devs)
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    26
  secs = v % 60
bf13852dc3ab example.coffee: simplest snmpget for list of oids (avoid getAll - bulk get not implemented by all devs)
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    27
  v = intDiv(v, 60)
bf13852dc3ab example.coffee: simplest snmpget for list of oids (avoid getAll - bulk get not implemented by all devs)
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    28
  mins = v % 60
bf13852dc3ab example.coffee: simplest snmpget for list of oids (avoid getAll - bulk get not implemented by all devs)
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    29
  v = intDiv(v, 60)
bf13852dc3ab example.coffee: simplest snmpget for list of oids (avoid getAll - bulk get not implemented by all devs)
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    30
  hours = v % 24
bf13852dc3ab example.coffee: simplest snmpget for list of oids (avoid getAll - bulk get not implemented by all devs)
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    31
  days = intDiv(v, 24)
bf13852dc3ab example.coffee: simplest snmpget for list of oids (avoid getAll - bulk get not implemented by all devs)
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    32
  
bf13852dc3ab example.coffee: simplest snmpget for list of oids (avoid getAll - bulk get not implemented by all devs)
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    33
  days: days
bf13852dc3ab example.coffee: simplest snmpget for list of oids (avoid getAll - bulk get not implemented by all devs)
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    34
  hours: hours
bf13852dc3ab example.coffee: simplest snmpget for list of oids (avoid getAll - bulk get not implemented by all devs)
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    35
  mins: mins
bf13852dc3ab example.coffee: simplest snmpget for list of oids (avoid getAll - bulk get not implemented by all devs)
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    36
  secs: secs
bf13852dc3ab example.coffee: simplest snmpget for list of oids (avoid getAll - bulk get not implemented by all devs)
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    37
  msecs: msec
bf13852dc3ab example.coffee: simplest snmpget for list of oids (avoid getAll - bulk get not implemented by all devs)
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    38
bf13852dc3ab example.coffee: simplest snmpget for list of oids (avoid getAll - bulk get not implemented by all devs)
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    39
bf13852dc3ab example.coffee: simplest snmpget for list of oids (avoid getAll - bulk get not implemented by all devs)
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    40
processVarBind = (vb) ->
bf13852dc3ab example.coffee: simplest snmpget for list of oids (avoid getAll - bulk get not implemented by all devs)
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    41
  rv =
bf13852dc3ab example.coffee: simplest snmpget for list of oids (avoid getAll - bulk get not implemented by all devs)
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    42
    oid: vb.oid.reduce (x,y) -> x+"."+y
bf13852dc3ab example.coffee: simplest snmpget for list of oids (avoid getAll - bulk get not implemented by all devs)
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    43
    value: vb.value
bf13852dc3ab example.coffee: simplest snmpget for list of oids (avoid getAll - bulk get not implemented by all devs)
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    44
    type: vb.type
bf13852dc3ab example.coffee: simplest snmpget for list of oids (avoid getAll - bulk get not implemented by all devs)
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    45
    typeStr: typeStr[vb.type] ? 'Unknown'
bf13852dc3ab example.coffee: simplest snmpget for list of oids (avoid getAll - bulk get not implemented by all devs)
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    46
  if (rv.type == snmpTypes.TimeTicks)
bf13852dc3ab example.coffee: simplest snmpget for list of oids (avoid getAll - bulk get not implemented by all devs)
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    47
    rv.timeTicks = convertTimeTicks(vb.value)
bf13852dc3ab example.coffee: simplest snmpget for list of oids (avoid getAll - bulk get not implemented by all devs)
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    48
  rv
bf13852dc3ab example.coffee: simplest snmpget for list of oids (avoid getAll - bulk get not implemented by all devs)
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    49
bf13852dc3ab example.coffee: simplest snmpget for list of oids (avoid getAll - bulk get not implemented by all devs)
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    50
bf13852dc3ab example.coffee: simplest snmpget for list of oids (avoid getAll - bulk get not implemented by all devs)
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    51
bf13852dc3ab example.coffee: simplest snmpget for list of oids (avoid getAll - bulk get not implemented by all devs)
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    52
snmpget = (opts, cb) ->
bf13852dc3ab example.coffee: simplest snmpget for list of oids (avoid getAll - bulk get not implemented by all devs)
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    53
  sess = new snmp.Session({host: opts.host, community: opts.community})
bf13852dc3ab example.coffee: simplest snmpget for list of oids (avoid getAll - bulk get not implemented by all devs)
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    54
  res = []
bf13852dc3ab example.coffee: simplest snmpget for list of oids (avoid getAll - bulk get not implemented by all devs)
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    55
  snmpgetOne = (i) ->
bf13852dc3ab example.coffee: simplest snmpget for list of oids (avoid getAll - bulk get not implemented by all devs)
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    56
    if (i < opts.oids.length)
bf13852dc3ab example.coffee: simplest snmpget for list of oids (avoid getAll - bulk get not implemented by all devs)
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    57
      sess.get({oid: opts.oids[i]}, (err, vbs) ->
bf13852dc3ab example.coffee: simplest snmpget for list of oids (avoid getAll - bulk get not implemented by all devs)
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    58
        if (err)
bf13852dc3ab example.coffee: simplest snmpget for list of oids (avoid getAll - bulk get not implemented by all devs)
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    59
          res.push { error: err }
bf13852dc3ab example.coffee: simplest snmpget for list of oids (avoid getAll - bulk get not implemented by all devs)
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    60
        else
bf13852dc3ab example.coffee: simplest snmpget for list of oids (avoid getAll - bulk get not implemented by all devs)
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    61
          res.push vbs.map(processVarBind)...
bf13852dc3ab example.coffee: simplest snmpget for list of oids (avoid getAll - bulk get not implemented by all devs)
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    62
        snmpgetOne ++i
bf13852dc3ab example.coffee: simplest snmpget for list of oids (avoid getAll - bulk get not implemented by all devs)
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    63
      )
bf13852dc3ab example.coffee: simplest snmpget for list of oids (avoid getAll - bulk get not implemented by all devs)
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    64
    else
bf13852dc3ab example.coffee: simplest snmpget for list of oids (avoid getAll - bulk get not implemented by all devs)
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    65
      sess.close()
bf13852dc3ab example.coffee: simplest snmpget for list of oids (avoid getAll - bulk get not implemented by all devs)
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    66
      cb(res)
bf13852dc3ab example.coffee: simplest snmpget for list of oids (avoid getAll - bulk get not implemented by all devs)
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    67
  snmpgetOne 0
bf13852dc3ab example.coffee: simplest snmpget for list of oids (avoid getAll - bulk get not implemented by all devs)
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    68
bf13852dc3ab example.coffee: simplest snmpget for list of oids (avoid getAll - bulk get not implemented by all devs)
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    69
oids = [
bf13852dc3ab example.coffee: simplest snmpget for list of oids (avoid getAll - bulk get not implemented by all devs)
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    70
  '.1.3.6.1.2.1.1.1.0',
bf13852dc3ab example.coffee: simplest snmpget for list of oids (avoid getAll - bulk get not implemented by all devs)
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    71
  '.1.3.6.1.2.1.1.2.0',
bf13852dc3ab example.coffee: simplest snmpget for list of oids (avoid getAll - bulk get not implemented by all devs)
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    72
  '.1.3.6.1.2.1.1.3.0',
bf13852dc3ab example.coffee: simplest snmpget for list of oids (avoid getAll - bulk get not implemented by all devs)
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    73
  '.1.3.6.1.4.1.9.2.1.57.0',
bf13852dc3ab example.coffee: simplest snmpget for list of oids (avoid getAll - bulk get not implemented by all devs)
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    74
  '.1.3.6.1.4.1.9.2.1.58.0',
bf13852dc3ab example.coffee: simplest snmpget for list of oids (avoid getAll - bulk get not implemented by all devs)
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    75
  '.1.3.6.1.4.1.9.9.48.1.1.1.5.1',
bf13852dc3ab example.coffee: simplest snmpget for list of oids (avoid getAll - bulk get not implemented by all devs)
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    76
  '.1.3.6.1.4.1.9.9.48.1.1.1.6.1',
bf13852dc3ab example.coffee: simplest snmpget for list of oids (avoid getAll - bulk get not implemented by all devs)
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    77
  '.1.3.6.1.4.1.9.9.13.1.3.1.3.1'
bf13852dc3ab example.coffee: simplest snmpget for list of oids (avoid getAll - bulk get not implemented by all devs)
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    78
]
bf13852dc3ab example.coffee: simplest snmpget for list of oids (avoid getAll - bulk get not implemented by all devs)
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    79
bf13852dc3ab example.coffee: simplest snmpget for list of oids (avoid getAll - bulk get not implemented by all devs)
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    80
opts =
bf13852dc3ab example.coffee: simplest snmpget for list of oids (avoid getAll - bulk get not implemented by all devs)
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    81
  host:  process.env.HOST ? "localhost"
bf13852dc3ab example.coffee: simplest snmpget for list of oids (avoid getAll - bulk get not implemented by all devs)
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    82
  community: process.env.COMMUNITY ? "public"
bf13852dc3ab example.coffee: simplest snmpget for list of oids (avoid getAll - bulk get not implemented by all devs)
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    83
  oids: oids
bf13852dc3ab example.coffee: simplest snmpget for list of oids (avoid getAll - bulk get not implemented by all devs)
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    84
bf13852dc3ab example.coffee: simplest snmpget for list of oids (avoid getAll - bulk get not implemented by all devs)
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    85
snmpget(opts, (res) -> console.log res)