Cleanup empty block in api response - Update cache warmer
This commit is contained in:
		
							parent
							
								
									2b5d972e8d
								
							
						
					
					
						commit
						f23f7f1cfa
					
				@ -1,5 +1,5 @@
 | 
			
		||||
import { PoolInfo, PoolStats } from '../mempool.interfaces';
 | 
			
		||||
import BlocksRepository, { EmptyBlocks } from '../repositories/BlocksRepository';
 | 
			
		||||
import BlocksRepository from '../repositories/BlocksRepository';
 | 
			
		||||
import PoolsRepository from '../repositories/PoolsRepository';
 | 
			
		||||
import HashratesRepository from '../repositories/HashratesRepository';
 | 
			
		||||
import bitcoinClient from './bitcoin/bitcoin-client';
 | 
			
		||||
@ -20,25 +20,21 @@ class Mining {
 | 
			
		||||
    const poolsStatistics = {};
 | 
			
		||||
 | 
			
		||||
    const poolsInfo: PoolInfo[] = await PoolsRepository.$getPoolsInfo(interval);
 | 
			
		||||
    const emptyBlocks: EmptyBlocks[] = await BlocksRepository.$getEmptyBlocks(null, interval);
 | 
			
		||||
    const emptyBlocks: any[] = await BlocksRepository.$countEmptyBlocks(null, interval);
 | 
			
		||||
 | 
			
		||||
    const poolsStats: PoolStats[] = [];
 | 
			
		||||
    let rank = 1;
 | 
			
		||||
 | 
			
		||||
    poolsInfo.forEach((poolInfo: PoolInfo) => {
 | 
			
		||||
      const emptyBlocksCount = emptyBlocks.filter((emptyCount) => emptyCount.poolId === poolInfo.poolId);
 | 
			
		||||
      const poolStat: PoolStats = {
 | 
			
		||||
        poolId: poolInfo.poolId, // mysql row id
 | 
			
		||||
        name: poolInfo.name,
 | 
			
		||||
        link: poolInfo.link,
 | 
			
		||||
        blockCount: poolInfo.blockCount,
 | 
			
		||||
        rank: rank++,
 | 
			
		||||
        emptyBlocks: 0
 | 
			
		||||
        emptyBlocks: emptyBlocksCount.length > 0 ? emptyBlocksCount[0]['count'] : 0
 | 
			
		||||
      };
 | 
			
		||||
      for (let i = 0; i < emptyBlocks.length; ++i) {
 | 
			
		||||
        if (emptyBlocks[i].poolId === poolInfo.poolId) {
 | 
			
		||||
          poolStat.emptyBlocks++;
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
      poolsStats.push(poolStat);
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
@ -65,12 +61,12 @@ class Mining {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    const blockCount: number = await BlocksRepository.$blockCount(poolId);
 | 
			
		||||
    const emptyBlocks: EmptyBlocks[] = await BlocksRepository.$getEmptyBlocks(poolId);
 | 
			
		||||
    const emptyBlocksCount = await BlocksRepository.$countEmptyBlocks(poolId);
 | 
			
		||||
 | 
			
		||||
    return {
 | 
			
		||||
      pool: pool,
 | 
			
		||||
      blockCount: blockCount,
 | 
			
		||||
      emptyBlocks: emptyBlocks,
 | 
			
		||||
      emptyBlocks: emptyBlocksCount.length > 0 ? emptyBlocksCount[0]['count'] : 0,
 | 
			
		||||
    };
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -3,11 +3,6 @@ import { DB } from '../database';
 | 
			
		||||
import logger from '../logger';
 | 
			
		||||
import { Common } from '../api/common';
 | 
			
		||||
 | 
			
		||||
export interface EmptyBlocks {
 | 
			
		||||
  emptyBlocks: number;
 | 
			
		||||
  poolId: number;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
class BlocksRepository {
 | 
			
		||||
  /**
 | 
			
		||||
   * Save indexed block data in the database
 | 
			
		||||
@ -100,12 +95,13 @@ class BlocksRepository {
 | 
			
		||||
  /**
 | 
			
		||||
   * Get empty blocks for one or all pools
 | 
			
		||||
   */
 | 
			
		||||
  public async $getEmptyBlocks(poolId: number | null, interval: string | null = null): Promise<EmptyBlocks[]> {
 | 
			
		||||
  public async $countEmptyBlocks(poolId: number | null, interval: string | null = null): Promise<any> {
 | 
			
		||||
    interval = Common.getSqlInterval(interval);
 | 
			
		||||
 | 
			
		||||
    const params: any[] = [];
 | 
			
		||||
    let query = `SELECT height, hash, tx_count, size, pool_id, weight, UNIX_TIMESTAMP(blockTimestamp) as timestamp
 | 
			
		||||
    let query = `SELECT count(height) as count, pools.id as poolId
 | 
			
		||||
      FROM blocks
 | 
			
		||||
      JOIN pools on pools.id = blocks.pool_id
 | 
			
		||||
      WHERE tx_count = 1`;
 | 
			
		||||
 | 
			
		||||
    if (poolId) {
 | 
			
		||||
@ -117,13 +113,14 @@ class BlocksRepository {
 | 
			
		||||
      query += ` AND blockTimestamp BETWEEN DATE_SUB(NOW(), INTERVAL ${interval}) AND NOW()`;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // logger.debug(query);
 | 
			
		||||
    query += ` GROUP by pools.id`;
 | 
			
		||||
 | 
			
		||||
    const connection = await DB.pool.getConnection();
 | 
			
		||||
    try {
 | 
			
		||||
      const [rows] = await connection.query(query, params);
 | 
			
		||||
      connection.release();
 | 
			
		||||
 | 
			
		||||
      return <EmptyBlocks[]>rows;
 | 
			
		||||
      return rows;
 | 
			
		||||
    } catch (e) {
 | 
			
		||||
      connection.release();
 | 
			
		||||
      logger.err('$getEmptyBlocks() error' + (e instanceof Error ? e.message : e));
 | 
			
		||||
 | 
			
		||||
@ -126,15 +126,15 @@ class HashratesRepository {
 | 
			
		||||
    let query = `SELECT MIN(hashrate_timestamp) as firstTimestamp, MAX(hashrate_timestamp) as lastTimestamp
 | 
			
		||||
      FROM hashrates 
 | 
			
		||||
      JOIN pools on pools.id = pool_id 
 | 
			
		||||
      WHERE hashrates.type = 'weekly' AND pool_id = ${poolId} AND avg_hashrate != 0
 | 
			
		||||
      ORDER by hashrate_timestamp LIMIT 1`
 | 
			
		||||
      WHERE hashrates.type = 'weekly' AND pool_id = ? AND avg_hashrate != 0
 | 
			
		||||
      ORDER by hashrate_timestamp LIMIT 1`;
 | 
			
		||||
 | 
			
		||||
    let boundaries = {
 | 
			
		||||
      firstTimestamp: '1970-01-01',
 | 
			
		||||
      lastTimestamp: '9999-01-01'
 | 
			
		||||
    };
 | 
			
		||||
    try {
 | 
			
		||||
      const [rows]: any[] = await connection.query(query);
 | 
			
		||||
      const [rows]: any[] = await connection.query(query, [poolId]);
 | 
			
		||||
      boundaries = rows[0];
 | 
			
		||||
      connection.release();
 | 
			
		||||
    } catch (e) {
 | 
			
		||||
@ -147,11 +147,11 @@ class HashratesRepository {
 | 
			
		||||
      FROM hashrates
 | 
			
		||||
      JOIN pools on pools.id = pool_id
 | 
			
		||||
      WHERE hashrates.type = 'weekly' AND hashrate_timestamp BETWEEN ? AND ?
 | 
			
		||||
      AND pool_id = ${poolId}
 | 
			
		||||
      AND pool_id = ?
 | 
			
		||||
      ORDER by hashrate_timestamp`;
 | 
			
		||||
 | 
			
		||||
    try {
 | 
			
		||||
      const [rows]: any[] = await connection.query(query, [boundaries.firstTimestamp, boundaries.lastTimestamp]);
 | 
			
		||||
      const [rows]: any[] = await connection.query(query, [boundaries.firstTimestamp, boundaries.lastTimestamp, poolId]);
 | 
			
		||||
      connection.release();
 | 
			
		||||
 | 
			
		||||
      return rows;
 | 
			
		||||
@ -182,6 +182,9 @@ class HashratesRepository {
 | 
			
		||||
      const [rows] = await connection.query<any>(query, [key]);
 | 
			
		||||
      connection.release();
 | 
			
		||||
 | 
			
		||||
      if (rows.length === 0) {
 | 
			
		||||
        return 0;
 | 
			
		||||
      }
 | 
			
		||||
      return rows[0]['number'];
 | 
			
		||||
    } catch (e) {
 | 
			
		||||
      connection.release();
 | 
			
		||||
 | 
			
		||||
@ -40,7 +40,7 @@
 | 
			
		||||
              </tr>
 | 
			
		||||
              <tr>
 | 
			
		||||
                <td class="col-4 col-lg-8">Empty Blocks</td>
 | 
			
		||||
                <td class="text-left">{{ poolStats.emptyBlocks.length }}</td>
 | 
			
		||||
                <td class="text-left">{{ poolStats.emptyBlocks }}</td>
 | 
			
		||||
              </tr>
 | 
			
		||||
            </tbody>
 | 
			
		||||
          </table>
 | 
			
		||||
 | 
			
		||||
@ -38,5 +38,13 @@ do for url in / \
 | 
			
		||||
		curl -s "https://${hostname}${url}" >/dev/null
 | 
			
		||||
	done
 | 
			
		||||
 | 
			
		||||
	counter=1
 | 
			
		||||
	while [ $counter -le 134 ]
 | 
			
		||||
	do
 | 
			
		||||
		curl -s "https://${hostname}/api/v1/mining/pool/${counter}/hashrate" >/dev/null
 | 
			
		||||
		curl -s "https://${hostname}/api/v1/mining/pool/${counter}" >/dev/null
 | 
			
		||||
		((counter++))
 | 
			
		||||
	done
 | 
			
		||||
 | 
			
		||||
	sleep 10
 | 
			
		||||
done
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user