Merge pull request #1110 from nymkappa/feature/filter-out-extreme-values
Cap extreme vbytes_per_second values
This commit is contained in:
		
						commit
						a4a8fb64b1
					
				@ -320,7 +320,7 @@ class Statistics {
 | 
				
			|||||||
  private getQueryForDays(div: number, interval: string) {
 | 
					  private getQueryForDays(div: number, interval: string) {
 | 
				
			||||||
    return `SELECT id, UNIX_TIMESTAMP(added) as added, unconfirmed_transactions,
 | 
					    return `SELECT id, UNIX_TIMESTAMP(added) as added, unconfirmed_transactions,
 | 
				
			||||||
      tx_per_second,
 | 
					      tx_per_second,
 | 
				
			||||||
      vbytes_per_second,
 | 
					      CAST(avg(vbytes_per_second) as FLOAT) as vbytes_per_second,
 | 
				
			||||||
      vsize_1,
 | 
					      vsize_1,
 | 
				
			||||||
      vsize_2,
 | 
					      vsize_2,
 | 
				
			||||||
      vsize_3,
 | 
					      vsize_3,
 | 
				
			||||||
 | 
				
			|||||||
@ -124,6 +124,8 @@ export class StatisticsComponent implements OnInit {
 | 
				
			|||||||
    mempoolStats.reverse();
 | 
					    mempoolStats.reverse();
 | 
				
			||||||
    const labels = mempoolStats.map(stats => stats.added);
 | 
					    const labels = mempoolStats.map(stats => stats.added);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    this.capExtremeVbytesValues();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    this.mempoolTransactionsWeightPerSecondData = {
 | 
					    this.mempoolTransactionsWeightPerSecondData = {
 | 
				
			||||||
      labels: labels,
 | 
					      labels: labels,
 | 
				
			||||||
      series: [mempoolStats.map((stats) => [stats.added * 1000, stats.vbytes_per_second])],
 | 
					      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);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user