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