blob: ce0c85ee72e7d58fd0c23f69ba91a1cb64f50c3d [file] [log] [blame]
import nmo from './nmo.js';
import Wreck from 'wreck';
import Promise from 'bluebird';
import log from 'npmlog';
import prettyjson from 'prettyjson';
import {getUrlFromCluster, validUrl, removeUsernamePw, checkNodeOnline } from './utils';
export function cli (cluster, filter) {
return new Promise((resolve, reject) => {
if (!cluster) {
const msg = [
'Usage:',
'',
'nmo activetasks <cluster> [<filter>] [--json]',
'nmo activetasks <url> [<filter>] [--json]'
].join('\n');
const err = new Error(msg);
err.type = 'EUSAGE';
return reject(err);
}
getActiveTask(cluster, filter).then(tasks => {
const jsonOut = nmo.config.get('json');
if (jsonOut) {
console.log(tasks);
} else {
if (tasks.length === 0) {
if (filter) {
console.log('There are no active tasks for that filter.');
} else {
console.log('There are no active tasks at the moment.');
}
} else {
console.log('Active Tasks:');
console.log(prettyjson.render(tasks));
}
}
resolve(tasks);
}).catch(err => {
reject(err);
});
});
}
export function filterTasks (tasks, searchTerm) {
if (!searchTerm) {
return tasks;
}
return tasks.filter(task => {
if (task.type === searchTerm) {
return true;
}
var regex = new RegExp(searchTerm, 'g');
const databaseValues = ['database', 'source', 'target'].reduce((sum, field) => {
if (task[field]) {
sum += task[field];
}
return sum;
}, '');
return regex.test(databaseValues);
});
}
export default function getActiveTask (cluster, filter) {
return new Promise((resolve, reject) => {
const url = getUrlFromCluster(cluster);
let er = validUrl(url);
if (er) {
er.type = 'EUSAGE';
return reject(er);
}
checkNodeOnline(url)
.then(() => {
const activetasksUrl = url + '/_active_tasks';
const cleanedUrl = removeUsernamePw(url);
log.http('request', 'GET', cleanedUrl);
Wreck.get(activetasksUrl, (err, res, payload) => {
if (err) {
if (err.code === 'ECONNREFUSED' || err.code === 'ENOTFOUND') {
const noNodeErr = new Error('Could not connect to ' + activetasksUrl +
' this could mean the node is down.');
noNodeErr.type = 'EUSAGE';
return reject(noNodeErr);
}
err.type = 'EUSAGE';
return reject(err);
}
log.http(res.statusCode, cleanedUrl);
const tasks = filterTasks(JSON.parse(payload), filter);
resolve(tasks);
});
})
.catch(err => reject(err));
});
}