stratumn-cli
Version:
CLI tools for Stratumn
75 lines (57 loc) • 1.8 kB
JavaScript
import commander from 'commander';
import moment from 'moment';
import chalk from 'chalk';
import readPackageSync from '../utils/readPackageSync';
import get from '../utils/get';
function parseTime(str) {
if (str.match(/^[0-9]{5,}$/)) {
return parseInt(str, 10);
}
const val = moment(str).valueOf();
if (isNaN(val)) {
process.stderr.write('Invalid time\n', () => process.exit(1));
}
return val;
}
commander
.version(readPackageSync('version'))
.usage('<app-name>')
.option('-f, --from <time>', 'from timestamp (milliseconds) or date', parseTime)
.option('-t, --to <time>', 'to timestamp (milliseconds) or date', parseTime)
.parse(process.argv);
if (commander.args.length !== 1) {
commander.help();
}
function handleError(err) {
process.stderr.write(err.message + '\n', () => process.exit(1));
}
function rpad(str, cols) {
return str + new Array(Math.max(0, cols - str.length) + 1).join(' ');
}
const filters = [];
if (commander.from) {
filters.push(['from', commander.from]);
}
if (commander.to) {
filters.push(['to', commander.to]);
}
let queryString = '';
if (filters.length) {
queryString = '?' + filters.map(filter => filter[0] + '=' + filter[1]);
}
get('/applications/' + commander.args[0] + '/metrics' + queryString, true)
.then(metrics => {
let content = '';
content += rpad('OPERATIONS', 16) + rpad('FOSSILS', 16) + 'ERRORS\n';
content += rpad(metrics.operationCount + '', 16);
content += chalk.cyan(rpad(metrics.fossilCount + '', 16));
content += chalk.red(metrics.errorCount) + '\n';
process.stdout.write(content, process.exit);
})
.catch(err => {
if (err.code === 'ENOENT') {
process.stdout.write('You must login first\n', () => process.exit(1));
return;
}
handleError(err);
});