|
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) |