@haechi-labs/henesis-cli
Version:
🚀 Command Line Interface tool to Utilize henesis
126 lines • 4.82 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const tslib_1 = require("tslib");
const base_1 = tslib_1.__importDefault(require("../../common/base"));
const cli_ux_1 = require("cli-ux");
const node_1 = tslib_1.__importDefault(require("../../rpc/node"));
const types_1 = require("../../types");
const utils_1 = require("../../utils");
exports.columns = {
date: {
header: 'Date',
minWidth: 13,
get: (row) => row.date,
},
usage: {
header: 'Usage',
minWidth: 13,
get: (row) => row.usage,
},
bandwidth: {
header: 'Bandwidth',
minWidth: 10,
get: (row) => row.bandwidth,
},
};
class UsageViewer {
constructor(logger) {
this.logger = logger;
}
display(nodeDailyStats, nodeHourlyStats) {
if (nodeDailyStats.length !== 0 || nodeHourlyStats.length !== 0) {
const filteredDailyStats = this.filterDailyStats(nodeDailyStats, this.getPlatform());
const filteredHourlyStats = this.filterHourlyStats(nodeHourlyStats, this.getPlatform());
const aggregatedStats = this.aggregateStats(filteredDailyStats, filteredHourlyStats);
this.logger.log(`Henesis Trusted Node (${this.getPlatform()}) Statistics`);
this.logger.log();
this.logger.log('Total rpc call of this month: ' +
utils_1.formatNumbers(this.getTotalUsage(filteredDailyStats, filteredHourlyStats)));
this.logger.log('This command shows the trusted node usage this month(The stat is updated every hour).');
this.logger.log('The daily statistic is added at UTC+0.');
cli_ux_1.cli.table(aggregatedStats, exports.columns, {
printLine: this.logger.log,
});
this.logger.log();
this.logger.log();
}
else {
this.logger.log('Your trusted node statistics does not exist');
}
}
filterDailyStats(nodeDailyStats, platform) {
return nodeDailyStats.filter(dailyStat => {
return dailyStat.platform === platform;
});
}
filterHourlyStats(nodeHourlyStats, platform) {
return nodeHourlyStats.filter(hourlyStat => {
return hourlyStat.platform === platform;
});
}
getTotalUsage(filteredDailyStats, filteredHourlyStats) {
return (filteredDailyStats.reduce((a, b) => {
return a + b.count;
}, 0) +
filteredHourlyStats.reduce((a, b) => {
return a + b.count;
}, 0));
}
aggregateStats(filteredDailyStats, filteredHourlyStats) {
let nodeUsages = [];
if (filteredHourlyStats.length > 0) {
nodeUsages.push(new types_1.NodeUsage(filteredHourlyStats[0].createdAt.split('T')[0], utils_1.formatNumbers(filteredHourlyStats.reduce((a, b) => {
return a + b.count;
}, 0)), utils_1.formatBytes(filteredHourlyStats.reduce((a, b) => {
return a + b.requestBytes + b.responseBytes;
}, 0))));
}
filteredDailyStats.forEach(nodeDailyStat => {
// json rpc db record is created at tomorrow. 1 day time difference exists now.
const utcDate = new Date(Date.UTC(+nodeDailyStat.createdAt.substring(0, 4), +nodeDailyStat.createdAt.substring(5, 7) - 1, +nodeDailyStat.createdAt.substring(8, 10) - 1)).toISOString();
const nodeUsage = new types_1.NodeUsage(utcDate.split('T')[0], utils_1.formatNumbers(nodeDailyStat.count), utils_1.formatBytes(nodeDailyStat.requestBytes + nodeDailyStat.responseBytes));
nodeUsages.push(nodeUsage);
});
return nodeUsages;
}
}
class EthUsageViewer extends UsageViewer {
constructor(logger) {
super(logger);
this.platform = 'ethereum';
}
getPlatform() {
return this.platform;
}
}
class KlayUsageViewer extends UsageViewer {
constructor(logger) {
super(logger);
this.platform = 'klaytn';
}
getPlatform() {
return this.platform;
}
}
class Usage extends base_1.default {
async run() {
try {
// rpc call
const [nodeDailyStats, nodeHourlyStats] = await Promise.all([
node_1.default.dailyUsage(),
node_1.default.hourlyUsage(),
]);
new EthUsageViewer(this).display(nodeDailyStats, nodeHourlyStats);
new KlayUsageViewer(this).display(nodeDailyStats, nodeHourlyStats);
}
catch (err) {
this.error(err.message);
}
}
}
exports.default = Usage;
Usage.description = 'show truested node statistics';
Usage.examples = [`$ henesis node:usage`];
Usage.flags = {};
Usage.args = [];
//# sourceMappingURL=usage.js.map