mirror of
https://github.com/node-red/node-red-nodes.git
synced 2023-10-10 13:36:58 +02:00
Allow msg to set parameters for snmp nodes. (#299)
* I've modified the snmp libraries so that the server and the community can be defined by the msg. Error will be thrown if you try to override what was defined in the node. Verified that the contents of msg is no longer clobbered. Signed-off-by: Bryan Malyn <bimalyn@us.ibm.com> * Replaced tabs with 4 spaces. Signed-off-by: Bryan Malyn <bimalyn@us.ibm.com>
This commit is contained in:
parent
cdd3b04492
commit
0f7e8385b8
@ -37,7 +37,7 @@
|
||||
category: 'network-input',
|
||||
color:"YellowGreen",
|
||||
defaults: {
|
||||
host: {value:"",required:true},
|
||||
host: {value:""},
|
||||
community: {value:"public",required:true},
|
||||
version: {value:"1",required:true},
|
||||
oids: {value:""},
|
||||
@ -94,7 +94,7 @@
|
||||
category: 'network-input',
|
||||
color:"YellowGreen",
|
||||
defaults: {
|
||||
host: {value:"",required:true},
|
||||
host: {value:""},
|
||||
community: {value:"public",required:true},
|
||||
version: {value:"1",required:true},
|
||||
oids: {value:""},
|
||||
@ -150,7 +150,7 @@
|
||||
category: 'network-input',
|
||||
color:"YellowGreen",
|
||||
defaults: {
|
||||
host: {value:"",required:true},
|
||||
host: {value:""},
|
||||
community: {value:"public",required:true},
|
||||
version: {value:"1",required:true},
|
||||
oids: {value:""},
|
||||
@ -208,7 +208,7 @@
|
||||
category: 'network-input',
|
||||
color:"YellowGreen",
|
||||
defaults: {
|
||||
host: {value:"",required:true},
|
||||
host: {value:""},
|
||||
community: {value:"public",required:true},
|
||||
version: {value:"1",required:true},
|
||||
oids: {value:""},
|
||||
|
186
io/snmp/snmp.js
186
io/snmp/snmp.js
@ -5,16 +5,21 @@ module.exports = function(RED) {
|
||||
|
||||
function SnmpNode(n) {
|
||||
RED.nodes.createNode(this,n);
|
||||
this.community = n.community || "public";
|
||||
this.host = n.host || "127.0.0.1";
|
||||
this.community = n.community;
|
||||
this.host = n.host;
|
||||
this.version = (n.version === "2c") ? snmp.Version2c : snmp.Version1;
|
||||
this.oids = n.oids.replace(/\s/g,"");
|
||||
this.session = snmp.createSession(this.host, this.community, {version: this.version});
|
||||
var node = this;
|
||||
|
||||
this.on("input",function(msg) {
|
||||
var oids = node.oids || msg.oid;
|
||||
if (oids) {
|
||||
if (msg.host && node.host || msg.community && node.community) {
|
||||
node.warn(RED._("common.errors.nooverride"));
|
||||
}
|
||||
var host = node.host || msg.host;
|
||||
var community = node.community || msg.community;
|
||||
node.session = snmp.createSession(host, community, {version: node.version});
|
||||
node.session.get(oids.split(","), function(error, varbinds) {
|
||||
if (error) {
|
||||
node.error(error.toString(),msg);
|
||||
@ -40,18 +45,22 @@ module.exports = function(RED) {
|
||||
node.warn("No oid(s) to search for");
|
||||
}
|
||||
});
|
||||
|
||||
this.on("close", function(){
|
||||
if (node.session){
|
||||
node.session.close();
|
||||
}
|
||||
});
|
||||
}
|
||||
RED.nodes.registerType("snmp",SnmpNode);
|
||||
|
||||
function SnmpTNode(n) {
|
||||
RED.nodes.createNode(this,n);
|
||||
this.community = n.community || "public";
|
||||
this.host = n.host || "127.0.0.1";
|
||||
this.community = n.community;
|
||||
this.host = n.host;
|
||||
this.version = (n.version === "2c") ? snmp.Version2c : snmp.Version1;
|
||||
this.oids = n.oids.replace(/\s/g,"");
|
||||
this.session = snmp.createSession(this.host, this.community, {version: this.version});
|
||||
var node = this;
|
||||
var msg;
|
||||
var maxRepetitions = 20;
|
||||
|
||||
function sortInt(a, b) {
|
||||
@ -60,73 +69,69 @@ module.exports = function(RED) {
|
||||
else { return 0; }
|
||||
}
|
||||
|
||||
function responseCb(error, table) {
|
||||
if (error) {
|
||||
console.error(error.toString());
|
||||
}
|
||||
else {
|
||||
var indexes = [];
|
||||
for (var index in table) {
|
||||
if (table.hasOwnProperty(index)) {
|
||||
indexes.push(parseInt(index));
|
||||
}
|
||||
}
|
||||
indexes.sort(sortInt);
|
||||
for (var i = 0; i < indexes.length; i++) {
|
||||
var columns = [];
|
||||
for (var column in table[indexes[i]]) {
|
||||
if (table[indexes[i]].hasOwnProperty(column)) {
|
||||
columns.push(parseInt(column));
|
||||
}
|
||||
}
|
||||
columns.sort(sortInt);
|
||||
// console.log("row index = " + indexes[i]);
|
||||
// for (var j = 0; j < columns.length; j++) {
|
||||
// console.log(" column " + columns[j] + " = " + table[indexes[i]][columns[j]]);
|
||||
// }
|
||||
}
|
||||
msg.payload = table;
|
||||
node.send(msg);
|
||||
}
|
||||
}
|
||||
|
||||
this.on("input",function(m) {
|
||||
msg = m;
|
||||
this.on("input",function(msg) {
|
||||
var oids = node.oids || msg.oid;
|
||||
if (oids) {
|
||||
msg.oid = oids;
|
||||
node.session.table(oids, maxRepetitions, responseCb);
|
||||
if (msg.host && node.host || msg.community && node.community) {
|
||||
node.warn(RED._("common.errors.nooverride"));
|
||||
}
|
||||
var host = node.host || msg.host;
|
||||
var community = node.community || msg.community;
|
||||
node.session = snmp.createSession(host, community, {version: node.version});
|
||||
node.session.table(oids, maxRepetitions, function(error, table) {
|
||||
if (error) {
|
||||
node.error(error.toString());
|
||||
}
|
||||
else {
|
||||
var indexes = [];
|
||||
for (var index in table) {
|
||||
if (table.hasOwnProperty(index)) {
|
||||
indexes.push(parseInt(index));
|
||||
}
|
||||
}
|
||||
indexes.sort(sortInt);
|
||||
for (var i = 0; i < indexes.length; i++) {
|
||||
var columns = [];
|
||||
for (var column in table[indexes[i]]) {
|
||||
if (table[indexes[i]].hasOwnProperty(column)) {
|
||||
columns.push(parseInt(column));
|
||||
}
|
||||
}
|
||||
columns.sort(sortInt);
|
||||
// console.log("row index = " + indexes[i]);
|
||||
// for (var j = 0; j < columns.length; j++) {
|
||||
// console.log(" column " + columns[j] + " = " + table[indexes[i]][columns[j]]);
|
||||
// }
|
||||
}
|
||||
msg.payload = table;
|
||||
node.send(msg);
|
||||
}
|
||||
});
|
||||
}
|
||||
else {
|
||||
node.warn("No oid to search for");
|
||||
}
|
||||
});
|
||||
|
||||
this.on("close", function(){
|
||||
if (node.session){
|
||||
node.session.close();
|
||||
}
|
||||
});
|
||||
}
|
||||
RED.nodes.registerType("snmp table",SnmpTNode);
|
||||
|
||||
function SnmpSubtreeNode(n) {
|
||||
RED.nodes.createNode(this,n);
|
||||
this.community = n.community || "public";
|
||||
this.host = n.host || "127.0.0.1";
|
||||
this.community = n.community;
|
||||
this.host = n.host;
|
||||
this.version = (n.version === "2c") ? snmp.Version2c : snmp.Version1;
|
||||
this.oids = n.oids.replace(/\s/g,"");
|
||||
this.session = snmp.createSession(this.host, this.community, {version: this.version});
|
||||
var node = this;
|
||||
var maxRepetitions = 20;
|
||||
var response = [];
|
||||
|
||||
function doneCb(error) {
|
||||
if (error) {
|
||||
console.error(error.toString());
|
||||
}
|
||||
else {
|
||||
var msg = {};
|
||||
msg.payload = response;
|
||||
node.send(msg);
|
||||
response.clear();
|
||||
}
|
||||
}
|
||||
|
||||
function feedCb(varbinds) {
|
||||
for (var i = 0; i < varbinds.length; i++) {
|
||||
if (snmp.isVarbindError(varbinds[i])) {
|
||||
@ -134,7 +139,7 @@ module.exports = function(RED) {
|
||||
}
|
||||
else {
|
||||
//console.log(varbinds[i].oid + "|" + varbinds[i].value);
|
||||
response.add({oid: varbinds[i].oid, value: varbinds[i].value});
|
||||
response.push({oid: varbinds[i].oid, value: varbinds[i].value});
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -143,39 +148,47 @@ module.exports = function(RED) {
|
||||
var oids = node.oids || msg.oid;
|
||||
if (oids) {
|
||||
msg.oid = oids;
|
||||
node.session.subtree(msg.oid, maxRepetitions, feedCb, doneCb);
|
||||
//node.session.subtree(oids, maxRepetitions, responseCb);
|
||||
if (msg.host && node.host || msg.community && node.community) {
|
||||
node.warn(RED._("common.errors.nooverride"));
|
||||
}
|
||||
var host = node.host || msg.host;
|
||||
var community = node.community || msg.community;
|
||||
node.session = snmp.createSession(host, community, {version: node.version});
|
||||
node.session.subtree(msg.oid, maxRepetitions, feedCb, function(error) {
|
||||
if (error) {
|
||||
node.error(error.toString());
|
||||
}
|
||||
else {
|
||||
msg.payload = response;
|
||||
node.send(msg);
|
||||
//Clears response
|
||||
response.length = 0;
|
||||
}
|
||||
});
|
||||
}
|
||||
else {
|
||||
node.warn("No oid to search for");
|
||||
}
|
||||
});
|
||||
|
||||
this.on("close", function(){
|
||||
if (node.session){
|
||||
node.session.close();
|
||||
}
|
||||
});
|
||||
}
|
||||
RED.nodes.registerType("snmp subtree",SnmpSubtreeNode);
|
||||
|
||||
function SnmpWalkerNode(n) {
|
||||
RED.nodes.createNode(this,n);
|
||||
this.community = n.community || "public";
|
||||
this.host = n.host || "127.0.0.1";
|
||||
this.community = n.community;
|
||||
this.host = n.host;
|
||||
this.version = (n.version === "2c") ? snmp.Version2c : snmp.Version1;
|
||||
this.oids = n.oids.replace(/\s/g,"");
|
||||
this.session = snmp.createSession(this.host, this.community, {version: this.version});
|
||||
var node = this;
|
||||
var maxRepetitions = 20;
|
||||
var response = [];
|
||||
|
||||
function doneCb(error) {
|
||||
if (error) {
|
||||
node.error(error.toString());
|
||||
}
|
||||
else {
|
||||
var msg = {};
|
||||
msg.payload = response;
|
||||
node.send(msg);
|
||||
response.clear();
|
||||
}
|
||||
}
|
||||
|
||||
function feedCb(varbinds) {
|
||||
for (var i = 0; i < varbinds.length; i++) {
|
||||
if (snmp.isVarbindError(varbinds[i])) {
|
||||
@ -183,21 +196,44 @@ module.exports = function(RED) {
|
||||
}
|
||||
else {
|
||||
//console.log(varbinds[i].oid + "|" + varbinds[i].value);
|
||||
response.add({oid: varbinds[i].oid, value: varbinds[i].value});
|
||||
response.push({oid: varbinds[i].oid, value: varbinds[i].value});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
this.on("input",function(msg) {
|
||||
node.msg = msg;
|
||||
var oids = node.oids || msg.oid;
|
||||
if (oids) {
|
||||
msg.oid = oids;
|
||||
node.session.walk(msg.oid, maxRepetitions, feedCb, doneCb);
|
||||
if (msg.host && node.host || msg.community && node.community) {
|
||||
node.warn(RED._("common.errors.nooverride"));
|
||||
}
|
||||
var host = node.host || msg.host;
|
||||
var community = node.community || msg.community;
|
||||
node.session = snmp.createSession(host, community, {version: node.version});
|
||||
node.session.walk(msg.oid, maxRepetitions, feedCb, function(error) {
|
||||
if (error) {
|
||||
node.error(error.toString());
|
||||
}
|
||||
else {
|
||||
msg.payload = response;
|
||||
node.send(msg);
|
||||
//Clears response
|
||||
response.length = 0;
|
||||
}
|
||||
});
|
||||
}
|
||||
else {
|
||||
node.warn("No oid to search for");
|
||||
}
|
||||
});
|
||||
|
||||
this.on("close", function(){
|
||||
if (node.session){
|
||||
node.session.close();
|
||||
}
|
||||
});
|
||||
}
|
||||
RED.nodes.registerType("snmp walker",SnmpWalkerNode);
|
||||
};
|
||||
|
Loading…
Reference in New Issue
Block a user