example.coffee
author Tomas Zeman <tzeman@volny.cz>
Thu, 28 Mar 2013 21:55:07 +0100
changeset 5 2db4f3d512bb
parent 3 edd377ebd4ca
permissions -rw-r--r--
Server prototype
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
3
edd377ebd4ca example.coffee: comments
Tomas Zeman <tzeman@volny.cz>
parents: 2
diff changeset
    22
###
edd377ebd4ca example.coffee: comments
Tomas Zeman <tzeman@volny.cz>
parents: 2
diff changeset
    23
Converts TimeTicks value to easy-to-use structure.
edd377ebd4ca example.coffee: comments
Tomas Zeman <tzeman@volny.cz>
parents: 2
diff changeset
    24
###
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
    25
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
    26
  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
    27
  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
    28
  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
    29
  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
    30
  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
    31
  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
    32
  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
    33
  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
    34
  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
    35
  
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
  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
    37
  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
    38
  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
    39
  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
    40
  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
    41
3
edd377ebd4ca example.coffee: comments
Tomas Zeman <tzeman@volny.cz>
parents: 2
diff changeset
    42
###
edd377ebd4ca example.coffee: comments
Tomas Zeman <tzeman@volny.cz>
parents: 2
diff changeset
    43
Processes SNMP result value.
edd377ebd4ca example.coffee: comments
Tomas Zeman <tzeman@volny.cz>
parents: 2
diff changeset
    44
###
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
    45
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
    46
  rv =
3
edd377ebd4ca example.coffee: comments
Tomas Zeman <tzeman@volny.cz>
parents: 2
diff changeset
    47
    oid: "." + vb.oid.reduce (x,y) -> x+"."+y
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
    48
    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
    49
    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
    50
    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
    51
  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
    52
    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
    53
  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
    54
3
edd377ebd4ca example.coffee: comments
Tomas Zeman <tzeman@volny.cz>
parents: 2
diff changeset
    55
###
edd377ebd4ca example.coffee: comments
Tomas Zeman <tzeman@volny.cz>
parents: 2
diff changeset
    56
Creates SNMP session and retrieves values for the supplied OIDs.
edd377ebd4ca example.coffee: comments
Tomas Zeman <tzeman@volny.cz>
parents: 2
diff changeset
    57
###
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
    58
snmpget = (opts, cb) ->
2
cd4a9319d71d example.coffee: abortOnError; pass opts to snmp.Session
Tomas Zeman <tzeman@volny.cz>
parents: 1
diff changeset
    59
  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
    60
  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
    61
  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
    62
    if (i < opts.oids.length)
2
cd4a9319d71d example.coffee: abortOnError; pass opts to snmp.Session
Tomas Zeman <tzeman@volny.cz>
parents: 1
diff changeset
    63
      oid = opts.oids[i]
cd4a9319d71d example.coffee: abortOnError; pass opts to snmp.Session
Tomas Zeman <tzeman@volny.cz>
parents: 1
diff changeset
    64
      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
    65
        if (err)
2
cd4a9319d71d example.coffee: abortOnError; pass opts to snmp.Session
Tomas Zeman <tzeman@volny.cz>
parents: 1
diff changeset
    66
          res.push { error: err, oid: oid }
cd4a9319d71d example.coffee: abortOnError; pass opts to snmp.Session
Tomas Zeman <tzeman@volny.cz>
parents: 1
diff changeset
    67
          if (opts.abortOnError)
cd4a9319d71d example.coffee: abortOnError; pass opts to snmp.Session
Tomas Zeman <tzeman@volny.cz>
parents: 1
diff changeset
    68
            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
    69
        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
    70
          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
    71
        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
    72
      )
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
    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
    74
      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
    75
      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
    76
  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
    77
3
edd377ebd4ca example.coffee: comments
Tomas Zeman <tzeman@volny.cz>
parents: 2
diff changeset
    78
# Example OIDs (some intentionally wrong).
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
oids = [
2
cd4a9319d71d example.coffee: abortOnError; pass opts to snmp.Session
Tomas Zeman <tzeman@volny.cz>
parents: 1
diff changeset
    80
  '.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
    81
  '.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
    82
  '.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
    83
  '.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
    84
  '.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
    85
  '.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
    86
  '.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
    87
  '.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
    88
  '.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
    89
]
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
    90
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
    91
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
    92
  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
    93
  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
    94
  oids: oids
2
cd4a9319d71d example.coffee: abortOnError; pass opts to snmp.Session
Tomas Zeman <tzeman@volny.cz>
parents: 1
diff changeset
    95
  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
    96
3
edd377ebd4ca example.coffee: comments
Tomas Zeman <tzeman@volny.cz>
parents: 2
diff changeset
    97
###
edd377ebd4ca example.coffee: comments
Tomas Zeman <tzeman@volny.cz>
parents: 2
diff changeset
    98
Do the work
edd377ebd4ca example.coffee: comments
Tomas Zeman <tzeman@volny.cz>
parents: 2
diff changeset
    99
###
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
   100
snmpget(opts, (res) -> console.log res)