-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathIfconfig.js
More file actions
121 lines (110 loc) · 5.46 KB
/
Copy pathIfconfig.js
File metadata and controls
121 lines (110 loc) · 5.46 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
var noContainer=/Error: No such image or container/;
module.exports = function(RED) {
var child_process=require("child_process");
var StringDecoder = require('string_decoder').StringDecoder;
var decoder = new StringDecoder('utf8');
function IfconfigNode(config) {
RED.nodes.createNode(this,config);
var node = this;
this.on('input', function(msg) {
var container=msg.payload.Service.toLowerCase()+"_"+msg.payload.S_Tag+"_"+msg.payload.C_Tag;
cmd="docker exec " +container+ " ifconfig";
console.log(cmd);
var outcome;
var strOutcome="";
child_process.exec(cmd,function(error,stdout,stderr){
if(error!=null){
console.log(stderr);
msg.payload.error=stderr;
node.send(msg);
return;
}else{
if(noContainer.test(stdout)){
console.log("didn't exist");
msg.payload.container="None";
}else{
console.log("did exist");
var ifaces=stdout.split(/\n\n/);
var Interfaces=new Array();
for(var i=0;i<ifaces.length;i++){
var iface=ifaces[i];
if(iface.length>1){
var Interface=new Object();
var lines=iface.split(/\n/);
var blank=lines[0].search(' ');
Interface.name=lines[0].substr(0,blank);
var hdwr=lines[0].search("HWaddr ");
if(hdwr>0){
var mac=lines[0].substr(hdwr+7).trim();
Interface.mac=mac;
}
var addrLine=lines[1].trim().replace(/inet addr/,"address");
var elements=addrLine.split(" ");
var ipv4=new Object();
for(var j=0;j<elements.length;j++){
var k_v=elements[j].split(":");
ipv4[k_v[0]]=k_v[1];
}
Interface.ipv4=ipv4;
var RX=new Object();
var TX=new Object();
for(var k=2;k<lines.length;k++){
var inet6=lines[k].search("inet6 addr:");
if(inet6>0){
var ipv6=new Object();
var scope=lines[k].search("Scope");
var start=inet6+12;
var addr=lines[k].substring(start,scope).trim();
ipv6.address=addr;
Interface.ipv6=ipv6;
}
var rxPackets=lines[k].search("RX packets:");
if(rxPackets>0){
var rxLine=lines[k].substring(rxPackets+3);
console.log(rxLine);
var stats=rxLine.split(' ');
for(var l=0;l<stats.length;l++){
console.log(stats[l]);
var k_v=stats[l].split(":");
RX[k_v[0]]=k_v[1];
}
}
var txPackets=lines[k].search("TX packets:");
if(txPackets>0){
var txLine=lines[k].substring(txPackets+3).trim();
console.log(txLine);
var stats=txLine.split(' ');
for(var l=0;l<stats.length;l++){
var k_v=stats[l].split(":");
TX[k_v[0]]=k_v[1];
}
}
Interface.TX=TX;
Interface.RX=RX;
var rxBytes=lines[k].search("RX bytes");
if(rxBytes>0){
var lastBit=lines[k].search(/ \(/);
console.log("rxBytes "+rxBytes+" lastBit "+lastBit);
var bytes=lines[k].substring(rxBytes+9,lastBit);
RX.bytes=bytes;
}
var txBytes=lines[k].search("TX bytes");
if(txBytes>0){
console.log(lines[k]);
var txLine=lines[k].substring(txBytes+9);
var lastBit=txLine.search(/ \(/);
var bytes=txLine.substring(0,lastBit);
TX.bytes=bytes;
}
}
Interfaces.push(Interface);
}
}
msg.payload.Interfaces=Interfaces;
}
node.send(msg); }
});
});
}
RED.nodes.registerType("ifconfig",IfconfigNode);
}