| 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)); |
| }); |
| } |