Added virtual bytes pipe for mempool graph.
Added decimals to mempool graph y-axis. fixes #14 fixes #12
This commit is contained in:
parent
d8407080ec
commit
fc6badb886
63
frontend/src/app/shared/pipes/bytes-pipe/vbytes.pipe.ts
Normal file
63
frontend/src/app/shared/pipes/bytes-pipe/vbytes.pipe.ts
Normal file
@ -0,0 +1,63 @@
|
|||||||
|
/* tslint:disable */
|
||||||
|
import { Pipe, PipeTransform } from '@angular/core';
|
||||||
|
import { isNumberFinite, isPositive, isInteger, toDecimal } from './utils';
|
||||||
|
|
||||||
|
export type ByteUnit = 'vB' | 'kvB' | 'MvB' | 'GvB' | 'TvB';
|
||||||
|
|
||||||
|
@Pipe({
|
||||||
|
name: 'vbytes'
|
||||||
|
})
|
||||||
|
export class VbytesPipe implements PipeTransform {
|
||||||
|
|
||||||
|
static formats: { [key: string]: { max: number, prev?: ByteUnit } } = {
|
||||||
|
'vB': {max: 1000},
|
||||||
|
'kvB': {max: Math.pow(1000, 2), prev: 'vB'},
|
||||||
|
'MvB': {max: Math.pow(1000, 3), prev: 'kvB'},
|
||||||
|
'GvB': {max: Math.pow(1000, 4), prev: 'MvB'},
|
||||||
|
'TvB': {max: Number.MAX_SAFE_INTEGER, prev: 'GvB'}
|
||||||
|
};
|
||||||
|
|
||||||
|
transform(input: any, decimal: number = 0, from: ByteUnit = 'vB', to?: ByteUnit): any {
|
||||||
|
|
||||||
|
if (!(isNumberFinite(input) &&
|
||||||
|
isNumberFinite(decimal) &&
|
||||||
|
isInteger(decimal) &&
|
||||||
|
isPositive(decimal))) {
|
||||||
|
return input;
|
||||||
|
}
|
||||||
|
|
||||||
|
let bytes = input;
|
||||||
|
let unit = from;
|
||||||
|
while (unit !== 'vB') {
|
||||||
|
bytes *= 1024;
|
||||||
|
unit = VbytesPipe.formats[unit].prev!;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (to) {
|
||||||
|
const format = VbytesPipe.formats[to];
|
||||||
|
|
||||||
|
const result = toDecimal(VbytesPipe.calculateResult(format, bytes), decimal);
|
||||||
|
|
||||||
|
return VbytesPipe.formatResult(result, to);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (const key in VbytesPipe.formats) {
|
||||||
|
const format = VbytesPipe.formats[key];
|
||||||
|
if (bytes < format.max) {
|
||||||
|
|
||||||
|
const result = toDecimal(VbytesPipe.calculateResult(format, bytes), decimal);
|
||||||
|
|
||||||
|
return VbytesPipe.formatResult(result, key);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static formatResult(result: number, unit: string): string {
|
||||||
|
return `${result} ${unit}`;
|
||||||
|
}
|
||||||
|
|
||||||
|
static calculateResult(format: { max: number, prev?: ByteUnit }, bytes: number) {
|
||||||
|
const prev = format.prev ? VbytesPipe.formats[format.prev] : undefined;
|
||||||
|
return prev ? bytes / prev.max : bytes;
|
||||||
|
}
|
||||||
|
}
|
@ -3,6 +3,7 @@ import { CommonModule } from '@angular/common';
|
|||||||
import { NgbButtonsModule, NgbModalModule } from '@ng-bootstrap/ng-bootstrap';
|
import { NgbButtonsModule, NgbModalModule } from '@ng-bootstrap/ng-bootstrap';
|
||||||
|
|
||||||
import { BytesPipe } from './pipes/bytes-pipe/bytes.pipe';
|
import { BytesPipe } from './pipes/bytes-pipe/bytes.pipe';
|
||||||
|
import { VbytesPipe } from './pipes/bytes-pipe/vbytes.pipe';
|
||||||
import { RoundPipe } from './pipes/math-round-pipe/math-round.pipe';
|
import { RoundPipe } from './pipes/math-round-pipe/math-round.pipe';
|
||||||
import { CeilPipe } from './pipes/math-ceil/math-ceil.pipe';
|
import { CeilPipe } from './pipes/math-ceil/math-ceil.pipe';
|
||||||
import { ChartistComponent } from '../statistics/chartist.component';
|
import { ChartistComponent } from '../statistics/chartist.component';
|
||||||
@ -18,17 +19,20 @@ import { ChartistComponent } from '../statistics/chartist.component';
|
|||||||
RoundPipe,
|
RoundPipe,
|
||||||
CeilPipe,
|
CeilPipe,
|
||||||
BytesPipe,
|
BytesPipe,
|
||||||
|
VbytesPipe,
|
||||||
],
|
],
|
||||||
exports: [
|
exports: [
|
||||||
RoundPipe,
|
RoundPipe,
|
||||||
CeilPipe,
|
CeilPipe,
|
||||||
BytesPipe,
|
BytesPipe,
|
||||||
|
VbytesPipe,
|
||||||
NgbButtonsModule,
|
NgbButtonsModule,
|
||||||
NgbModalModule,
|
NgbModalModule,
|
||||||
ChartistComponent,
|
ChartistComponent,
|
||||||
],
|
],
|
||||||
providers: [
|
providers: [
|
||||||
BytesPipe
|
BytesPipe,
|
||||||
|
VbytesPipe,
|
||||||
]
|
]
|
||||||
})
|
})
|
||||||
export class SharedModule { }
|
export class SharedModule { }
|
||||||
|
@ -1,12 +1,12 @@
|
|||||||
import { Component, OnInit, LOCALE_ID, Inject } from '@angular/core';
|
import { Component, OnInit, LOCALE_ID, Inject } from '@angular/core';
|
||||||
import { ApiService } from '../services/api.service';
|
import { ApiService } from '../services/api.service';
|
||||||
import { formatDate } from '@angular/common';
|
import { formatDate } from '@angular/common';
|
||||||
import { BytesPipe } from '../shared/pipes/bytes-pipe/bytes.pipe';
|
import { VbytesPipe } from '../shared/pipes/bytes-pipe/vbytes.pipe';
|
||||||
|
|
||||||
import * as Chartist from 'chartist';
|
import * as Chartist from 'chartist';
|
||||||
import { FormGroup, FormBuilder } from '@angular/forms';
|
import { FormGroup, FormBuilder } from '@angular/forms';
|
||||||
import { IMempoolStats } from '../blockchain/interfaces';
|
import { IMempoolStats } from '../blockchain/interfaces';
|
||||||
import { Subject, of, merge} from 'rxjs';
|
import { of, merge} from 'rxjs';
|
||||||
import { switchMap, tap } from 'rxjs/operators';
|
import { switchMap, tap } from 'rxjs/operators';
|
||||||
import { ActivatedRoute } from '@angular/router';
|
import { ActivatedRoute } from '@angular/router';
|
||||||
import { MemPoolService } from '../services/mem-pool.service';
|
import { MemPoolService } from '../services/mem-pool.service';
|
||||||
@ -34,7 +34,7 @@ export class StatisticsComponent implements OnInit {
|
|||||||
constructor(
|
constructor(
|
||||||
private apiService: ApiService,
|
private apiService: ApiService,
|
||||||
@Inject(LOCALE_ID) private locale: string,
|
@Inject(LOCALE_ID) private locale: string,
|
||||||
private bytesPipe: BytesPipe,
|
private vbytesPipe: VbytesPipe,
|
||||||
private formBuilder: FormBuilder,
|
private formBuilder: FormBuilder,
|
||||||
private route: ActivatedRoute,
|
private route: ActivatedRoute,
|
||||||
private memPoolService: MemPoolService,
|
private memPoolService: MemPoolService,
|
||||||
@ -77,7 +77,7 @@ export class StatisticsComponent implements OnInit {
|
|||||||
},
|
},
|
||||||
axisY: {
|
axisY: {
|
||||||
labelInterpolationFnc: (value: number): any => {
|
labelInterpolationFnc: (value: number): any => {
|
||||||
return this.bytesPipe.transform(value);
|
return this.vbytesPipe.transform(value, 2);
|
||||||
},
|
},
|
||||||
offset: 160
|
offset: 160
|
||||||
},
|
},
|
||||||
|
Loading…
x
Reference in New Issue
Block a user