From 45542d5f06888617f7388db802115c325496b430 Mon Sep 17 00:00:00 2001 From: nymkappa Date: Mon, 10 Jan 2022 18:52:56 +0900 Subject: [PATCH] Apply AVG() on vbytes_per_second - Cap extreme vbytes_per_second values --- backend/src/api/statistics.ts | 2 +- .../statistics/statistics.component.ts | 29 +++++++++++++++++++ 2 files changed, 30 insertions(+), 1 deletion(-) diff --git a/backend/src/api/statistics.ts b/backend/src/api/statistics.ts index ec5dd89e2..cd603f619 100644 --- a/backend/src/api/statistics.ts +++ b/backend/src/api/statistics.ts @@ -320,7 +320,7 @@ class Statistics { private getQueryForDays(div: number, interval: string) { return `SELECT id, UNIX_TIMESTAMP(added) as added, unconfirmed_transactions, tx_per_second, - vbytes_per_second, + CAST(avg(vbytes_per_second) as FLOAT) as vbytes_per_second, vsize_1, vsize_2, vsize_3, diff --git a/frontend/src/app/components/statistics/statistics.component.ts b/frontend/src/app/components/statistics/statistics.component.ts index 6245264ea..d8d560790 100644 --- a/frontend/src/app/components/statistics/statistics.component.ts +++ b/frontend/src/app/components/statistics/statistics.component.ts @@ -124,6 +124,8 @@ export class StatisticsComponent implements OnInit { mempoolStats.reverse(); const labels = mempoolStats.map(stats => stats.added); + this.capExtremeVbytesValues(); + this.mempoolTransactionsWeightPerSecondData = { labels: labels, series: [mempoolStats.map((stats) => [stats.added * 1000, stats.vbytes_per_second])], @@ -162,4 +164,31 @@ export class StatisticsComponent implements OnInit { } }) } + + /** + * All value higher that "median * capRatio" are capped + */ + capExtremeVbytesValues() { + let capRatio = 10; + if (['1m', '3m', '6m', '1y', '2y', '3y'].includes(this.graphWindowPreference)) { + capRatio = 4; + } + + // Find median value + let vBytes : number[] = []; + for (let i = 0; i < this.mempoolStats.length; ++i) { + vBytes.push(this.mempoolStats[i].vbytes_per_second); + } + const sorted = vBytes.slice().sort((a, b) => a - b); + const middle = Math.floor(sorted.length / 2); + let median = sorted[middle]; + if (sorted.length % 2 === 0) { + median = (sorted[middle - 1] + sorted[middle]) / 2; + } + + // Cap + for (let i = 0; i < this.mempoolStats.length; ++i) { + this.mempoolStats[i].vbytes_per_second = Math.min(median * capRatio, this.mempoolStats[i].vbytes_per_second); + } + } }