Show more stats in pool ranking pie widget
This commit is contained in:
		
							parent
							
								
									f9e361a9c0
								
							
						
					
					
						commit
						d45f3c32cf
					
				@ -78,7 +78,7 @@ export class HashrateChartPoolsComponent implements OnInit {
 | 
				
			|||||||
                    name: name,
 | 
					                    name: name,
 | 
				
			||||||
                    showSymbol: false,
 | 
					                    showSymbol: false,
 | 
				
			||||||
                    symbol: 'none',
 | 
					                    symbol: 'none',
 | 
				
			||||||
                    data: grouped[name].map((val) => [val.timestamp * 1000, (val.share * 100).toFixed(2)]),
 | 
					                    data: grouped[name].map((val) => [val.timestamp * 1000, val.share * 100]),
 | 
				
			||||||
                    type: 'line',
 | 
					                    type: 'line',
 | 
				
			||||||
                    lineStyle: { width: 0 },
 | 
					                    lineStyle: { width: 0 },
 | 
				
			||||||
                    areaStyle: { opacity: 1 },
 | 
					                    areaStyle: { opacity: 1 },
 | 
				
			||||||
@ -149,7 +149,7 @@ export class HashrateChartPoolsComponent implements OnInit {
 | 
				
			|||||||
          data.sort((a, b) => b.data[1] - a.data[1]);
 | 
					          data.sort((a, b) => b.data[1] - a.data[1]);
 | 
				
			||||||
          for (const pool of data) {
 | 
					          for (const pool of data) {
 | 
				
			||||||
            if (pool.data[1] > 0) {
 | 
					            if (pool.data[1] > 0) {
 | 
				
			||||||
              tooltip += `${pool.marker} ${pool.seriesName}: ${pool.data[1]}%<br>`
 | 
					              tooltip += `${pool.marker} ${pool.seriesName}: ${pool.data[1].toFixed(2)}%<br>`;
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
          }
 | 
					          }
 | 
				
			||||||
          return tooltip;
 | 
					          return tooltip;
 | 
				
			||||||
 | 
				
			|||||||
@ -20,27 +20,6 @@
 | 
				
			|||||||
    <div class="col">
 | 
					    <div class="col">
 | 
				
			||||||
      <div class="card" style="height: 385px">
 | 
					      <div class="card" style="height: 385px">
 | 
				
			||||||
        <div class="card-body">
 | 
					        <div class="card-body">
 | 
				
			||||||
          <div class="pool-distribution">
 | 
					 | 
				
			||||||
            <div class="item">
 | 
					 | 
				
			||||||
              <h5 class="card-title" i18n="dashboard.minimum-fee|Minimum mempool fee">Blocks (1w)</h5>
 | 
					 | 
				
			||||||
              <p class="card-text">
 | 
					 | 
				
			||||||
                1082
 | 
					 | 
				
			||||||
              </p>
 | 
					 | 
				
			||||||
            </div>
 | 
					 | 
				
			||||||
            <div class="item">
 | 
					 | 
				
			||||||
              <h5 class="card-title" i18n="dashboard.minimum-fee|Minimum mempool fee">Miners luck (1w)</h5>
 | 
					 | 
				
			||||||
              <p class="card-text">
 | 
					 | 
				
			||||||
                107.25%
 | 
					 | 
				
			||||||
              </p>
 | 
					 | 
				
			||||||
            </div>
 | 
					 | 
				
			||||||
            <div class="item">
 | 
					 | 
				
			||||||
              <h5 class="card-title" i18n="dashboard.minimum-fee|Minimum mempool fee">Miners Gini (1w)</h5>
 | 
					 | 
				
			||||||
              <p class="card-text">
 | 
					 | 
				
			||||||
                0.123
 | 
					 | 
				
			||||||
              </p>
 | 
					 | 
				
			||||||
            </div>
 | 
					 | 
				
			||||||
          </div>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
          <app-pool-ranking [widget]=true></app-pool-ranking>
 | 
					          <app-pool-ranking [widget]=true></app-pool-ranking>
 | 
				
			||||||
          <div class="mt-1"><a [routerLink]="['/mining/pools' | relativeUrl]" i18n="dashboard.view-more">View more »</a></div>
 | 
					          <div class="mt-1"><a [routerLink]="['/mining/pools' | relativeUrl]" i18n="dashboard.view-more">View more »</a></div>
 | 
				
			||||||
        </div>
 | 
					        </div>
 | 
				
			||||||
 | 
				
			|||||||
@ -55,55 +55,3 @@
 | 
				
			|||||||
  text-align: center;
 | 
					  text-align: center;
 | 
				
			||||||
  padding-bottom: 3px;
 | 
					  padding-bottom: 3px;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					 | 
				
			||||||
.pool-distribution {
 | 
					 | 
				
			||||||
  min-height: 56px;
 | 
					 | 
				
			||||||
  display: block;
 | 
					 | 
				
			||||||
  @media (min-width: 485px) {
 | 
					 | 
				
			||||||
    display: flex;
 | 
					 | 
				
			||||||
    flex-direction: row;
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
  h5 {
 | 
					 | 
				
			||||||
    margin-bottom: 10px;
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
  .item {
 | 
					 | 
				
			||||||
    width: 50%;
 | 
					 | 
				
			||||||
    margin: 0px auto 10px;
 | 
					 | 
				
			||||||
    display: inline-block;
 | 
					 | 
				
			||||||
    @media (min-width: 485px) {
 | 
					 | 
				
			||||||
      margin: 0px auto 10px;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    @media (min-width: 785px) {
 | 
					 | 
				
			||||||
      margin: 0px auto 0px;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    &:last-child {
 | 
					 | 
				
			||||||
      margin: 0px auto 0px;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    &:nth-child(2) {
 | 
					 | 
				
			||||||
      order: 2;
 | 
					 | 
				
			||||||
      @media (min-width: 485px) {
 | 
					 | 
				
			||||||
        order: 3;
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    &:nth-child(3) {
 | 
					 | 
				
			||||||
      order: 3;
 | 
					 | 
				
			||||||
      @media (min-width: 485px) {
 | 
					 | 
				
			||||||
        order: 2;
 | 
					 | 
				
			||||||
        display: block;
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
      @media (min-width: 768px) {
 | 
					 | 
				
			||||||
        display: none;
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
      @media (min-width: 992px) {
 | 
					 | 
				
			||||||
        display: block;
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    .card-text {
 | 
					 | 
				
			||||||
      font-size: 18px;
 | 
					 | 
				
			||||||
      span {
 | 
					 | 
				
			||||||
        color: #ffffff66;
 | 
					 | 
				
			||||||
        font-size: 12px;
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@ -1,5 +1,26 @@
 | 
				
			|||||||
<div [class]="widget === false ? 'container-xl' : ''">
 | 
					<div [class]="widget === false ? 'container-xl' : ''">
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  <div class="pool-distribution" *ngIf="widget && (miningStatsObservable$ | async) as miningStats">
 | 
				
			||||||
 | 
					    <div class="item">
 | 
				
			||||||
 | 
					      <h5 class="card-title" i18n="mining.miners-luck">Pools luck (1w)</h5>
 | 
				
			||||||
 | 
					      <p class="card-text">
 | 
				
			||||||
 | 
					        {{ miningStats['minersLuck'] }}%
 | 
				
			||||||
 | 
					      </p>
 | 
				
			||||||
 | 
					    </div>
 | 
				
			||||||
 | 
					    <div class="item">
 | 
				
			||||||
 | 
					      <h5 class="card-title" i18n="master-page.blocks">Blocks (1w)</h5>
 | 
				
			||||||
 | 
					      <p class="card-text">
 | 
				
			||||||
 | 
					        {{ miningStats.blockCount }}
 | 
				
			||||||
 | 
					      </p>
 | 
				
			||||||
 | 
					    </div>
 | 
				
			||||||
 | 
					    <div class="item">
 | 
				
			||||||
 | 
					      <h5 class="card-title" i18n="mining.miners-count">Pools count (1w)</h5>
 | 
				
			||||||
 | 
					      <p class="card-text">
 | 
				
			||||||
 | 
					        {{ miningStats.pools.length }}
 | 
				
			||||||
 | 
					      </p>
 | 
				
			||||||
 | 
					    </div>
 | 
				
			||||||
 | 
					  </div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  <div [class]="widget ? 'chart-widget' : 'chart'"
 | 
					  <div [class]="widget ? 'chart-widget' : 'chart'"
 | 
				
			||||||
    echarts [initOpts]="chartInitOptions" [options]="chartOptions" (chartInit)="onChartInit($event)"></div>
 | 
					    echarts [initOpts]="chartInitOptions" [options]="chartOptions" (chartInit)="onChartInit($event)"></div>
 | 
				
			||||||
  <div class="text-center loadingGraphs" *ngIf="isLoading">
 | 
					  <div class="text-center loadingGraphs" *ngIf="isLoading">
 | 
				
			||||||
 | 
				
			|||||||
@ -47,3 +47,59 @@
 | 
				
			|||||||
.loadingGraphs.widget {
 | 
					.loadingGraphs.widget {
 | 
				
			||||||
  top: 25%;
 | 
					  top: 25%;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.pool-distribution {
 | 
				
			||||||
 | 
					  min-height: 56px;
 | 
				
			||||||
 | 
					  display: block;
 | 
				
			||||||
 | 
					  @media (min-width: 485px) {
 | 
				
			||||||
 | 
					    display: flex;
 | 
				
			||||||
 | 
					    flex-direction: row;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  h5 {
 | 
				
			||||||
 | 
					    margin-bottom: 10px;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  .item {
 | 
				
			||||||
 | 
					    width: 50%;
 | 
				
			||||||
 | 
					    margin: 0px auto 10px;
 | 
				
			||||||
 | 
					    display: inline-block;
 | 
				
			||||||
 | 
					    @media (min-width: 485px) {
 | 
				
			||||||
 | 
					      margin: 0px auto 10px;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    @media (min-width: 785px) {
 | 
				
			||||||
 | 
					      margin: 0px auto 0px;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    &:last-child {
 | 
				
			||||||
 | 
					      margin: 0px auto 0px;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    &:nth-child(2) {
 | 
				
			||||||
 | 
					      order: 2;
 | 
				
			||||||
 | 
					      @media (min-width: 485px) {
 | 
				
			||||||
 | 
					        order: 3;
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    &:nth-child(3) {
 | 
				
			||||||
 | 
					      order: 3;
 | 
				
			||||||
 | 
					      @media (min-width: 485px) {
 | 
				
			||||||
 | 
					        order: 2;
 | 
				
			||||||
 | 
					        display: block;
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      @media (min-width: 768px) {
 | 
				
			||||||
 | 
					        display: none;
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      @media (min-width: 992px) {
 | 
				
			||||||
 | 
					        display: block;
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    .card-title {
 | 
				
			||||||
 | 
					      font-size: 1rem;
 | 
				
			||||||
 | 
					      color: #4a68b9;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    .card-text {
 | 
				
			||||||
 | 
					      font-size: 18px;
 | 
				
			||||||
 | 
					      span {
 | 
				
			||||||
 | 
					        color: #ffffff66;
 | 
				
			||||||
 | 
					        font-size: 12px;
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@ -85,6 +85,7 @@ export class PoolRankingComponent implements OnInit {
 | 
				
			|||||||
        }),
 | 
					        }),
 | 
				
			||||||
        map(data => {
 | 
					        map(data => {
 | 
				
			||||||
          data.pools = data.pools.map((pool: SinglePoolStats) => this.formatPoolUI(pool));
 | 
					          data.pools = data.pools.map((pool: SinglePoolStats) => this.formatPoolUI(pool));
 | 
				
			||||||
 | 
					          data['minersLuck'] = (100 * (data.blockCount / 1008)).toFixed(2); // luck 1w
 | 
				
			||||||
          return data;
 | 
					          return data;
 | 
				
			||||||
        }),
 | 
					        }),
 | 
				
			||||||
        tap(data => {
 | 
					        tap(data => {
 | 
				
			||||||
@ -298,7 +299,7 @@ export class PoolRankingComponent implements OnInit {
 | 
				
			|||||||
  /**
 | 
					  /**
 | 
				
			||||||
   * Default mining stats if something goes wrong
 | 
					   * Default mining stats if something goes wrong
 | 
				
			||||||
   */
 | 
					   */
 | 
				
			||||||
  getEmptyMiningStat() {
 | 
					  getEmptyMiningStat(): MiningStats {
 | 
				
			||||||
    return {
 | 
					    return {
 | 
				
			||||||
      lastEstimatedHashrate: 'Error',
 | 
					      lastEstimatedHashrate: 'Error',
 | 
				
			||||||
      blockCount: 0,
 | 
					      blockCount: 0,
 | 
				
			||||||
 | 
				
			|||||||
@ -64,7 +64,7 @@ export interface SinglePoolStats {
 | 
				
			|||||||
  blockCount: number;
 | 
					  blockCount: number;
 | 
				
			||||||
  emptyBlocks: number;
 | 
					  emptyBlocks: number;
 | 
				
			||||||
  rank: number;
 | 
					  rank: number;
 | 
				
			||||||
  share: string;
 | 
					  share: number;
 | 
				
			||||||
  lastEstimatedHashrate: string;
 | 
					  lastEstimatedHashrate: string;
 | 
				
			||||||
  emptyBlockRatio: string;
 | 
					  emptyBlockRatio: string;
 | 
				
			||||||
  logo: string;
 | 
					  logo: string;
 | 
				
			||||||
@ -75,13 +75,6 @@ export interface PoolsStats {
 | 
				
			|||||||
  oldestIndexedBlockTimestamp: number;
 | 
					  oldestIndexedBlockTimestamp: number;
 | 
				
			||||||
  pools: SinglePoolStats[];
 | 
					  pools: SinglePoolStats[];
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
export interface MiningStats {
 | 
					 | 
				
			||||||
  lastEstimatedHashrate: string;
 | 
					 | 
				
			||||||
  blockCount: number;
 | 
					 | 
				
			||||||
  totalEmptyBlock: number;
 | 
					 | 
				
			||||||
  totalEmptyBlockRatio: string;
 | 
					 | 
				
			||||||
  pools: SinglePoolStats[];
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * Pool component
 | 
					 * Pool component
 | 
				
			||||||
 | 
				
			|||||||
@ -73,7 +73,7 @@ export class MiningService {
 | 
				
			|||||||
    const totalEmptyBlockRatio = (totalEmptyBlock / stats.blockCount * 100).toFixed(2);
 | 
					    const totalEmptyBlockRatio = (totalEmptyBlock / stats.blockCount * 100).toFixed(2);
 | 
				
			||||||
    const poolsStats = stats.pools.map((poolStat) => {
 | 
					    const poolsStats = stats.pools.map((poolStat) => {
 | 
				
			||||||
      return {
 | 
					      return {
 | 
				
			||||||
        share: (poolStat.blockCount / stats.blockCount * 100).toFixed(2),
 | 
					        share: parseFloat((poolStat.blockCount / stats.blockCount * 100).toFixed(2)),
 | 
				
			||||||
        lastEstimatedHashrate: (poolStat.blockCount / stats.blockCount * stats.lastEstimatedHashrate / hashrateDivider).toFixed(2),
 | 
					        lastEstimatedHashrate: (poolStat.blockCount / stats.blockCount * stats.lastEstimatedHashrate / hashrateDivider).toFixed(2),
 | 
				
			||||||
        emptyBlockRatio: (poolStat.emptyBlocks / poolStat.blockCount * 100).toFixed(2),
 | 
					        emptyBlockRatio: (poolStat.emptyBlocks / poolStat.blockCount * 100).toFixed(2),
 | 
				
			||||||
        logo: `./resources/mining-pools/` + poolStat.name.toLowerCase().replace(' ', '').replace('.', '') + '.svg',
 | 
					        logo: `./resources/mining-pools/` + poolStat.name.toLowerCase().replace(' ', '').replace('.', '') + '.svg',
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user