From 3f16b5315934c6f951800d2063dd309cea6ee8aa Mon Sep 17 00:00:00 2001 From: softsimon Date: Sun, 28 Aug 2022 13:43:57 +0200 Subject: [PATCH 01/24] Custom lazy loading strategy --- frontend/src/app/app-routing.module.ts | 11 +++++++---- frontend/src/app/app.module.ts | 2 ++ frontend/src/app/app.preloading-strategy.ts | 10 ++++++++++ 3 files changed, 19 insertions(+), 4 deletions(-) create mode 100644 frontend/src/app/app.preloading-strategy.ts diff --git a/frontend/src/app/app-routing.module.ts b/frontend/src/app/app-routing.module.ts index f4c6dbbc8..9a5ae23f9 100644 --- a/frontend/src/app/app-routing.module.ts +++ b/frontend/src/app/app-routing.module.ts @@ -1,5 +1,6 @@ import { NgModule } from '@angular/core'; -import { Routes, RouterModule, PreloadAllModules } from '@angular/router'; +import { Routes, RouterModule } from '@angular/router'; +import { AppPreloadingStrategy } from './app.preloading-strategy' import { StartComponent } from './components/start/start.component'; import { TransactionComponent } from './components/transaction/transaction.component'; import { TransactionPreviewComponent } from './components/transaction/transaction-preview.component'; @@ -32,7 +33,8 @@ let routes: Routes = [ { path: '', pathMatch: 'full', - loadChildren: () => import('./graphs/graphs.module').then(m => m.GraphsModule) + loadChildren: () => import('./graphs/graphs.module').then(m => m.GraphsModule), + data: { preload: true }, }, { path: '', @@ -117,7 +119,8 @@ let routes: Routes = [ }, { path: 'lightning', - loadChildren: () => import('./lightning/lightning.module').then(m => m.LightningModule) + loadChildren: () => import('./lightning/lightning.module').then(m => m.LightningModule), + data: { preload: true }, }, ], }, @@ -691,7 +694,7 @@ if (browserWindowEnv && browserWindowEnv.BASE_MODULE === 'liquid') { initialNavigation: 'enabled', scrollPositionRestoration: 'enabled', anchorScrolling: 'enabled', - preloadingStrategy: PreloadAllModules + preloadingStrategy: AppPreloadingStrategy })], }) export class AppRoutingModule { } diff --git a/frontend/src/app/app.module.ts b/frontend/src/app/app.module.ts index b6b8859f6..5ae0c6cb5 100644 --- a/frontend/src/app/app.module.ts +++ b/frontend/src/app/app.module.ts @@ -18,6 +18,7 @@ import { LanguageService } from './services/language.service'; import { FiatShortenerPipe } from './shared/pipes/fiat-shortener.pipe'; import { ShortenStringPipe } from './shared/pipes/shorten-string-pipe/shorten-string.pipe'; import { CapAddressPipe } from './shared/pipes/cap-address-pipe/cap-address-pipe'; +import { AppPreloadingStrategy } from './app.preloading-strategy'; @NgModule({ declarations: [ @@ -44,6 +45,7 @@ import { CapAddressPipe } from './shared/pipes/cap-address-pipe/cap-address-pipe ShortenStringPipe, FiatShortenerPipe, CapAddressPipe, + AppPreloadingStrategy, { provide: HTTP_INTERCEPTORS, useClass: HttpCacheInterceptor, multi: true } ], bootstrap: [AppComponent] diff --git a/frontend/src/app/app.preloading-strategy.ts b/frontend/src/app/app.preloading-strategy.ts new file mode 100644 index 000000000..f0cfeea11 --- /dev/null +++ b/frontend/src/app/app.preloading-strategy.ts @@ -0,0 +1,10 @@ +import { PreloadingStrategy, Route } from '@angular/router'; +import { Observable, timer, mergeMap, of } from 'rxjs'; + +export class AppPreloadingStrategy implements PreloadingStrategy { + preload(route: Route, load: Function): Observable { + return route.data && route.data.preload + ? timer(150).pipe(mergeMap(() => load())) + : of(null); + } +} From 530cae3cdba66cca4172f60136f04b8f8da4d069 Mon Sep 17 00:00:00 2001 From: softsimon Date: Sun, 28 Aug 2022 16:36:42 +0200 Subject: [PATCH 02/24] Only pre-load Lightning if it's enabled by config --- frontend/src/app/app-routing.module.ts | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/frontend/src/app/app-routing.module.ts b/frontend/src/app/app-routing.module.ts index 9a5ae23f9..57fc1483d 100644 --- a/frontend/src/app/app-routing.module.ts +++ b/frontend/src/app/app-routing.module.ts @@ -26,6 +26,10 @@ import { AssetsComponent } from './components/assets/assets.component'; import { AssetComponent } from './components/asset/asset.component'; import { AssetsNavComponent } from './components/assets/assets-nav/assets-nav.component'; +const browserWindow = window || {}; +// @ts-ignore +const browserWindowEnv = browserWindow.__env || {}; + let routes: Routes = [ { path: 'testnet', @@ -120,7 +124,7 @@ let routes: Routes = [ { path: 'lightning', loadChildren: () => import('./lightning/lightning.module').then(m => m.LightningModule), - data: { preload: true }, + data: { preload: browserWindowEnv && browserWindowEnv.LIGHTNING === true }, }, ], }, @@ -413,10 +417,6 @@ let routes: Routes = [ }, ]; -const browserWindow = window || {}; -// @ts-ignore -const browserWindowEnv = browserWindow.__env || {}; - if (browserWindowEnv && browserWindowEnv.BASE_MODULE === 'bisq') { routes = [{ path: '', From 59c11379b2a621bbe6fc445fb2f40ee56a095a65 Mon Sep 17 00:00:00 2001 From: softsimon Date: Sun, 28 Aug 2022 20:06:15 +0200 Subject: [PATCH 03/24] Pre-load Docs --- frontend/src/app/app-routing.module.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/frontend/src/app/app-routing.module.ts b/frontend/src/app/app-routing.module.ts index 57fc1483d..2d12bc2e7 100644 --- a/frontend/src/app/app-routing.module.ts +++ b/frontend/src/app/app-routing.module.ts @@ -115,7 +115,8 @@ let routes: Routes = [ }, { path: 'docs', - loadChildren: () => import('./docs/docs.module').then(m => m.DocsModule) + loadChildren: () => import('./docs/docs.module').then(m => m.DocsModule), + data: { preload: true }, }, { path: 'api', From 448d073bf26516ff058b7f74137a6b027e236050 Mon Sep 17 00:00:00 2001 From: softsimon Date: Sun, 28 Aug 2022 20:28:30 +0200 Subject: [PATCH 04/24] Trying 800ms pre-load delay --- frontend/src/app/app.preloading-strategy.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/src/app/app.preloading-strategy.ts b/frontend/src/app/app.preloading-strategy.ts index f0cfeea11..4213c2c87 100644 --- a/frontend/src/app/app.preloading-strategy.ts +++ b/frontend/src/app/app.preloading-strategy.ts @@ -4,7 +4,7 @@ import { Observable, timer, mergeMap, of } from 'rxjs'; export class AppPreloadingStrategy implements PreloadingStrategy { preload(route: Route, load: Function): Observable { return route.data && route.data.preload - ? timer(150).pipe(mergeMap(() => load())) + ? timer(800).pipe(mergeMap(() => load())) : of(null); } } From b7662347c94aa91cbc1deef9126ac1df8c9b1dfd Mon Sep 17 00:00:00 2001 From: softsimon Date: Sun, 28 Aug 2022 20:52:48 +0200 Subject: [PATCH 05/24] Trying 1500ms pre-load delay --- frontend/src/app/app.preloading-strategy.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/src/app/app.preloading-strategy.ts b/frontend/src/app/app.preloading-strategy.ts index 4213c2c87..f62d072da 100644 --- a/frontend/src/app/app.preloading-strategy.ts +++ b/frontend/src/app/app.preloading-strategy.ts @@ -4,7 +4,7 @@ import { Observable, timer, mergeMap, of } from 'rxjs'; export class AppPreloadingStrategy implements PreloadingStrategy { preload(route: Route, load: Function): Observable { return route.data && route.data.preload - ? timer(800).pipe(mergeMap(() => load())) + ? timer(1500).pipe(mergeMap(() => load())) : of(null); } } From f25ec08f5e4d39eba77c737c98fc95d403aec014 Mon Sep 17 00:00:00 2001 From: nymkappa Date: Mon, 29 Aug 2022 08:43:26 +0200 Subject: [PATCH 06/24] Format historical node sockets with update topology outputs --- backend/src/api/common.ts | 81 ++++++++++++++----- .../lightning/sync-tasks/stats-importer.ts | 7 +- 2 files changed, 65 insertions(+), 23 deletions(-) diff --git a/backend/src/api/common.ts b/backend/src/api/common.ts index 8635ee96f..b9cc1453c 100644 --- a/backend/src/api/common.ts +++ b/backend/src/api/common.ts @@ -228,34 +228,75 @@ export class Common { return d.toISOString().split('T')[0] + ' ' + d.toTimeString().split(' ')[0]; } - static formatSocket(publicKey: string, socket: {network: string, addr: string}): NodeSocket { + static findSocketNetwork(addr: string): {network: string | null, url: string} { let network: string | null = null; + let url = addr.split('://')[1]; - if (config.LIGHTNING.BACKEND === 'cln') { - network = socket.network; - } else if (config.LIGHTNING.BACKEND === 'lnd') { - if (socket.addr.indexOf('onion') !== -1) { - if (socket.addr.split('.')[0].length >= 56) { - network = 'torv3'; - } else { - network = 'torv2'; - } - } else if (socket.addr.indexOf('i2p') !== -1) { - network = 'i2p'; + if (!url) { + return { + network: null, + url: addr, + }; + } + + if (addr.indexOf('onion') !== -1) { + if (url.split('.')[0].length >= 56) { + network = 'torv3'; } else { - const ipv = isIP(socket.addr.split(':')[0]); - if (ipv === 4) { - network = 'ipv4'; - } else if (ipv === 6) { - network = 'ipv6'; - } + network = 'torv2'; } + } else if (addr.indexOf('i2p') !== -1) { + network = 'i2p'; + } else if (addr.indexOf('ipv4') !== -1) { + const ipv = isIP(url.split(':')[0]); + if (ipv === 4) { + network = 'ipv4'; + } else { + return { + network: null, + url: addr, + }; + } + } else if (addr.indexOf('ipv6') !== -1) { + url = url.split('[')[1].split(']')[0]; + const ipv = isIP(url); + if (ipv === 6) { + const parts = addr.split(':'); + network = 'ipv6'; + url = `[${url}]:${parts[parts.length - 1]}`; + } else { + return { + network: null, + url: addr, + }; + } + } else { + return { + network: null, + url: addr, + }; } return { - publicKey: publicKey, network: network, - addr: socket.addr, + url: url, }; } + + static formatSocket(publicKey: string, socket: {network: string, addr: string}): NodeSocket { + if (config.LIGHTNING.BACKEND === 'cln') { + return { + publicKey: publicKey, + network: socket.network, + addr: socket.addr, + }; + } else /* if (config.LIGHTNING.BACKEND === 'lnd') */ { + const formatted = this.findSocketNetwork(socket.addr); + return { + publicKey: publicKey, + network: formatted.network, + addr: formatted.url, + }; + } + } } diff --git a/backend/src/tasks/lightning/sync-tasks/stats-importer.ts b/backend/src/tasks/lightning/sync-tasks/stats-importer.ts index 7ac1c5885..692c3660c 100644 --- a/backend/src/tasks/lightning/sync-tasks/stats-importer.ts +++ b/backend/src/tasks/lightning/sync-tasks/stats-importer.ts @@ -363,7 +363,7 @@ class LightningStatsImporter { graph = JSON.parse(fileContent); graph = await this.cleanupTopology(graph); } catch (e) { - logger.debug(`Invalid topology file ${this.topologiesFolder}/${filename}, cannot parse the content`); + logger.debug(`Invalid topology file ${this.topologiesFolder}/${filename}, cannot parse the content. Reason: ${e instanceof Error ? e.message : e}`); continue; } @@ -407,9 +407,10 @@ class LightningStatsImporter { const addressesParts = (node.addresses ?? '').split(','); const addresses: any[] = []; for (const address of addressesParts) { + const formatted = Common.findSocketNetwork(address); addresses.push({ - network: '', - addr: address + network: formatted.network, + addr: formatted.url }); } From 0847e15d07f11f9bad83e9410dc8e43612e3c197 Mon Sep 17 00:00:00 2001 From: nymkappa Date: Mon, 29 Aug 2022 09:01:07 +0200 Subject: [PATCH 07/24] Update node sockets during historical import so we don't have to truncate --- backend/src/api/explorer/nodes.api.ts | 12 ++++++++++++ .../src/tasks/lightning/sync-tasks/stats-importer.ts | 2 ++ 2 files changed, 14 insertions(+) diff --git a/backend/src/api/explorer/nodes.api.ts b/backend/src/api/explorer/nodes.api.ts index 56cfebe9f..fcd5b8815 100644 --- a/backend/src/api/explorer/nodes.api.ts +++ b/backend/src/api/explorer/nodes.api.ts @@ -503,6 +503,18 @@ class NodesApi { } } + /** + * Update node sockets + */ + public async $updateNodeSockets(publicKey: string, sockets: {network: string; addr: string}[]): Promise { + const formattedSockets = (sockets.map(a => a.addr).join(',')) ?? ''; + try { + await DB.query(`UPDATE nodes SET sockets = ? WHERE public_key = ?`, [formattedSockets, publicKey]); + } catch (e) { + logger.err(`Cannot update node sockets for ${publicKey}. Reason: ${e instanceof Error ? e.message : e}`); + } + } + /** * Set all nodes not in `nodesPubkeys` as inactive (status = 0) */ diff --git a/backend/src/tasks/lightning/sync-tasks/stats-importer.ts b/backend/src/tasks/lightning/sync-tasks/stats-importer.ts index 692c3660c..5e2143747 100644 --- a/backend/src/tasks/lightning/sync-tasks/stats-importer.ts +++ b/backend/src/tasks/lightning/sync-tasks/stats-importer.ts @@ -51,6 +51,8 @@ class LightningStatsImporter { features: node.features, }); nodesInDb[node.pub_key] = node; + } else { + await nodesApi.$updateNodeSockets(node.pub_key, node.addresses); } let hasOnion = false; From 80d6ec580d875e44311a678e0b86b7b9ac488a6e Mon Sep 17 00:00:00 2001 From: nymkappa Date: Mon, 29 Aug 2022 09:46:23 +0200 Subject: [PATCH 08/24] Add new lightning endpoints to warm cache --- production/nginx-cache-warmer | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/production/nginx-cache-warmer b/production/nginx-cache-warmer index 3c0fd8ef1..0928990c8 100755 --- a/production/nginx-cache-warmer +++ b/production/nginx-cache-warmer @@ -85,6 +85,38 @@ do for url in / \ '/api/v1/mining/difficulty-adjustments/all' \ '/api/v1/lightning/channels-geo?style=widget' \ '/api/v1/lightning/channels-geo?style=graph' \ + '/api/v1/lightning/statistics/latest' \ + '/api/v1/lightning/statistics/1m' \ + '/api/v1/lightning/statistics/3m' \ + '/api/v1/lightning/statistics/6m' \ + '/api/v1/lightning/statistics/1y' \ + '/api/v1/lightning/statistics/2y' \ + '/api/v1/lightning/statistics/3y' \ + '/api/v1/lightning/statistics/all' \ + '/api/v1/lightning/nodes/isp-ranking' \ + '/api/v1/lightning/nodes/isp/396982,15169' `# Google` \ + '/api/v1/lightning/nodes/isp/14618,16509' `# Amazon` \ + '/api/v1/lightning/nodes/isp/39572' `# DataWeb` \ + '/api/v1/lightning/nodes/isp/14061' `# Digital Ocean` \ + '/api/v1/lightning/nodes/isp/24940,213230' `# Hetzner` \ + '/api/v1/lightning/nodes/isp/174' `# LunaNode` \ + '/api/v1/lightning/nodes/isp/45102' `# Alibaba` \ + '/api/v1/lightning/nodes/isp/3209' `# Vodafone Germany` \ + '/api/v1/lightning/nodes/isp/7922' `# Comcast Cable` \ + '/api/v1/lightning/nodes/isp/34197' `# SHRD SARL` \ + '/api/v1/lightning/nodes/isp/42275' `# Three Fourteen SASU` \ + '/api/v1/lightning/nodes/isp/16276' `# OVH SAS` \ + '/api/v1/lightning/nodes/isp/11426,11427,20001,20115,11351,10796,33363,12271' `# Spectrum` \ + '/api/v1/lightning/nodes/isp/701' `# Verizon` \ + '/api/v1/lightning/nodes/isp/12876' `# Scaleway` \ + '/api/v1/lightning/nodes/isp/33915' `# Ziggo` \ + '/api/v1/lightning/nodes/isp/3320' `# Deutsche Telekom AG` \ + '/api/v1/lightning/nodes/isp/8075' `# Microsoft Azure` \ + '/api/v1/lightning/nodes/countries' \ + '/api/v1/lightning/nodes/rankings' \ + '/api/v1/lightning/nodes/rankings/liquidity' \ + '/api/v1/lightning/nodes/rankings/connectivity' \ + '/api/v1/lightning/nodes/rankings/age' \ do warm "https://${hostname}${url}" From 73bf52dc58a2558d2b7db5b68301e825e4577595 Mon Sep 17 00:00:00 2001 From: wiz Date: Mon, 29 Aug 2022 10:58:07 +0200 Subject: [PATCH 09/24] Use mainnet repo for nginx cache warmer script --- production/mempool-start-all | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/production/mempool-start-all b/production/mempool-start-all index a6fdfa589..9751481ad 100755 --- a/production/mempool-start-all +++ b/production/mempool-start-all @@ -24,7 +24,7 @@ fi # start nginx warm cacher for site in mainnet;do echo "starting mempool cache warmer: ${site}" - screen -dmS "warmer-${site}" $HOME/mempool/production/nginx-cache-warmer + screen -dmS "warmer-${site}" $HOME/mainnet/production/nginx-cache-warmer done exit 0 From 680c85eee798172f4b9be95c439cfdb542d4c1b2 Mon Sep 17 00:00:00 2001 From: nymkappa Date: Mon, 29 Aug 2022 11:29:59 +0200 Subject: [PATCH 10/24] Use monospace font for addresses on mobile --- frontend/src/styles.scss | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/frontend/src/styles.scss b/frontend/src/styles.scss index 2ef537456..5882af254 100644 --- a/frontend/src/styles.scss +++ b/frontend/src/styles.scss @@ -705,6 +705,10 @@ th { .locktime { color: #ff8c00 } .reserved { color: #ff8c00 } +.shortable-address { + font-family: monospace; +} + .rtl-layout { .navbar-brand { @@ -881,6 +885,7 @@ th { .shortable-address { direction: ltr; + font-family: monospace; } .lastest-blocks-table { From 0ad8dc85290422184fe092f4d69e36f24cee9035 Mon Sep 17 00:00:00 2001 From: nymkappa Date: Mon, 29 Aug 2022 11:34:01 +0200 Subject: [PATCH 11/24] Disable smooth flag for LN lines charts --- .../nodes-networks-chart/nodes-networks-chart.component.ts | 6 +++--- .../lightning-statistics-chart.component.ts | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/frontend/src/app/lightning/nodes-networks-chart/nodes-networks-chart.component.ts b/frontend/src/app/lightning/nodes-networks-chart/nodes-networks-chart.component.ts index 22f46e8e7..0ef9e3cd5 100644 --- a/frontend/src/app/lightning/nodes-networks-chart/nodes-networks-chart.component.ts +++ b/frontend/src/app/lightning/nodes-networks-chart/nodes-networks-chart.component.ts @@ -300,7 +300,7 @@ export class NodesNetworksChartComponent implements OnInit { { offset: 1, color: '#D81B60AA' }, ]), - smooth: true, + smooth: false, }, { zlevel: 1, @@ -321,7 +321,7 @@ export class NodesNetworksChartComponent implements OnInit { { offset: 0, color: '#FFB300' }, { offset: 1, color: '#FFB300AA' }, ]), - smooth: true, + smooth: false, }, { zlevel: 1, @@ -342,7 +342,7 @@ export class NodesNetworksChartComponent implements OnInit { { offset: 0, color: '#7D4698' }, { offset: 1, color: '#7D4698AA' }, ]), - smooth: true, + smooth: false, }, ], dataZoom: this.widget ? null : [{ diff --git a/frontend/src/app/lightning/statistics-chart/lightning-statistics-chart.component.ts b/frontend/src/app/lightning/statistics-chart/lightning-statistics-chart.component.ts index 6fb8fd1e2..3a25367dc 100644 --- a/frontend/src/app/lightning/statistics-chart/lightning-statistics-chart.component.ts +++ b/frontend/src/app/lightning/statistics-chart/lightning-statistics-chart.component.ts @@ -274,7 +274,7 @@ export class LightningStatisticsChartComponent implements OnInit { width: 1, }, }, - smooth: true, + smooth: false, }, { zlevel: 0, @@ -288,7 +288,7 @@ export class LightningStatisticsChartComponent implements OnInit { opacity: 0.5, }, type: 'line', - smooth: true, + smooth: false, } ], dataZoom: this.widget ? null : [{ From 9c606a6240c7e889b655aef86661d7fe45c32a75 Mon Sep 17 00:00:00 2001 From: wiz Date: Mon, 29 Aug 2022 12:45:02 +0200 Subject: [PATCH 12/24] [ops] Set kill script to always return true --- production/mempool-kill-all | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/production/mempool-kill-all b/production/mempool-kill-all index b75969155..6abb1a935 100755 --- a/production/mempool-kill-all +++ b/production/mempool-kill-all @@ -1,8 +1,21 @@ #!/usr/bin/env zsh + +# kill "while true" loops killall sh + +# kill actual node backends killall node + +# kill unfurler chrome instances killall chrome + +# kill xorg killall xinit + +# kill nginx cache warmer scripts for pid in `ps uaxww|grep warmer|grep zsh|awk '{print $2}'`;do kill $pid done + +# always exit successfully despite above errors +exit 0 From 70fd94dc1fde307b0201fa748b4f9b2b76099b1b Mon Sep 17 00:00:00 2001 From: nymkappa Date: Mon, 29 Aug 2022 19:14:06 +0200 Subject: [PATCH 13/24] Align charts timestamp selector with charts menus --- .../block-fee-rates-graph.component.scss | 2 +- .../block-fees-graph/block-fees-graph.component.scss | 2 +- .../block-prediction-graph.component.scss | 2 +- .../block-rewards-graph.component.scss | 2 +- .../block-sizes-weights-graph.component.scss | 2 +- .../hashrate-chart/hashrate-chart.component.scss | 2 +- .../hashrate-chart-pools.component.scss | 2 +- .../components/pool-ranking/pool-ranking.component.scss | 2 +- .../app/components/statistics/statistics.component.html | 2 +- .../app/components/statistics/statistics.component.scss | 8 +++++++- .../nodes-networks-chart.component.scss | 2 +- .../nodes-per-isp-chart.component.scss | 2 +- .../lightning-statistics-chart.component.scss | 2 +- 13 files changed, 19 insertions(+), 13 deletions(-) diff --git a/frontend/src/app/components/block-fee-rates-graph/block-fee-rates-graph.component.scss b/frontend/src/app/components/block-fee-rates-graph/block-fee-rates-graph.component.scss index 5aaf8a91b..c5a217983 100644 --- a/frontend/src/app/components/block-fee-rates-graph/block-fee-rates-graph.component.scss +++ b/frontend/src/app/components/block-fee-rates-graph/block-fee-rates-graph.component.scss @@ -61,7 +61,7 @@ flex-direction: column; @media (min-width: 991px) { position: relative; - top: -65px; + top: -100px; } @media (min-width: 830px) and (max-width: 991px) { position: relative; diff --git a/frontend/src/app/components/block-fees-graph/block-fees-graph.component.scss b/frontend/src/app/components/block-fees-graph/block-fees-graph.component.scss index 5aaf8a91b..c5a217983 100644 --- a/frontend/src/app/components/block-fees-graph/block-fees-graph.component.scss +++ b/frontend/src/app/components/block-fees-graph/block-fees-graph.component.scss @@ -61,7 +61,7 @@ flex-direction: column; @media (min-width: 991px) { position: relative; - top: -65px; + top: -100px; } @media (min-width: 830px) and (max-width: 991px) { position: relative; diff --git a/frontend/src/app/components/block-prediction-graph/block-prediction-graph.component.scss b/frontend/src/app/components/block-prediction-graph/block-prediction-graph.component.scss index 5aaf8a91b..c5a217983 100644 --- a/frontend/src/app/components/block-prediction-graph/block-prediction-graph.component.scss +++ b/frontend/src/app/components/block-prediction-graph/block-prediction-graph.component.scss @@ -61,7 +61,7 @@ flex-direction: column; @media (min-width: 991px) { position: relative; - top: -65px; + top: -100px; } @media (min-width: 830px) and (max-width: 991px) { position: relative; diff --git a/frontend/src/app/components/block-rewards-graph/block-rewards-graph.component.scss b/frontend/src/app/components/block-rewards-graph/block-rewards-graph.component.scss index 5aaf8a91b..c5a217983 100644 --- a/frontend/src/app/components/block-rewards-graph/block-rewards-graph.component.scss +++ b/frontend/src/app/components/block-rewards-graph/block-rewards-graph.component.scss @@ -61,7 +61,7 @@ flex-direction: column; @media (min-width: 991px) { position: relative; - top: -65px; + top: -100px; } @media (min-width: 830px) and (max-width: 991px) { position: relative; diff --git a/frontend/src/app/components/block-sizes-weights-graph/block-sizes-weights-graph.component.scss b/frontend/src/app/components/block-sizes-weights-graph/block-sizes-weights-graph.component.scss index a47f63923..7b1395d78 100644 --- a/frontend/src/app/components/block-sizes-weights-graph/block-sizes-weights-graph.component.scss +++ b/frontend/src/app/components/block-sizes-weights-graph/block-sizes-weights-graph.component.scss @@ -61,7 +61,7 @@ flex-direction: column; @media (min-width: 1130px) { position: relative; - top: -65px; + top: -100px; } @media (min-width: 830px) and (max-width: 1130px) { position: relative; diff --git a/frontend/src/app/components/hashrate-chart/hashrate-chart.component.scss b/frontend/src/app/components/hashrate-chart/hashrate-chart.component.scss index 52b5b2c2f..3021cf689 100644 --- a/frontend/src/app/components/hashrate-chart/hashrate-chart.component.scss +++ b/frontend/src/app/components/hashrate-chart/hashrate-chart.component.scss @@ -61,7 +61,7 @@ flex-direction: column; @media (min-width: 991px) { position: relative; - top: -65px; + top: -100px; } @media (min-width: 830px) and (max-width: 991px) { position: relative; diff --git a/frontend/src/app/components/hashrates-chart-pools/hashrate-chart-pools.component.scss b/frontend/src/app/components/hashrates-chart-pools/hashrate-chart-pools.component.scss index b15df44fa..c382d9886 100644 --- a/frontend/src/app/components/hashrates-chart-pools/hashrate-chart-pools.component.scss +++ b/frontend/src/app/components/hashrates-chart-pools/hashrate-chart-pools.component.scss @@ -55,7 +55,7 @@ flex-direction: column; @media (min-width: 991px) { position: relative; - top: -65px; + top: -100px; } @media (min-width: 830px) and (max-width: 991px) { position: relative; diff --git a/frontend/src/app/components/pool-ranking/pool-ranking.component.scss b/frontend/src/app/components/pool-ranking/pool-ranking.component.scss index 855b4e65c..8cb82d92d 100644 --- a/frontend/src/app/components/pool-ranking/pool-ranking.component.scss +++ b/frontend/src/app/components/pool-ranking/pool-ranking.component.scss @@ -39,7 +39,7 @@ flex-direction: column; @media (min-width: 991px) { position: relative; - top: -65px; + top: -100px; } @media (min-width: 830px) and (max-width: 991px) { position: relative; diff --git a/frontend/src/app/components/statistics/statistics.component.html b/frontend/src/app/components/statistics/statistics.component.html index 83ec77acf..9f62fffce 100644 --- a/frontend/src/app/components/statistics/statistics.component.html +++ b/frontend/src/app/components/statistics/statistics.component.html @@ -11,7 +11,7 @@
+ [class]="(stateService.env.MINING_DASHBOARD || stateService.env.LIGHTNING) ? 'mining' : 'no-menu'" (click)="saveGraphPreference()">