example.coffee
author Tomas Zeman <tzeman@volny.cz>
Wed, 27 Mar 2013 15:56:00 +0100
changeset 2 cd4a9319d71d
parent 1 bf13852dc3ab
child 3 edd377ebd4ca
permissions -rw-r--r--
example.coffee: abortOnError; pass opts to snmp.Session
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
snmpget = (opts, cb) ->
2
cd4a9319d71d example.coffee: abortOnError; pass opts to snmp.Session
Tomas Zeman <tzeman@volny.cz>
parents: 1
diff changeset
    51
  sess = new snmp.Session(opts)
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
    52
  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
    53
  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
    54
    if (i < opts.oids.length)
2
cd4a9319d71d example.coffee: abortOnError; pass opts to snmp.Session
Tomas Zeman <tzeman@volny.cz>
parents: 1
diff changeset
    55
      oid = opts.oids[i]
cd4a9319d71d example.coffee: abortOnError; pass opts to snmp.Session
Tomas Zeman <tzeman@volny.cz>
parents: 1
diff changeset
    56
      sess.get({oid: oid}, (err, vbs) ->
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
    57
        if (err)
2
cd4a9319d71d example.coffee: abortOnError; pass opts to snmp.Session
Tomas Zeman <tzeman@volny.cz>
parents: 1
diff changeset
    58
          res.push { error: err, oid: oid }
cd4a9319d71d example.coffee: abortOnError; pass opts to snmp.Session
Tomas Zeman <tzeman@volny.cz>
parents: 1
diff changeset
    59
          if (opts.abortOnError)
cd4a9319d71d example.coffee: abortOnError; pass opts to snmp.Session
Tomas Zeman <tzeman@volny.cz>
parents: 1
diff changeset
    60
            i = opts.oids.length
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
    61
        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
    62
          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
    63
        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
    64
      )
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
    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
    66
      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
    67
      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
    68
  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
    69
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
oids = [
2
cd4a9319d71d example.coffee: abortOnError; pass opts to snmp.Session
Tomas Zeman <tzeman@volny.cz>
parents: 1
diff changeset
    71
  '.1.3.6.1.2.1.1.1',
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
    72
  '.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
    73
  '.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
    74
  '.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
    75
  '.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
    76
  '.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
    77
  '.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
    78
  '.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
    79
  '.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
    80
]
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
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
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
    83
  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
    84
  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
    85
  oids: oids
2
cd4a9319d71d example.coffee: abortOnError; pass opts to snmp.Session
Tomas Zeman <tzeman@volny.cz>
parents: 1
diff changeset
    86
  abortOnError: true
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
    87
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
    88
snmpget(opts, (res) -> console.log res)