stratumn-cli
Version:
CLI tools for Stratumn
135 lines (101 loc) • 4.08 kB
JavaScript
;
var _commander = require('commander');
var _commander2 = _interopRequireDefault(_commander);
var _moment = require('moment');
var _moment2 = _interopRequireDefault(_moment);
var _chalk = require('chalk');
var _chalk2 = _interopRequireDefault(_chalk);
var _readPackageSync = require('../utils/readPackageSync');
var _readPackageSync2 = _interopRequireDefault(_readPackageSync);
var _get = require('../utils/get');
var _get2 = _interopRequireDefault(_get);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function parseTime(str) {
if (str.match(/^[0-9]{5,}$/)) {
return parseInt(str, 10);
}
var val = (0, _moment2.default)(str).valueOf();
if (isNaN(val)) {
process.stderr.write('Invalid time\n', function () {
return process.exit(1);
});
}
return val;
}
_commander2.default.version((0, _readPackageSync2.default)('version')).usage('[app-name]').option('-f, --from <time>', 'from timestamp (milliseconds) or date', parseTime).option('-t, --to <time>', 'to timestamp (milliseconds) or date', parseTime).option('-l, --limit <int>', 'limit number of operations', parseInt).option('-s, --state <string>', 'filter by state').option('-z, --fossilized <bool>', 'show/hide fossilized operations').option('-S, --search <string>', 'search by map id').option('-O, --order <string>', 'specify order').option('-F, --format <string>', 'specify format').parse(process.argv);
if (_commander2.default.args.length > 1) {
_commander2.default.help();
}
function handleError(err) {
process.stderr.write(err.message + '\n', function () {
return process.exit(1);
});
}
function rpad(str, cols) {
return str + new Array(Math.max(0, cols - str.length) + 1).join(' ');
}
var filters = ['from', 'to', 'limit', 'state', 'fossilized', 'search', 'order', 'format'].reduce(function (curr, opt) {
if (_commander2.default[opt]) {
curr.push([opt, _commander2.default[opt]]);
}
return curr;
}, []);
var url = void 0;
if (_commander2.default.args.length) {
url = '/applications/' + _commander2.default.args[0] + '/operations';
} else {
url = '/operations';
}
var queryString = '';
if (filters.length) {
queryString = '?' + filters.map(function (filter) {
return filter[0] + '=' + filter[1];
}).join('&');
}
(0, _get2.default)(url + queryString, true).then(function (ops) {
if (_commander2.default.format === 'CSV') {
process.stdout.write(ops, process.exit);
return;
}
if (_commander2.default.format === 'JSON') {
process.stdout.write(JSON.stringify(ops, null, ' ') + '\n', process.exit);
return;
}
var content = '';
ops.forEach(function (op) {
content += rpad('TIME', 18) + _chalk2.default.bold((0, _moment2.default)(op.time).toISOString()) + '\n';
if (!_commander2.default.args.length) {
content += rpad('APPLICATION NAME', 18) + op.applicationName + '\n';
content += rpad('APPLICATION ID', 18) + op.applicationId + '\n';
}
content += rpad('CHAIN ID', 18) + op.mapId + '\n';
content += rpad('LINK HASH', 18) + op.linkHash + '\n';
content += rpad('PREV LINK HASH', 18) + op.prevLinkHash + '\n';
content += rpad('FOSSILIZED', 18) + op.fossilized + '\n';
content += rpad('STATE', 18);
switch (op.state) {
case 'SUCCESS':
content += _chalk2.default.green(op.state) + '\n';
break;
case 'ERROR':
content += _chalk2.default.red(op.state) + '\n';
break;
default:
content += op.state + '\n';
}
content += rpad('ERROR', 18) + op.errorMessage + '\n';
content += rpad('AGENT NAME', 18) + op.agentName + '\n';
content += rpad('REQUEST IP', 18) + op.requestIp + '\n';
content += rpad('TOTAL TIME', 18) + op.totalTimeMs.toFixed(2) + ' ms\n';
content += '\n';
});
process.stdout.write(content, process.exit);
}).catch(function (err) {
if (err.code === 'ENOENT') {
process.stdout.write('You must login first\n', function () {
return process.exit(1);
});
return;
}
handleError(err);
});