Hashrates indexing waits for blocks indexing - Batch hashrates I/O ops
This commit is contained in:
parent
537e50c682
commit
649ad2e859
@ -20,6 +20,7 @@ class Blocks {
|
||||
private previousDifficultyRetarget = 0;
|
||||
private newBlockCallbacks: ((block: BlockExtended, txIds: string[], transactions: TransactionExtended[]) => void)[] = [];
|
||||
private blockIndexingStarted = false;
|
||||
public blockIndexingCompleted = false;
|
||||
|
||||
constructor() { }
|
||||
|
||||
@ -240,6 +241,8 @@ class Blocks {
|
||||
logger.err('An error occured in $generateBlockDatabase(). Skipping block indexing. ' + e);
|
||||
console.log(e);
|
||||
}
|
||||
|
||||
this.blockIndexingCompleted = true;
|
||||
}
|
||||
|
||||
public async $updateBlocks() {
|
||||
|
@ -4,6 +4,7 @@ import PoolsRepository from '../repositories/PoolsRepository';
|
||||
import HashratesRepository from '../repositories/HashratesRepository';
|
||||
import bitcoinClient from './bitcoin/bitcoin-client';
|
||||
import logger from '../logger';
|
||||
import blocks from './blocks';
|
||||
|
||||
class Mining {
|
||||
hashrateIndexingStarted = false;
|
||||
@ -111,7 +112,7 @@ class Mining {
|
||||
return;
|
||||
}
|
||||
|
||||
if (this.hashrateIndexingStarted) {
|
||||
if (!blocks.blockIndexingCompleted || this.hashrateIndexingStarted) {
|
||||
return;
|
||||
}
|
||||
this.hashrateIndexingStarted = true;
|
||||
@ -128,6 +129,8 @@ class Mining {
|
||||
let indexedThisRun = 0;
|
||||
let totalIndexed = 0;
|
||||
|
||||
const hashrates: any[] = [];
|
||||
|
||||
while (toTimestamp > genesisTimestamp) {
|
||||
const fromTimestamp = toTimestamp - 86400;
|
||||
if (indexedTimestamp.includes(fromTimestamp)) {
|
||||
@ -137,9 +140,7 @@ class Mining {
|
||||
}
|
||||
|
||||
const blockStats: any = await BlocksRepository.$blockCountBetweenTimestamp(
|
||||
null, fromTimestamp, toTimestamp
|
||||
);
|
||||
|
||||
null, fromTimestamp, toTimestamp);
|
||||
if (blockStats.blockCount === 0) { // We are done indexing, no blocks left
|
||||
break;
|
||||
}
|
||||
@ -158,23 +159,28 @@ class Mining {
|
||||
indexedThisRun = 0;
|
||||
}
|
||||
|
||||
await HashratesRepository.$saveDailyStat({
|
||||
hashrates.push({
|
||||
hashrateTimestamp: fromTimestamp,
|
||||
avgHashrate: lastBlockHashrate,
|
||||
poolId: null,
|
||||
});
|
||||
|
||||
if (hashrates.length > 100) {
|
||||
await HashratesRepository.$saveHashrates(hashrates);
|
||||
hashrates.length = 0;
|
||||
}
|
||||
|
||||
toTimestamp -= 86400;
|
||||
++indexedThisRun;
|
||||
++totalIndexed;
|
||||
}
|
||||
|
||||
await HashratesRepository.$saveHashrates(hashrates);
|
||||
await HashratesRepository.$setLatestRunTimestamp();
|
||||
this.hashrateIndexingStarted = false;
|
||||
|
||||
logger.info(`Hashrates indexing completed`);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
export default new Mining();
|
||||
|
@ -164,12 +164,12 @@ class Server {
|
||||
}
|
||||
}
|
||||
|
||||
async runIndexingWhenReady() {
|
||||
runIndexingWhenReady() {
|
||||
if (!Common.indexingEnabled() || mempool.hasPriority()) {
|
||||
return;
|
||||
}
|
||||
await blocks.$generateBlockDatabase();
|
||||
await mining.$generateNetworkHashrateHistory();
|
||||
blocks.$generateBlockDatabase();
|
||||
mining.$generateNetworkHashrateHistory();
|
||||
}
|
||||
|
||||
setUpWebsocketHandling() {
|
||||
|
@ -6,21 +6,19 @@ class HashratesRepository {
|
||||
/**
|
||||
* Save indexed block data in the database
|
||||
*/
|
||||
public async $saveDailyStat(dailyStat: any) {
|
||||
public async $saveHashrates(hashrates: any) {
|
||||
let query = `INSERT INTO
|
||||
hashrates(hashrate_timestamp, avg_hashrate, pool_id) VALUES`;
|
||||
|
||||
for (const hashrate of hashrates) {
|
||||
query += ` (FROM_UNIXTIME(${hashrate.hashrateTimestamp}), ${hashrate.avgHashrate}, ${hashrate.poolId}),`;
|
||||
}
|
||||
query = query.slice(0, -1);
|
||||
|
||||
const connection = await DB.pool.getConnection();
|
||||
|
||||
try {
|
||||
const query = `INSERT INTO
|
||||
hashrates(hashrate_timestamp, avg_hashrate, pool_id)
|
||||
VALUE (FROM_UNIXTIME(?), ?, ?)`;
|
||||
|
||||
const params: any[] = [
|
||||
dailyStat.hashrateTimestamp, dailyStat.avgHashrate,
|
||||
dailyStat.poolId
|
||||
];
|
||||
|
||||
// logger.debug(query);
|
||||
await connection.query(query, params);
|
||||
await connection.query(query);
|
||||
} catch (e: any) {
|
||||
logger.err('$saveHashrateInDatabase() error' + (e instanceof Error ? e.message : e));
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user