UNPKG

@haechi-labs/henesis-cli

Version:

🚀 Command Line Interface tool to Utilize henesis

126 lines • 4.82 kB
"use strict"; 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