blob: e413a40af6a2bd2632411c105652faac42d0df00 [file] [log] [blame]
import * as utils from './utils.js';
import log from 'npmlog';
import request from 'request';
import Promise from 'bluebird';
import nmo from './nmo.js';
export const cli = isOnlineCli;
function isOnlineCli (...urls) {
return new Promise((resolve, reject) => {
if (!urls.length) {
const err = new Error('Usage: nmo isonline <url>, [<url>] ...');
err.type = 'EUSAGE';
return reject(err);
}
isonline.apply(isonline, urls)
.then((results) => {
const jsonOut = nmo.config.get('json');
if (jsonOut) {
console.log(results);
return resolve(results);
}
Object.keys(results).forEach((entry) => {
let msg = 'seems to be offline';
if (results[entry]) {
msg = 'seems to be online';
}
console.log(entry, msg);
resolve(results);
});
}, reject);
});
}
export default isonline;
function isonline (...args) {
return new Promise((resolve, reject) => {
const urlPromises = args.map((url) => {
return isNodeOnline(url);
});
Promise.all(urlPromises).then((results) => {
results = results.reduce((acc, el) => {
const key = Object.keys(el)[0];
acc[key] = el[key];
return acc;
}, {});
resolve(results);
}, reject);
});
}
function isNodeOnline (url) {
return new Promise((resolve, reject) => {
const er = utils.checkUrl(url);
if (er) {
return reject(er);
}
const cleanedUrl = utils.removeUsernamePw(url);
log.http('request', 'GET', cleanedUrl);
request(url, (err, res, body) => {
if (err && (err.code === 'ECONNREFUSED'
|| err.code === 'ENOTFOUND')) {
return resolve({[url]: false});
}
if (err) {
return reject(err);
}
log.http(res.statusCode, cleanedUrl);
resolve({[url]: res.statusCode < 300});
});
});
}