diff --git a/backend/src/api/blocks.ts b/backend/src/api/blocks.ts index 7e79f6421..6af631382 100644 --- a/backend/src/api/blocks.ts +++ b/backend/src/api/blocks.ts @@ -224,7 +224,7 @@ class Blocks { loadingIndicators.setProgress('block-indexing', 0); const chunkSize = 10000; - let totaIndexed = await blocksRepository.$blockCountBetweenHeight(currentBlockHeight, lastBlockToIndex); + let totalIndexed = await blocksRepository.$blockCountBetweenHeight(currentBlockHeight, lastBlockToIndex); let indexedThisRun = 0; let newlyIndexed = 0; const startedAt = new Date().getTime() / 1000; @@ -247,17 +247,17 @@ class Blocks { break; } ++indexedThisRun; - ++totaIndexed; + ++totalIndexed; const elapsedSeconds = Math.max(1, Math.round((new Date().getTime() / 1000) - timer)); if (elapsedSeconds > 5 || blockHeight === lastBlockToIndex) { const runningFor = Math.max(1, Math.round((new Date().getTime() / 1000) - startedAt)); const blockPerSeconds = Math.max(1, Math.round(indexedThisRun / elapsedSeconds)); - const progress = Math.round(totaIndexed / indexingBlockAmount * 100); - const timeLeft = Math.round((indexingBlockAmount - totaIndexed) / blockPerSeconds); - logger.debug(`Indexing block #${blockHeight} | ~${blockPerSeconds} blocks/sec | total: ${totaIndexed}/${indexingBlockAmount} (${progress}%) | elapsed: ${runningFor} seconds | left: ~${timeLeft} seconds`); + const progress = Math.round(totalIndexed / indexingBlockAmount * 10000) / 100; + const timeLeft = Math.round((indexingBlockAmount - totalIndexed) / blockPerSeconds); + logger.debug(`Indexing block #${blockHeight} | ~${blockPerSeconds.toFixed(2)} blocks/sec | total: ${totalIndexed}/${indexingBlockAmount} (${progress}%) | elapsed: ${runningFor} seconds | left: ~${timeLeft} seconds`); timer = new Date().getTime() / 1000; indexedThisRun = 0; - loadingIndicators.setProgress('block-indexing', progress); + loadingIndicators.setProgress('block-indexing', progress, false); } const blockHash = await bitcoinApi.$getBlockHash(blockHeight); const block = BitcoinApi.convertBlock(await bitcoinClient.getBlock(blockHash)); diff --git a/backend/src/api/loading-indicators.ts b/backend/src/api/loading-indicators.ts index c2d682d1c..38d5aea96 100644 --- a/backend/src/api/loading-indicators.ts +++ b/backend/src/api/loading-indicators.ts @@ -12,8 +12,8 @@ class LoadingIndicators { this.progressChangedCallback = fn; } - public setProgress(name: string, progressPercent: number) { - const newProgress = Math.round(progressPercent); + public setProgress(name: string, progressPercent: number, rounded: boolean = true) { + const newProgress = rounded === true ? Math.round(progressPercent) : progressPercent; if (newProgress >= 100) { delete this.loadingIndicators[name]; } else { diff --git a/backend/src/api/mining.ts b/backend/src/api/mining.ts index 2c7530643..0909d6100 100644 --- a/backend/src/api/mining.ts +++ b/backend/src/api/mining.ts @@ -6,6 +6,7 @@ import bitcoinClient from './bitcoin/bitcoin-client'; import logger from '../logger'; import blocks from './blocks'; import { Common } from './common'; +import loadingIndicators from './loading-indicators'; class Mining { hashrateIndexingStarted = false; @@ -131,7 +132,7 @@ class Mining { * [INDEXING] Generate weekly mining pool hashrate history */ public async $generatePoolHashrateHistory(): Promise { - if (!blocks.blockIndexingCompleted || this.weeklyHashrateIndexingStarted) { + if (!blocks.blockIndexingCompleted || this.hashrateIndexingStarted || this.weeklyHashrateIndexingStarted) { return; } @@ -167,7 +168,10 @@ class Mining { let indexedThisRun = 0; let totalIndexed = 0; let newlyIndexed = 0; - let startedAt = new Date().getTime(); + const startedAt = new Date().getTime() / 1000; + let timer = new Date().getTime() / 1000; + + loadingIndicators.setProgress('weekly-hashrate-indexing', 0); while (toTimestamp > genesisTimestamp) { const fromTimestamp = toTimestamp - 604800000; @@ -214,14 +218,17 @@ class Mining { await HashratesRepository.$saveHashrates(hashrates); hashrates.length = 0; - const elapsedSeconds = Math.max(1, Math.round((new Date().getTime()) - startedAt)) / 1000; + const elapsedSeconds = Math.max(1, Math.round((new Date().getTime() / 1000) - timer)); if (elapsedSeconds > 1) { - const weeksPerSeconds = (indexedThisRun / elapsedSeconds).toFixed(2); + const runningFor = Math.max(1, Math.round((new Date().getTime() / 1000) - startedAt)); + const weeksPerSeconds = Math.max(1, Math.round(indexedThisRun / elapsedSeconds)); + const progress = Math.round(totalIndexed / totalWeekIndexed * 10000) / 100; + const timeLeft = Math.round((totalWeekIndexed - totalIndexed) / weeksPerSeconds); const formattedDate = new Date(fromTimestamp).toUTCString(); - const weeksLeft = Math.round(totalWeekIndexed - totalIndexed); - logger.debug(`Getting weekly pool hashrate for ${formattedDate} | ~${weeksPerSeconds} weeks/sec | ~${weeksLeft} weeks left to index`); - startedAt = new Date().getTime(); + logger.debug(`Getting weekly pool hashrate for ${formattedDate} | ~${weeksPerSeconds.toFixed(2)} weeks/sec | total: ~${totalIndexed}/${Math.round(totalWeekIndexed)} (${progress}%) | elapsed: ${runningFor} seconds | left: ~${timeLeft} seconds`); + timer = new Date().getTime() / 1000; indexedThisRun = 0; + loadingIndicators.setProgress('weekly-hashrate-indexing', progress, false); } toTimestamp -= 604800000; @@ -233,7 +240,9 @@ class Mining { if (newlyIndexed > 0) { logger.info(`Indexed ${newlyIndexed} pools weekly hashrate`); } + loadingIndicators.setProgress('weekly-hashrate-indexing', 100); } catch (e) { + loadingIndicators.setProgress('weekly-hashrate-indexing', 100); this.weeklyHashrateIndexingStarted = false; throw e; } @@ -273,7 +282,10 @@ class Mining { let indexedThisRun = 0; let totalIndexed = 0; let newlyIndexed = 0; - let startedAt = new Date().getTime(); + const startedAt = new Date().getTime() / 1000; + let timer = new Date().getTime() / 1000; + + loadingIndicators.setProgress('daily-hashrate-indexing', 0); while (toTimestamp > genesisTimestamp) { const fromTimestamp = toTimestamp - 86400000; @@ -312,15 +324,17 @@ class Mining { hashrates.length = 0; } - const elapsedSeconds = Math.max(1, Math.round(new Date().getTime() - startedAt)) / 1000; + const elapsedSeconds = Math.max(1, Math.round((new Date().getTime() / 1000) - timer)); if (elapsedSeconds > 1) { - const daysPerSeconds = (indexedThisRun / elapsedSeconds).toFixed(2); + const runningFor = Math.max(1, Math.round((new Date().getTime() / 1000) - startedAt)); + const daysPerSeconds = Math.max(1, Math.round(indexedThisRun / elapsedSeconds)); + const progress = Math.round(totalIndexed / totalDayIndexed * 10000) / 100; + const timeLeft = Math.round((totalDayIndexed - totalIndexed) / daysPerSeconds); const formattedDate = new Date(fromTimestamp).toUTCString(); - const daysLeft = Math.round(totalDayIndexed - totalIndexed); - logger.debug(`Getting network daily hashrate for ${formattedDate} | ~${daysPerSeconds} days/sec | ` + - `~${daysLeft} days left to index`); - startedAt = new Date().getTime(); + logger.debug(`Getting network daily hashrate for ${formattedDate} | ~${daysPerSeconds.toFixed(2)} days/sec | total: ~${totalIndexed}/${Math.round(totalDayIndexed)} (${progress}%) | elapsed: ${runningFor} seconds | left: ~${timeLeft} seconds`); + timer = new Date().getTime() / 1000; indexedThisRun = 0; + loadingIndicators.setProgress('daily-hashrate-indexing', progress); } toTimestamp -= 86400000; @@ -346,7 +360,9 @@ class Mining { if (newlyIndexed > 0) { logger.info(`Indexed ${newlyIndexed} day of network hashrate`); } + loadingIndicators.setProgress('daily-hashrate-indexing', 100); } catch (e) { + loadingIndicators.setProgress('daily-hashrate-indexing', 100); this.hashrateIndexingStarted = false; throw e; } diff --git a/frontend/src/app/app.module.ts b/frontend/src/app/app.module.ts index c72460bb6..09e26e906 100644 --- a/frontend/src/app/app.module.ts +++ b/frontend/src/app/app.module.ts @@ -77,6 +77,7 @@ import { BlockFeesGraphComponent } from './components/block-fees-graph/block-fee import { BlockRewardsGraphComponent } from './components/block-rewards-graph/block-rewards-graph.component'; import { BlockFeeRatesGraphComponent } from './components/block-fee-rates-graph/block-fee-rates-graph.component'; import { LoadingIndicatorComponent } from './components/loading-indicator/loading-indicator.component'; +import { IndexingProgressComponent } from './components/indexing-progress/indexing-progress.component'; @NgModule({ declarations: [ @@ -134,6 +135,7 @@ import { LoadingIndicatorComponent } from './components/loading-indicator/loadin BlockRewardsGraphComponent, BlockFeeRatesGraphComponent, LoadingIndicatorComponent, + IndexingProgressComponent, ], imports: [ BrowserModule.withServerTransition({ appId: 'serverApp' }), diff --git a/frontend/src/app/components/block-fee-rates-graph/block-fee-rates-graph.component.html b/frontend/src/app/components/block-fee-rates-graph/block-fee-rates-graph.component.html index f4ee2bd07..f15356c2f 100644 --- a/frontend/src/app/components/block-fee-rates-graph/block-fee-rates-graph.component.html +++ b/frontend/src/app/components/block-fee-rates-graph/block-fee-rates-graph.component.html @@ -1,4 +1,4 @@ - +
diff --git a/frontend/src/app/components/block-fees-graph/block-fees-graph.component.html b/frontend/src/app/components/block-fees-graph/block-fees-graph.component.html index b31ba5678..c78311d71 100644 --- a/frontend/src/app/components/block-fees-graph/block-fees-graph.component.html +++ b/frontend/src/app/components/block-fees-graph/block-fees-graph.component.html @@ -1,4 +1,4 @@ - +
diff --git a/frontend/src/app/components/block-rewards-graph/block-rewards-graph.component.html b/frontend/src/app/components/block-rewards-graph/block-rewards-graph.component.html index d961e70bf..d730ac7d1 100644 --- a/frontend/src/app/components/block-rewards-graph/block-rewards-graph.component.html +++ b/frontend/src/app/components/block-rewards-graph/block-rewards-graph.component.html @@ -1,4 +1,4 @@ - +
diff --git a/frontend/src/app/components/blocks-list/blocks-list.component.html b/frontend/src/app/components/blocks-list/blocks-list.component.html index c6746b142..b19620594 100644 --- a/frontend/src/app/components/blocks-list/blocks-list.component.html +++ b/frontend/src/app/components/blocks-list/blocks-list.component.html @@ -1,4 +1,4 @@ - +

Blocks

diff --git a/frontend/src/app/components/hashrate-chart/hashrate-chart.component.html b/frontend/src/app/components/hashrate-chart/hashrate-chart.component.html index d9977a0e8..8ec254e95 100644 --- a/frontend/src/app/components/hashrate-chart/hashrate-chart.component.html +++ b/frontend/src/app/components/hashrate-chart/hashrate-chart.component.html @@ -1,4 +1,4 @@ - +
diff --git a/frontend/src/app/components/hashrates-chart-pools/hashrate-chart-pools.component.html b/frontend/src/app/components/hashrates-chart-pools/hashrate-chart-pools.component.html index b8bff0020..80f2baa54 100644 --- a/frontend/src/app/components/hashrates-chart-pools/hashrate-chart-pools.component.html +++ b/frontend/src/app/components/hashrates-chart-pools/hashrate-chart-pools.component.html @@ -1,4 +1,4 @@ - +
diff --git a/frontend/src/app/components/indexing-progress/indexing-progress.component.html b/frontend/src/app/components/indexing-progress/indexing-progress.component.html new file mode 100644 index 000000000..6d745d7b7 --- /dev/null +++ b/frontend/src/app/components/indexing-progress/indexing-progress.component.html @@ -0,0 +1,3 @@ + + + diff --git a/frontend/src/app/components/indexing-progress/indexing-progress.component.ts b/frontend/src/app/components/indexing-progress/indexing-progress.component.ts new file mode 100644 index 000000000..121e77c7d --- /dev/null +++ b/frontend/src/app/components/indexing-progress/indexing-progress.component.ts @@ -0,0 +1,14 @@ +import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core'; + +@Component({ + selector: 'app-indexing-progress', + templateUrl: './indexing-progress.component.html', + changeDetection: ChangeDetectionStrategy.OnPush +}) +export class IndexingProgressComponent implements OnInit { + constructor( + ) {} + + ngOnInit() { + } +} diff --git a/frontend/src/app/components/loading-indicator/loading-indicator.component.html b/frontend/src/app/components/loading-indicator/loading-indicator.component.html index a3929c621..49dbc2983 100644 --- a/frontend/src/app/components/loading-indicator/loading-indicator.component.html +++ b/frontend/src/app/components/loading-indicator/loading-indicator.component.html @@ -1,3 +1,3 @@
- Indexing blocks ({{ progress }}%) + {{ this.label }} ({{ progress }}%)
\ No newline at end of file diff --git a/frontend/src/app/components/loading-indicator/loading-indicator.component.scss b/frontend/src/app/components/loading-indicator/loading-indicator.component.scss index cb49e08ab..b919fa2b8 100644 --- a/frontend/src/app/components/loading-indicator/loading-indicator.component.scss +++ b/frontend/src/app/components/loading-indicator/loading-indicator.component.scss @@ -1,14 +1,18 @@ .sticky-loading { - position: fixed; + position: absolute; right: 10px; z-index: 100; - @media (width > 991px) { - bottom: 15px; + font-size: 14px; + @media (width >= 992px) { + left: 32px; + top: 55px; } - @media (576px <= width <= 991px) { - bottom: 60px; + @media (576px <= width < 992px ) { + left: 18px; + top: 55px; } @media (width <= 575px) { - top: 17px; + left: 18px; + top: 100px; } } \ No newline at end of file diff --git a/frontend/src/app/components/loading-indicator/loading-indicator.component.ts b/frontend/src/app/components/loading-indicator/loading-indicator.component.ts index 2dfbc81c6..3f59c2701 100644 --- a/frontend/src/app/components/loading-indicator/loading-indicator.component.ts +++ b/frontend/src/app/components/loading-indicator/loading-indicator.component.ts @@ -12,6 +12,7 @@ import { WebsocketService } from 'src/app/services/websocket.service'; }) export class LoadingIndicatorComponent implements OnInit { @Input() name: string; + @Input() label: string; public indexingProgress$: Observable; diff --git a/frontend/src/app/components/mining-dashboard/mining-dashboard.component.html b/frontend/src/app/components/mining-dashboard/mining-dashboard.component.html index db395bf39..bf8ba2cf7 100644 --- a/frontend/src/app/components/mining-dashboard/mining-dashboard.component.html +++ b/frontend/src/app/components/mining-dashboard/mining-dashboard.component.html @@ -1,4 +1,4 @@ - +
diff --git a/frontend/src/app/components/pool-ranking/pool-ranking.component.html b/frontend/src/app/components/pool-ranking/pool-ranking.component.html index 56c73a8c0..17120d64d 100644 --- a/frontend/src/app/components/pool-ranking/pool-ranking.component.html +++ b/frontend/src/app/components/pool-ranking/pool-ranking.component.html @@ -1,4 +1,4 @@ - +
diff --git a/frontend/src/app/components/pool/pool.component.html b/frontend/src/app/components/pool/pool.component.html index c9d12ee22..be7437363 100644 --- a/frontend/src/app/components/pool/pool.component.html +++ b/frontend/src/app/components/pool/pool.component.html @@ -1,4 +1,4 @@ - +