From f23f7f1cfa42d2e0a54ab7feb0d7edcca7e4cca0 Mon Sep 17 00:00:00 2001 From: nymkappa Date: Tue, 8 Mar 2022 16:55:49 +0100 Subject: [PATCH] Cleanup empty block in api response - Update cache warmer --- backend/src/api/mining.ts | 16 ++++++---------- backend/src/repositories/BlocksRepository.ts | 15 ++++++--------- backend/src/repositories/HashratesRepository.ts | 13 ++++++++----- .../src/app/components/pool/pool.component.html | 2 +- production/nginx-cache-warmer | 8 ++++++++ 5 files changed, 29 insertions(+), 25 deletions(-) diff --git a/backend/src/api/mining.ts b/backend/src/api/mining.ts index 0724a6612..2e094229b 100644 --- a/backend/src/api/mining.ts +++ b/backend/src/api/mining.ts @@ -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, }; } diff --git a/backend/src/repositories/BlocksRepository.ts b/backend/src/repositories/BlocksRepository.ts index 33f7a2d97..2364a8485 100644 --- a/backend/src/repositories/BlocksRepository.ts +++ b/backend/src/repositories/BlocksRepository.ts @@ -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 { + public async $countEmptyBlocks(poolId: number | null, interval: string | null = null): Promise { 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 rows; + return rows; } catch (e) { connection.release(); logger.err('$getEmptyBlocks() error' + (e instanceof Error ? e.message : e)); diff --git a/backend/src/repositories/HashratesRepository.ts b/backend/src/repositories/HashratesRepository.ts index 4371b9e0a..749d3cb57 100644 --- a/backend/src/repositories/HashratesRepository.ts +++ b/backend/src/repositories/HashratesRepository.ts @@ -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(query, [key]); connection.release(); + if (rows.length === 0) { + return 0; + } return rows[0]['number']; } catch (e) { connection.release(); diff --git a/frontend/src/app/components/pool/pool.component.html b/frontend/src/app/components/pool/pool.component.html index 4e6d78d2b..66b3db5e3 100644 --- a/frontend/src/app/components/pool/pool.component.html +++ b/frontend/src/app/components/pool/pool.component.html @@ -40,7 +40,7 @@ Empty Blocks - {{ poolStats.emptyBlocks.length }} + {{ poolStats.emptyBlocks }} diff --git a/production/nginx-cache-warmer b/production/nginx-cache-warmer index 2eab09dd1..38db73215 100755 --- a/production/nginx-cache-warmer +++ b/production/nginx-cache-warmer @@ -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