| author | Tomas Zeman <tzeman@volny.cz> |
| Fri, 12 Apr 2013 10:43:01 +0200 | |
| changeset 7 | 691c46c94ee6 |
| parent 3 | edd377ebd4ca |
| permissions | -rw-r--r-- |
|
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 | 22 |
### |
23 |
Converts TimeTicks value to easy-to-use structure. |
|
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 | 42 |
### |
43 |
Processes SNMP result value. |
|
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 | 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 | 55 |
### |
56 |
Creates SNMP session and retrieves values for the supplied OIDs. |
|
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 | 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 | 97 |
### |
98 |
Do the work |
|
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) |