filezilla-check
Advanced tools
Comparing version 0.1.1 to 0.1.2
181
cli.js
@@ -23,10 +23,2 @@ #!/usr/bin/env node | ||
var CONCURRENT_REQUESTS = 10, | ||
table = new Table({ | ||
head: ['Name', 'Ip', 'Status'], | ||
colWidths: [60, 25, 25], | ||
style: { | ||
compact: true, | ||
'padding-left': 1 | ||
} | ||
}), | ||
serverList = [], | ||
@@ -40,5 +32,12 @@ timeout = 2000, | ||
}, | ||
sortByKeys = ['ip', 'name', 'status'], | ||
bar; | ||
bar, sortKey; | ||
var keys = [ | ||
{ key: 'name', name: 'Name' }, | ||
{ key: 'host', name: 'Ip', defaultSort: true }, | ||
{ key: 'status', name: 'Status' } | ||
], | ||
sortByKeys = _.map(keys, function (key) { return key.name.toLowerCase(); }), | ||
defaultSort = _.get(_.find(keys, 'defaultSort'), 'name').toLowerCase(); | ||
program | ||
@@ -48,3 +47,3 @@ .version(version) | ||
.option('-t, --timeout <n>', 'Timeout in milliseconds', parseInt) | ||
.option('-s, --sort <sort>', 'Sort by (ip|name|status) default:ip', 'ip') | ||
.option('-s, --sort <sort>', 'Sort by (' + sortByKeys.join('|') + ') default:' + defaultSort, defaultSort) | ||
.parse(process.argv); | ||
@@ -57,2 +56,44 @@ | ||
function getIptoNumeric (host) { | ||
var addrArray = host.split('.'), | ||
num = 0; | ||
for (var i = 0; i < addrArray.length; i++) { | ||
var power = 3 - i; | ||
num += ((parseInt(addrArray[i]) % 256 * Math.pow(256, power))); | ||
} | ||
return num; | ||
} | ||
function displayTable() { | ||
_.each(keys, function (key) { | ||
key.max = _.max(serverList, function(server) { | ||
return ('' + server[key.key]).length; | ||
})[key.key].length + 5; | ||
}); | ||
var table = new Table({ | ||
head: _.pluck(keys, 'name'), | ||
colWidths: _.pluck(keys, 'max'), | ||
style: { | ||
compact: true, | ||
'padding-left': 1 | ||
} | ||
}); | ||
_.each(_.sortBy(serverList, sortKey), function (server) { | ||
var rule = []; | ||
_.each(keys, function (key) { | ||
rule.push(server[key.key]); | ||
}); | ||
table.push(rule); | ||
}); | ||
table.push([]); | ||
var total = 'Total: ' + status.total + ', Open: ' + status.open + ', Closed: ' + status.closed; | ||
table.push([total, '', '']); | ||
console.log('\n' + table.toString()); | ||
} | ||
function getServer(server, callback) { | ||
@@ -77,10 +118,55 @@ portscanner.checkPortStatus(21, { | ||
if (program.args.length !== 1) { | ||
console.error('no sitemanager.xml'); | ||
exit(); | ||
function getServers () { | ||
status.total = serverList.length; | ||
bar = new ProgressBar(' Checking servers [:bar] :percent :etas', { | ||
complete: '=', | ||
incomplete: ' ', | ||
width: 53, | ||
total: serverList.length | ||
}); | ||
async.eachLimit(serverList, CONCURRENT_REQUESTS, getServer, function(asyncErr) { | ||
if (asyncErr) { | ||
throw asyncErr; | ||
} | ||
displayTable(); | ||
}); | ||
} | ||
function processSiteManagerFile (file) { | ||
fs.readFile(file, function(err, data) { | ||
if (err) { | ||
throw err; | ||
} | ||
parser.parseString(data, function (parseErr, result) { | ||
if (parseErr) { | ||
throw parseErr; | ||
} | ||
var servers = result.FileZilla3.Servers[0].Server; | ||
serverList = _.chain(servers) | ||
.map(function (ser) { | ||
var name = ser._.replace(/[ \t]+/g, '').replace(/\n/g, ''), | ||
host = ser.Host[0].replace(/[ \t]+/g, '').replace(/\n/g, ''); | ||
return { | ||
name: name, | ||
host: host, | ||
ip: getIptoNumeric(host) | ||
}; | ||
}) | ||
.value(); | ||
getServers(); | ||
}); | ||
}); | ||
} | ||
if (sortByKeys.indexOf(program.sort) === -1) { | ||
console.error('Not a valid sort key'); | ||
exit(); | ||
} else { | ||
sortKey = program.sort; | ||
} | ||
@@ -92,61 +178,8 @@ | ||
var file = program.args[0]; | ||
var sortKey = program.sort; | ||
fs.readFile(file, function(err, data) { | ||
if (err) { | ||
throw err; | ||
} | ||
parser.parseString(data, function (parseErr, result) { | ||
if (parseErr) { | ||
throw parseErr; | ||
} | ||
var servers = result.FileZilla3.Servers[0].Server; | ||
serverList = _.chain(servers) | ||
.map(function (ser) { | ||
var name = ser._.replace(/[ \t]+/g, '').replace(/\n/g, ''), | ||
host = ser.Host[0].replace(/[ \t]+/g, '').replace(/\n/g, ''), | ||
addrArray = host.split('.'), | ||
num = 0; | ||
for (var i = 0; i < addrArray.length; i++) { | ||
var power = 3 - i; | ||
num += ((parseInt(addrArray[i]) % 256 * Math.pow(256, power))); | ||
} | ||
return { | ||
name: name, | ||
host: host, | ||
ip: num | ||
}; | ||
}) | ||
.value(); | ||
status.total = serverList.length; | ||
console.log(); | ||
bar = new ProgressBar(' Checking servers [:bar] :percent :etas', { | ||
complete: '=', | ||
incomplete: ' ', | ||
width: 53, | ||
total: serverList.length | ||
}); | ||
async.eachLimit(serverList, CONCURRENT_REQUESTS, getServer, function(asyncErr) { | ||
if (asyncErr) { | ||
throw asyncErr; | ||
} | ||
_.each(_.sortBy(serverList, sortKey), function (server) { | ||
table.push([server.name, server.host, server.status]); | ||
}); | ||
table.push([]); | ||
var total = 'Total: ' + status.total + ', Open: ' + status.open + ', Closed: ' + status.closed; | ||
table.push([total, '', '']); | ||
console.log('\n' + table.toString()); | ||
}); | ||
}); | ||
}); | ||
if (program.args.length !== 1) { | ||
console.error('no sitemanager.xml'); | ||
exit(); | ||
} else { | ||
var filename = program.args[0]; | ||
processSiteManagerFile(filename); | ||
} |
{ | ||
"name": "filezilla-checker", | ||
"version": "0.1.1", | ||
"name": "filezilla-check", | ||
"version": "0.1.2", | ||
"npm-shrinkwrap-version": "5.4.0", | ||
@@ -5,0 +5,0 @@ "node-version": "v0.12.4", |
{ | ||
"name": "filezilla-check", | ||
"version": "0.1.1", | ||
"version": "0.1.2", | ||
"description": "Checking if the servers are up or not", | ||
@@ -5,0 +5,0 @@ "main": "cli.js", |
10347
215