From 7a4ad0ee2fdcbab8a991298b396b4196bbdb2d1a Mon Sep 17 00:00:00 2001 From: softsimon Date: Mon, 12 Apr 2021 22:17:13 +0400 Subject: [PATCH 01/22] Including gitCommit and version in frontend build. Backend now sending a backendInfo object containing commit, version and hostname. All printed on About page. --- backend/package.json | 2 +- backend/src/api/backend-info.ts | 23 +++++++++++++++---- backend/src/api/websocket-handler.ts | 3 +-- backend/src/mempool.interfaces.ts | 6 +++++ frontend/generate-config.js | 17 ++++++++++++++ frontend/package.json | 2 +- frontend/proxy.conf.json | 4 ---- .../app/components/about/about.component.html | 8 +++++-- .../app/components/about/about.component.ts | 8 +++++-- .../src/app/interfaces/websocket.interface.ts | 6 +++++ frontend/src/app/services/state.service.ts | 8 +++++-- .../src/app/services/websocket.service.ts | 12 +++++----- 12 files changed, 74 insertions(+), 25 deletions(-) diff --git a/backend/package.json b/backend/package.json index b1dae4dca..883deaab8 100644 --- a/backend/package.json +++ b/backend/package.json @@ -1,6 +1,6 @@ { "name": "mempool-backend", - "version": "2.0.0", + "version": "2.2-dev", "description": "Bitcoin mempool visualizer and blockchain explorer backend", "license": "GNU Affero General Public License v3.0", "homepage": "https://mempool.space", diff --git a/backend/src/api/backend-info.ts b/backend/src/api/backend-info.ts index eb3f1f664..7c6456522 100644 --- a/backend/src/api/backend-info.ts +++ b/backend/src/api/backend-info.ts @@ -1,20 +1,24 @@ import * as fs from 'fs'; import * as os from 'os'; import logger from '../logger'; +import { IBackendInfo } from '../mempool.interfaces'; class BackendInfo { - gitCommitHash = ''; - hostname = ''; + private gitCommitHash = ''; + private hostname = ''; + private version = ''; constructor() { this.setLatestCommitHash(); + this.setVersion(); this.hostname = os.hostname(); } - public getBackendInfo() { + public getBackendInfo(): IBackendInfo { return { - 'hostname': this.hostname, - 'git-commit': this.gitCommitHash, + hostname: this.hostname, + gitCommit: this.gitCommitHash, + version: this.version, }; } @@ -29,6 +33,15 @@ class BackendInfo { logger.err('Could not load git commit info: ' + e.message || e); } } + + private setVersion(): void { + try { + const packageJson = fs.readFileSync('package.json').toString(); + this.version = JSON.parse(packageJson).version; + } catch (e) { + throw new Error(e); + } + } } export default new BackendInfo(); diff --git a/backend/src/api/websocket-handler.ts b/backend/src/api/websocket-handler.ts index d90d523fc..2ac88fe42 100644 --- a/backend/src/api/websocket-handler.ts +++ b/backend/src/api/websocket-handler.ts @@ -159,8 +159,7 @@ class WebsocketHandler { 'conversions': fiatConversion.getConversionRates(), 'mempool-blocks': mempoolBlocks.getMempoolBlocks(), 'transactions': memPool.getLatestTransactions(), - 'git-commit': backendInfo.gitCommitHash, - 'hostname': backendInfo.hostname, + 'backendInfo': backendInfo.getBackendInfo(), 'loadingIndicators': loadingIndicators.getLoadingIndicators(), ...this.extraInitProperties }; diff --git a/backend/src/mempool.interfaces.ts b/backend/src/mempool.interfaces.ts index 8e2ed17a8..66a486f94 100644 --- a/backend/src/mempool.interfaces.ts +++ b/backend/src/mempool.interfaces.ts @@ -160,3 +160,9 @@ interface RequiredParams { export interface ILoadingIndicators { [name: string]: number; } export interface IConversionRates { [currency: string]: number; } + +export interface IBackendInfo { + hostname: string; + gitCommit: string; + version: string; +} diff --git a/frontend/generate-config.js b/frontend/generate-config.js index 5b26fb41b..6540ccf56 100644 --- a/frontend/generate-config.js +++ b/frontend/generate-config.js @@ -5,6 +5,8 @@ const GENERATED_CONFIG_FILE_NAME = 'generated-config.js'; let settings = []; let configContent = {}; +let gitCommitHash = ''; +let packetJsonVersion = ''; try { const rawConfig = fs.readFileSync(CONFIG_FILE_NAME); @@ -15,6 +17,13 @@ try { } } +try { + const packageJson = fs.readFileSync('package.json'); + packetJsonVersion = JSON.parse(packageJson).version; +} catch (e) { + throw new Error(e); +} + for (setting in configContent) { settings.push({ key: setting, @@ -22,9 +31,17 @@ for (setting in configContent) { }); } +try { + gitCommitHash = fs.readFileSync('../.git/refs/heads/master').toString().trim(); +} catch (e) { + console.log('Could not load git commit info: ' + e.message || e); +} + const code = `(function (window) { window.__env = window.__env || {};${settings.reduce((str, obj) => `${str} window.__env.${obj.key} = ${ typeof obj.value === 'string' ? `'${obj.value}'` : obj.value };`, '')} + window.__env.GIT_COMMIT_HASH = '${gitCommitHash}'; + window.__env.PACKAGE_JSON_VERSION = '${packetJsonVersion}'; }(global || this));`; try { diff --git a/frontend/package.json b/frontend/package.json index cebb3c6f9..98d9425fe 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -1,6 +1,6 @@ { "name": "mempool-frontend", - "version": "2.0.0", + "version": "2.2-dev", "description": "Bitcoin mempool visualizer and blockchain explorer backend", "license": "GNU Affero General Public License v3.0", "homepage": "https://mempool.space", diff --git a/frontend/proxy.conf.json b/frontend/proxy.conf.json index bc184bc05..3f989d565 100644 --- a/frontend/proxy.conf.json +++ b/frontend/proxy.conf.json @@ -1,8 +1,4 @@ { - "/api/v1/donations": { - "target": "http://localhost:9000/", - "secure": false - }, "/api/v1": { "target": "http://localhost:8999/", "secure": false diff --git a/frontend/src/app/components/about/about.component.html b/frontend/src/app/components/about/about.component.html index 9c861dc10..9886543b3 100644 --- a/frontend/src/app/components/about/about.component.html +++ b/frontend/src/app/components/about/about.component.html @@ -3,9 +3,13 @@

+
-
- v2.2-dev ({{ gitCommit$ | async }}) +
+ Frontend: + v{{ packetJsonVersion }} ({{ frontendGitCommitHash }}) [{{ hostname }}] +
+ Backend: v{{ (backendInfo$ | async ).version }} ({{ (backendInfo$ | async ).gitCommit | slice:0:8 }}) [{{ (backendInfo$ | async).hostname }}]

diff --git a/frontend/src/app/components/about/about.component.ts b/frontend/src/app/components/about/about.component.ts index 59e941465..9e7b79715 100644 --- a/frontend/src/app/components/about/about.component.ts +++ b/frontend/src/app/components/about/about.component.ts @@ -7,6 +7,7 @@ import { FormBuilder, FormGroup, Validators } from '@angular/forms'; import { ApiService } from 'src/app/services/api.service'; import { DomSanitizer, SafeUrl } from '@angular/platform-browser'; import { delay, map, retryWhen, switchMap, tap } from 'rxjs/operators'; +import { IBackendInfo } from 'src/app/interfaces/websocket.interface'; @Component({ selector: 'app-about', @@ -14,7 +15,7 @@ import { delay, map, retryWhen, switchMap, tap } from 'rxjs/operators'; styleUrls: ['./about.component.scss'], }) export class AboutComponent implements OnInit, OnDestroy { - gitCommit$: Observable; + backendInfo$: Observable; donationForm: FormGroup; paymentForm: FormGroup; donationStatus = 1; @@ -22,6 +23,9 @@ export class AboutComponent implements OnInit, OnDestroy { contributors$: Observable; donationObj: any; sponsorsEnabled = this.stateService.env.OFFICIAL_MEMPOOL_SPACE; + frontendGitCommitHash = this.stateService.env.GIT_COMMIT_HASH.substr(0, 8); + packetJsonVersion = this.stateService.env.PACKAGE_JSON_VERSION; + hostname = document.location.hostname; sponsors = null; contributors = null; requestSubscription: Subscription | undefined; @@ -36,7 +40,7 @@ export class AboutComponent implements OnInit, OnDestroy { ) { } ngOnInit() { - this.gitCommit$ = this.stateService.gitCommit$.pipe(map((str) => str.substr(0, 8))); + this.backendInfo$ = this.stateService.backendInfo$; this.seoService.setTitle($localize`:@@004b222ff9ef9dd4771b777950ca1d0e4cd4348a:About`); this.websocketService.want(['blocks']); diff --git a/frontend/src/app/interfaces/websocket.interface.ts b/frontend/src/app/interfaces/websocket.interface.ts index 2a753b91f..882ee72ab 100644 --- a/frontend/src/app/interfaces/websocket.interface.ts +++ b/frontend/src/app/interfaces/websocket.interface.ts @@ -16,6 +16,7 @@ export interface WebsocketResponse { rbfTransaction?: Transaction; transactions?: TransactionStripped[]; loadingIndicators?: ILoadingIndicators; + backendInfo?: IBackendInfo; 'track-tx'?: string; 'track-address'?: string; 'track-asset'?: string; @@ -49,3 +50,8 @@ export interface TransactionStripped { value: number; } +export interface IBackendInfo { + hostname: string; + gitCommit: string; + version: string; +} diff --git a/frontend/src/app/services/state.service.ts b/frontend/src/app/services/state.service.ts index 58eb75faf..fe58b103f 100644 --- a/frontend/src/app/services/state.service.ts +++ b/frontend/src/app/services/state.service.ts @@ -1,7 +1,7 @@ import { Inject, Injectable, PLATFORM_ID } from '@angular/core'; import { ReplaySubject, BehaviorSubject, Subject, fromEvent, Observable } from 'rxjs'; import { Block, Transaction } from '../interfaces/electrs.interface'; -import { MempoolBlock, MempoolInfo, TransactionStripped } from '../interfaces/websocket.interface'; +import { IBackendInfo, MempoolBlock, MempoolInfo, TransactionStripped } from '../interfaces/websocket.interface'; import { OptimizedMempoolStats } from '../interfaces/node-api.interface'; import { Router, NavigationStart } from '@angular/router'; import { isPlatformBrowser } from '@angular/common'; @@ -27,6 +27,8 @@ export interface Env { NGINX_PROTOCOL?: string; NGINX_HOSTNAME?: string; NGINX_PORT?: string; + GIT_COMMIT_HASH: string; + PACKAGE_JSON_VERSION: string; } const defaultEnv: Env = { @@ -41,6 +43,8 @@ const defaultEnv: Env = { 'NGINX_PROTOCOL': 'http', 'NGINX_HOSTNAME': '127.0.0.1', 'NGINX_PORT': '80', + 'GIT_COMMIT_HASH': '', + 'PACKAGE_JSON_VERSION': '', }; @Injectable({ @@ -65,7 +69,7 @@ export class StateService { isLoadingWebSocket$ = new ReplaySubject(1); vbytesPerSecond$ = new ReplaySubject(1); lastDifficultyAdjustment$ = new ReplaySubject(1); - gitCommit$ = new ReplaySubject(1); + backendInfo$ = new ReplaySubject(1); loadingIndicators$ = new ReplaySubject(1); live2Chart$ = new Subject(); diff --git a/frontend/src/app/services/websocket.service.ts b/frontend/src/app/services/websocket.service.ts index 7c35e040d..e5882e959 100644 --- a/frontend/src/app/services/websocket.service.ts +++ b/frontend/src/app/services/websocket.service.ts @@ -1,6 +1,6 @@ import { Injectable } from '@angular/core'; import { webSocket, WebSocketSubject } from 'rxjs/webSocket'; -import { WebsocketResponse } from '../interfaces/websocket.interface'; +import { WebsocketResponse, IBackendInfo } from '../interfaces/websocket.interface'; import { StateService } from './state.service'; import { Block, Transaction } from '../interfaces/electrs.interface'; import { Subscription } from 'rxjs'; @@ -236,13 +236,13 @@ export class WebsocketService { this.stateService.bsqPrice$.next(response['bsq-price']); } - if (response['git-commit']) { - this.stateService.gitCommit$.next(response['git-commit']); + if (response.backendInfo) { + this.stateService.backendInfo$.next(response.backendInfo); if (!this.latestGitCommit) { - this.latestGitCommit = response['git-commit']; + this.latestGitCommit = response.backendInfo.gitCommit; } else { - if (this.latestGitCommit !== response['git-commit']) { + if (this.latestGitCommit !== response.backendInfo.gitCommit) { setTimeout(() => { window.location.reload(); }, Math.floor(Math.random() * 60000) + 60000); @@ -283,7 +283,7 @@ export class WebsocketService { } if (response['git-commit']) { - this.stateService.gitCommit$.next(response['git-commit']); + this.stateService.backendInfo$.next(response['git-commit']); } } } From 089bb38e6ae5af6a92e4dd293c72ecbabc56c8e2 Mon Sep 17 00:00:00 2001 From: wiz Date: Tue, 13 Apr 2021 14:03:36 +0900 Subject: [PATCH 02/22] Change log priority for 'The mempool is now in sync!' message to NOTICE --- backend/src/api/mempool.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/src/api/mempool.ts b/backend/src/api/mempool.ts index 4f8638c3e..81330a3ce 100644 --- a/backend/src/api/mempool.ts +++ b/backend/src/api/mempool.ts @@ -169,7 +169,7 @@ class Mempool { if (!this.inSync && transactions.length === Object.keys(this.mempoolCache).length) { this.inSync = true; - logger.info('The mempool is now in sync!'); + logger.notice('The mempool is now in sync!'); loadingIndicators.setProgress('mempool', 100); } From cbe79d705198ab902a776a91c2d8a44a8e7a8eba Mon Sep 17 00:00:00 2001 From: softsimon Date: Tue, 13 Apr 2021 11:51:55 +0400 Subject: [PATCH 03/22] Show backend info at the bottom. Removing frontend hostname. Re-adding frontend version and commit on top. JS error fix. --- .../src/app/components/about/about.component.html | 14 ++++++++------ .../src/app/components/about/about.component.ts | 4 ++-- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/frontend/src/app/components/about/about.component.html b/frontend/src/app/components/about/about.component.html index b0e5d94b0..c76f5df73 100644 --- a/frontend/src/app/components/about/about.component.html +++ b/frontend/src/app/components/about/about.component.html @@ -3,13 +3,9 @@

-
-
- Frontend: - v{{ packetJsonVersion }} ({{ frontendGitCommitHash }}) [{{ hostname }}] -
- Backend: v{{ (backendInfo$ | async ).version }} ({{ (backendInfo$ | async ).gitCommit | slice:0:8 }}) [{{ (backendInfo$ | async).hostname }}] +
+ v{{ packetJsonVersion }} [{{ frontendGitCommitHash }}]

@@ -396,4 +392,10 @@ Terms of Service
+
+ +
+ {{ (backendInfo$ | async)?.hostname }} (v{{ (backendInfo$ | async )?.version }}) [{{ (backendInfo$ | async )?.gitCommit | slice:0:8 }}] +
+
diff --git a/frontend/src/app/components/about/about.component.ts b/frontend/src/app/components/about/about.component.ts index 9e7b79715..158a00d47 100644 --- a/frontend/src/app/components/about/about.component.ts +++ b/frontend/src/app/components/about/about.component.ts @@ -6,7 +6,7 @@ import { Observable, Subscription } from 'rxjs'; import { FormBuilder, FormGroup, Validators } from '@angular/forms'; import { ApiService } from 'src/app/services/api.service'; import { DomSanitizer, SafeUrl } from '@angular/platform-browser'; -import { delay, map, retryWhen, switchMap, tap } from 'rxjs/operators'; +import { delay, retryWhen, switchMap, tap } from 'rxjs/operators'; import { IBackendInfo } from 'src/app/interfaces/websocket.interface'; @Component({ @@ -25,7 +25,7 @@ export class AboutComponent implements OnInit, OnDestroy { sponsorsEnabled = this.stateService.env.OFFICIAL_MEMPOOL_SPACE; frontendGitCommitHash = this.stateService.env.GIT_COMMIT_HASH.substr(0, 8); packetJsonVersion = this.stateService.env.PACKAGE_JSON_VERSION; - hostname = document.location.hostname; + officialMempoolSpace = this.stateService.env.OFFICIAL_MEMPOOL_SPACE; sponsors = null; contributors = null; requestSubscription: Subscription | undefined; From e255bec7adfb725c5b3d9960acb0941a4c192f6a Mon Sep 17 00:00:00 2001 From: softsimon Date: Tue, 13 Apr 2021 16:53:42 +0400 Subject: [PATCH 04/22] Updating versions to v2.2.0-dev --- backend/package.json | 2 +- frontend/package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/backend/package.json b/backend/package.json index 883deaab8..61c1756f0 100644 --- a/backend/package.json +++ b/backend/package.json @@ -1,6 +1,6 @@ { "name": "mempool-backend", - "version": "2.2-dev", + "version": "v2.2.0-dev", "description": "Bitcoin mempool visualizer and blockchain explorer backend", "license": "GNU Affero General Public License v3.0", "homepage": "https://mempool.space", diff --git a/frontend/package.json b/frontend/package.json index 98d9425fe..fcd070774 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -1,6 +1,6 @@ { "name": "mempool-frontend", - "version": "2.2-dev", + "version": "v2.2.0-dev", "description": "Bitcoin mempool visualizer and blockchain explorer backend", "license": "GNU Affero General Public License v3.0", "homepage": "https://mempool.space", From 3dbddedf91e696fa3d78da6acf2a445000718999 Mon Sep 17 00:00:00 2001 From: softsimon Date: Tue, 13 Apr 2021 18:12:32 +0400 Subject: [PATCH 05/22] Remove 'v' from version. --- backend/package.json | 2 +- frontend/package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/backend/package.json b/backend/package.json index 61c1756f0..c955793e1 100644 --- a/backend/package.json +++ b/backend/package.json @@ -1,6 +1,6 @@ { "name": "mempool-backend", - "version": "v2.2.0-dev", + "version": "2.2.0-dev", "description": "Bitcoin mempool visualizer and blockchain explorer backend", "license": "GNU Affero General Public License v3.0", "homepage": "https://mempool.space", diff --git a/frontend/package.json b/frontend/package.json index fcd070774..ee7d77b85 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -1,6 +1,6 @@ { "name": "mempool-frontend", - "version": "v2.2.0-dev", + "version": "2.2.0-dev", "description": "Bitcoin mempool visualizer and blockchain explorer backend", "license": "GNU Affero General Public License v3.0", "homepage": "https://mempool.space", From 5085e0c420416ced628cd7eae4d9de4cfabdac7b Mon Sep 17 00:00:00 2001 From: wiz Date: Wed, 14 Apr 2021 01:18:30 +0900 Subject: [PATCH 06/22] Add Exodus as Enterprise Sponsor on About page --- .../src/app/components/about/about.component.html | 7 +++++++ frontend/src/resources/profile/exodus.svg | 13 +++++++++++++ 2 files changed, 20 insertions(+) create mode 100644 frontend/src/resources/profile/exodus.svg diff --git a/frontend/src/app/components/about/about.component.html b/frontend/src/app/components/about/about.component.html index c76f5df73..9f1c3f3dc 100644 --- a/frontend/src/app/components/about/about.component.html +++ b/frontend/src/app/components/about/about.component.html @@ -60,6 +60,13 @@ + +
+ + Exodus +
+
+



diff --git a/frontend/src/resources/profile/exodus.svg b/frontend/src/resources/profile/exodus.svg new file mode 100644 index 000000000..0f8c44fe9 --- /dev/null +++ b/frontend/src/resources/profile/exodus.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + From d60bc109410fc036ef37a161be9489e6accd00e8 Mon Sep 17 00:00:00 2001 From: wiz Date: Wed, 14 Apr 2021 05:04:02 +0900 Subject: [PATCH 07/22] Update Square Crypto logo with SVG image --- .../app/components/about/about.component.html | 2 +- frontend/src/resources/profile/sqcrypto.svg | 26 +++++++++++++++++++ 2 files changed, 27 insertions(+), 1 deletion(-) create mode 100644 frontend/src/resources/profile/sqcrypto.svg diff --git a/frontend/src/app/components/about/about.component.html b/frontend/src/app/components/about/about.component.html index 9f1c3f3dc..3466c275e 100644 --- a/frontend/src/app/components/about/about.component.html +++ b/frontend/src/app/components/about/about.component.html @@ -48,7 +48,7 @@
- + Square
diff --git a/frontend/src/resources/profile/sqcrypto.svg b/frontend/src/resources/profile/sqcrypto.svg new file mode 100644 index 000000000..fae138e84 --- /dev/null +++ b/frontend/src/resources/profile/sqcrypto.svg @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + From fd0ffd2a391410c8a1368c1e0d090950215ba5f0 Mon Sep 17 00:00:00 2001 From: softsimon Date: Thu, 15 Apr 2021 00:57:10 +0400 Subject: [PATCH 08/22] Upgrading mempool-js to v2.3. --- frontend/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/package.json b/frontend/package.json index ee7d77b85..f1016c74c 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -55,7 +55,7 @@ "@fortawesome/fontawesome-svg-core": "^1.2.35", "@fortawesome/free-solid-svg-icons": "^5.15.3", "@mempool/chartist": "^0.11.4", - "@mempool/mempool-js": "^2.2.1", + "@mempool/mempool-js": "^2.3.0", "@ng-bootstrap/ng-bootstrap": "^7.0.0", "@nguniversal/express-engine": "11.2.1", "@types/qrcode": "^1.3.4", From cd1273981d42c11ecf42e79927e52b005e600f37 Mon Sep 17 00:00:00 2001 From: softsimon Date: Thu, 15 Apr 2021 16:04:09 +0400 Subject: [PATCH 09/22] Syslog is now configurable with minimum priority and facility option. fixes #135 --- backend/mempool-config.sample.json | 7 +++++++ backend/src/config.ts | 16 ++++++++++++++++ backend/src/logger.ts | 18 +++++++----------- 3 files changed, 30 insertions(+), 11 deletions(-) diff --git a/backend/mempool-config.sample.json b/backend/mempool-config.sample.json index c444929b5..1582929aa 100644 --- a/backend/mempool-config.sample.json +++ b/backend/mempool-config.sample.json @@ -39,6 +39,13 @@ "USERNAME": "mempool", "PASSWORD": "mempool" }, + "SYSLOG": { + "ENABLED": true, + "HOST": "127.0.0.1", + "PORT": 514, + "MIN_PRIORITY": "info", + "FACILITY": "local7" + }, "STATISTICS": { "ENABLED": true, "TX_PER_SECOND_SAMPLE_PERIOD": 150 diff --git a/backend/src/config.ts b/backend/src/config.ts index ace63394c..d5828f922 100644 --- a/backend/src/config.ts +++ b/backend/src/config.ts @@ -41,6 +41,13 @@ interface IConfig { USERNAME: string; PASSWORD: string; }; + SYSLOG: { + ENABLED: boolean; + HOST: string; + PORT: number; + MIN_PRIORITY: 'emerg' | 'alert' | 'crit' | 'err' |'warn' | 'notice' | 'info' | 'debug'; + FACILITY: string; + }; STATISTICS: { ENABLED: boolean; TX_PER_SECOND_SAMPLE_PERIOD: number; @@ -96,6 +103,13 @@ const defaults: IConfig = { 'USERNAME': 'mempool', 'PASSWORD': 'mempool' }, + 'SYSLOG': { + 'ENABLED': true, + 'HOST': '127.0.0.1', + 'PORT': 514, + 'MIN_PRIORITY': 'info', + 'FACILITY': 'local7' + }, 'STATISTICS': { 'ENABLED': true, 'TX_PER_SECOND_SAMPLE_PERIOD': 150 @@ -117,6 +131,7 @@ class Config implements IConfig { CORE_RPC: IConfig['CORE_RPC']; CORE_RPC_MINFEE: IConfig['CORE_RPC_MINFEE']; DATABASE: IConfig['DATABASE']; + SYSLOG: IConfig['SYSLOG']; STATISTICS: IConfig['STATISTICS']; BISQ_BLOCKS: IConfig['BISQ_BLOCKS']; BISQ_MARKETS: IConfig['BISQ_MARKETS']; @@ -129,6 +144,7 @@ class Config implements IConfig { this.CORE_RPC = configs.CORE_RPC; this.CORE_RPC_MINFEE = configs.CORE_RPC_MINFEE; this.DATABASE = configs.DATABASE; + this.SYSLOG = configs.SYSLOG; this.STATISTICS = configs.STATISTICS; this.BISQ_BLOCKS = configs.BISQ_BLOCKS; this.BISQ_MARKETS = configs.BISQ_MARKETS; diff --git a/backend/src/logger.ts b/backend/src/logger.ts index 41aaf5c8f..8c7548d24 100644 --- a/backend/src/logger.ts +++ b/backend/src/logger.ts @@ -50,17 +50,11 @@ class Logger { public debug: ((msg: string) => void); private name = 'mempool'; - private fac: any; - private loghost: string; - private logport: number; private client: dgram.Socket; private network: string; - constructor(fac) { + constructor() { let prio; - this.fac = fac != null ? fac : Logger.facilities.local0; - this.loghost = '127.0.0.1'; - this.logport = 514; for (prio in Logger.priorities) { if (true) { this.addprio(prio); @@ -97,10 +91,12 @@ class Logger { } const network = this.network ? ' <' + this.network + '>' : ''; prionum = Logger.priorities[priority] || Logger.priorities.info; - syslogmsg = `<${(this.fac * 8 + prionum)}> ${this.name}[${process.pid}]: ${priority.toUpperCase()}${network} ${msg}`; consolemsg = `${this.ts()} [${process.pid}] ${priority.toUpperCase()}:${network} ${msg}`; - this.syslog(syslogmsg); + if (config.SYSLOG.ENABLED && Logger.priorities[priority] >= Logger.priorities[config.SYSLOG.MIN_PRIORITY]) { + syslogmsg = `<${(Logger.facilities[config.SYSLOG.FACILITY] * 8 + prionum)}> ${this.name}[${process.pid}]: ${priority.toUpperCase()}${network} ${msg}`; + this.syslog(syslogmsg); + } if (priority === 'warning') { priority = 'warn'; } @@ -116,7 +112,7 @@ class Logger { private syslog(msg) { let msgbuf; msgbuf = Buffer.from(msg); - this.client.send(msgbuf, 0, msgbuf.length, this.logport, this.loghost, function(err, bytes) { + this.client.send(msgbuf, 0, msgbuf.length, config.SYSLOG.PORT, config.SYSLOG.HOST, function(err, bytes) { if (err) { console.log(err); } @@ -146,4 +142,4 @@ class Logger { } } -export default new Logger(Logger.facilities.local7); +export default new Logger(); From 3300f0e8d320679d9605675415456b55e04db374 Mon Sep 17 00:00:00 2001 From: wiz Date: Thu, 15 Apr 2021 21:44:13 +0900 Subject: [PATCH 10/22] Set production backend config "CLEAR_PROTECTION_MINUTES": 5 --- production/mempool-config.mainnet.json | 1 + 1 file changed, 1 insertion(+) diff --git a/production/mempool-config.mainnet.json b/production/mempool-config.mainnet.json index 6b7027143..6d6a94f48 100644 --- a/production/mempool-config.mainnet.json +++ b/production/mempool-config.mainnet.json @@ -6,6 +6,7 @@ "MINED_BLOCKS_CACHE": 144, "SPAWN_CLUSTER_PROCS": 0, "API_URL_PREFIX": "/api/v1/", + "CLEAR_PROTECTION_MINUTES": 5, "POLL_RATE_MS": 2000 }, "CORE_RPC": { From d51ea54ab904c45c2dfa4aabafdc5c33a09b09d3 Mon Sep 17 00:00:00 2001 From: wiz Date: Fri, 16 Apr 2021 00:12:29 +0900 Subject: [PATCH 11/22] Add production FreeBSD tuning parameters to increase network buffers --- production/sysctl.conf | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 production/sysctl.conf diff --git a/production/sysctl.conf b/production/sysctl.conf new file mode 100644 index 000000000..8d1fd9c96 --- /dev/null +++ b/production/sysctl.conf @@ -0,0 +1,2 @@ +net.inet.tcp.fast_finwait2_recycle=1 +kern.ipc.soacceptqueue=1024 From d1b53f4c3ae88a9023ed01aebde451433a6e1991 Mon Sep 17 00:00:00 2001 From: softsimon Date: Thu, 15 Apr 2021 21:16:56 +0400 Subject: [PATCH 12/22] Syslog priority comparison fix. --- backend/src/logger.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/src/logger.ts b/backend/src/logger.ts index 8c7548d24..f14af0104 100644 --- a/backend/src/logger.ts +++ b/backend/src/logger.ts @@ -93,7 +93,7 @@ class Logger { prionum = Logger.priorities[priority] || Logger.priorities.info; consolemsg = `${this.ts()} [${process.pid}] ${priority.toUpperCase()}:${network} ${msg}`; - if (config.SYSLOG.ENABLED && Logger.priorities[priority] >= Logger.priorities[config.SYSLOG.MIN_PRIORITY]) { + if (config.SYSLOG.ENABLED && Logger.priorities[priority] <= Logger.priorities[config.SYSLOG.MIN_PRIORITY]) { syslogmsg = `<${(Logger.facilities[config.SYSLOG.FACILITY] * 8 + prionum)}> ${this.name}[${process.pid}]: ${priority.toUpperCase()}${network} ${msg}`; this.syslog(syslogmsg); } From 3740980007605648d06dc5deb334210482268146 Mon Sep 17 00:00:00 2001 From: wiz Date: Fri, 16 Apr 2021 02:29:06 +0900 Subject: [PATCH 13/22] Update Exodus logo with new SVG --- frontend/src/resources/profile/exodus.svg | 27 +++++++++++++---------- 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/frontend/src/resources/profile/exodus.svg b/frontend/src/resources/profile/exodus.svg index 0f8c44fe9..082cba7a5 100644 --- a/frontend/src/resources/profile/exodus.svg +++ b/frontend/src/resources/profile/exodus.svg @@ -1,13 +1,16 @@ - - - - - - - - - - - - + + + Exodus_logo + + + + + + + From 90b06833ba4b403598af42ebad9d912bd3744cd4 Mon Sep 17 00:00:00 2001 From: wiz Date: Sat, 17 Apr 2021 12:56:54 +0900 Subject: [PATCH 14/22] Rename frontend npm dep @mempool/mempool-js to @mempool/mempool.js --- frontend/package-lock.json | 18 +++++++++--------- frontend/package.json | 6 +++--- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 2b5c4b81a..80da5b578 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -1,12 +1,12 @@ { "name": "mempool-frontend", - "version": "2.0.0", + "version": "2.2.0-dev", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "mempool-frontend", - "version": "2.0.0", + "version": "2.2.0-dev", "license": "GNU Affero General Public License v3.0", "dependencies": { "@angular/animations": "~11.2.8", @@ -24,7 +24,7 @@ "@fortawesome/fontawesome-svg-core": "^1.2.35", "@fortawesome/free-solid-svg-icons": "^5.15.3", "@mempool/chartist": "^0.11.4", - "@mempool/mempool-js": "^2.2.0", + "@mempool/mempool.js": "^2.2.0", "@ng-bootstrap/ng-bootstrap": "^7.0.0", "@nguniversal/express-engine": "11.2.1", "@types/qrcode": "^1.3.4", @@ -2192,10 +2192,10 @@ "node": ">=4.6.0" } }, - "node_modules/@mempool/mempool-js": { + "node_modules/@mempool/mempool.js": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@mempool/mempool-js/-/mempool-js-2.2.0.tgz", - "integrity": "sha512-WCQL9quUHpZs7H2PdI4UsDCLdhM7bi8ZOjbI5v+in8bn1FVYBe/XygEllYaucw1C87jn/Dm8+5dRbuPCAGiXrA==", + "resolved": "https://registry.npmjs.org/@mempool/mempool.js/-/mempool.js-2.2.0.tgz", + "integrity": "sha512-emBbMmLQd/x+4DQVno9zq4nGA9rOMAinYTOzI4s5lLVBzGL8++8JpkXouH05HC5wOHA0VpRhBX7X+lOX/o0oAA==", "dependencies": { "axios": "^0.21.1", "ws": "^7.4.3" @@ -22186,10 +22186,10 @@ "resolved": "https://registry.npmjs.org/@mempool/chartist/-/chartist-0.11.4.tgz", "integrity": "sha512-wSemsw2NIWS7/SHxjDe9upSdUETxNRebY0ByaJzcONKUzJSUzMuSNmKEdD3kr/g02H++JvsXR2znLC6tYEAbPA==" }, - "@mempool/mempool-js": { + "@mempool/mempool.js": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@mempool/mempool-js/-/mempool-js-2.2.0.tgz", - "integrity": "sha512-WCQL9quUHpZs7H2PdI4UsDCLdhM7bi8ZOjbI5v+in8bn1FVYBe/XygEllYaucw1C87jn/Dm8+5dRbuPCAGiXrA==", + "resolved": "https://registry.npmjs.org/@mempool/mempool.js/-/mempool.js-2.2.0.tgz", + "integrity": "sha512-emBbMmLQd/x+4DQVno9zq4nGA9rOMAinYTOzI4s5lLVBzGL8++8JpkXouH05HC5wOHA0VpRhBX7X+lOX/o0oAA==", "requires": { "axios": "^0.21.1", "ws": "^7.4.3" diff --git a/frontend/package.json b/frontend/package.json index f1016c74c..88b471f0c 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -26,11 +26,11 @@ "i18n-pull-from-transifex": "tx pull -a --parallel --minimum-perc 1 --force", "serve": "ng serve --proxy-config proxy.conf.json", "start": "npm run generate-config && npm run sync-assets-dev && ng serve --proxy-config proxy.conf.json", - "build": "npm run generate-config && ng build --prod --localize && npm run sync-assets && npm run build-mempool-js", + "build": "npm run generate-config && ng build --prod --localize && npm run sync-assets && npm run build-mempool.js", "sync-assets": "node sync-assets.js && rsync -av ./dist/mempool/browser/en-US/resources ./dist/mempool/browser/resources", "sync-assets-dev": "node sync-assets.js dev", "generate-config": "node generate-config.js", - "build-mempool-js": "tsc | browserify -p tinyify ./node_modules/@mempool/mempool-js/lib/index.js --standalone mempoolJS > ./dist/mempool/browser/en-US/mempool.js", + "build-mempool.js": "tsc | browserify -p tinyify ./node_modules/@mempool/mempool.js/lib/index.js --standalone mempoolJS > ./dist/mempool/browser/en-US/mempool.js", "test": "ng test", "lint": "ng lint", "e2e": "ng e2e", @@ -55,7 +55,7 @@ "@fortawesome/fontawesome-svg-core": "^1.2.35", "@fortawesome/free-solid-svg-icons": "^5.15.3", "@mempool/chartist": "^0.11.4", - "@mempool/mempool-js": "^2.3.0", + "@mempool/mempool.js": "^2.2.0", "@ng-bootstrap/ng-bootstrap": "^7.0.0", "@nguniversal/express-engine": "11.2.1", "@types/qrcode": "^1.3.4", From f6ea45b61fbb261b180bdf10146bd8abab7bd249 Mon Sep 17 00:00:00 2001 From: Felipe Knorr Kuhn Date: Sat, 17 Apr 2021 14:52:16 -0700 Subject: [PATCH 15/22] add new configuration and targets to point the frontend to staging --- frontend/package.json | 2 ++ frontend/proxy.stg.conf.json | 68 ++++++++++++++++++++++++++++++++++++ 2 files changed, 70 insertions(+) create mode 100644 frontend/proxy.stg.conf.json diff --git a/frontend/package.json b/frontend/package.json index 88b471f0c..fedb61227 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -25,7 +25,9 @@ "i18n-extract-from-source": "./node_modules/@angular/cli/bin/ng xi18n --ivy --out-file ./src/locale/messages.xlf", "i18n-pull-from-transifex": "tx pull -a --parallel --minimum-perc 1 --force", "serve": "ng serve --proxy-config proxy.conf.json", + "serve:stg": "ng serve --proxy-config proxy.stg.conf.json --verbose", "start": "npm run generate-config && npm run sync-assets-dev && ng serve --proxy-config proxy.conf.json", + "start:stg": "npm run generate-config && npm run sync-assets-dev && ng serve --proxy-config proxy.stg.conf.json", "build": "npm run generate-config && ng build --prod --localize && npm run sync-assets && npm run build-mempool.js", "sync-assets": "node sync-assets.js && rsync -av ./dist/mempool/browser/en-US/resources ./dist/mempool/browser/resources", "sync-assets-dev": "node sync-assets.js dev", diff --git a/frontend/proxy.stg.conf.json b/frontend/proxy.stg.conf.json new file mode 100644 index 000000000..18b26b602 --- /dev/null +++ b/frontend/proxy.stg.conf.json @@ -0,0 +1,68 @@ +{ + "/api/v1/ws": { + "target": "https://mempool.ninja", + "secure": false, + "ws": true + }, + "/api/*": { + "target": "https://mempool.ninja", + "secure": false, + "changeOrigin": true, + "logLevel": "debug", + "pathRewrite": { + "^/api": "https://mempool.ninja/api" + }, + "timeout": 3600000 + }, + "/testnet/api/v1/ws": { + "target": "https://mempool.ninja/testnet", + "secure": false, + "ws": true, + "pathRewrite": { + "^/testnet/api": "/api/v1/ws" + } + }, + "/testnet/api/v1/*": { + "target": "https://mempool.ninja/testnet", + "secure": false, + "changeOrigin": true, + "pathRewrite": { + "^/testnet/api/v1": "/api/v1" + }, + "timeout": 3600000 + }, + "/bisq/api/v1/ws": { + "target": "https://mempool.ninja/bisq", + "secure": false, + "ws": true, + "pathRewrite": { + "^/bisq/api": "/api/v1/ws" + } + }, + "/bisq/api/*": { + "target": "https://mempool.ninja/bisq", + "secure": false, + "changeOrigin": true, + "pathRewrite": { + "^/bisq/api/": "/api/v1/bisq/" + }, + "timeout": 3600000 + }, + "/liquid/api/v1/ws": { + "target": "https://mempool.ninja/liquid", + "secure": false, + "ws": true, + "pathRewrite": { + "^/liquid/api": "/api/v1/ws" + } + }, + "/liquid/api/*": { + "target": "https://mempool.ninja/liquid", + "secure": false, + "changeOrigin": true, + "pathRewrite": { + "^/liquid/api/": "/api/v1/liquid/" + }, + "timeout": 3600000 + } +} From e62ee721498a1b089aae78f5c1ca37e207a806b4 Mon Sep 17 00:00:00 2001 From: Felipe Knorr Kuhn Date: Sat, 17 Apr 2021 15:53:22 -0700 Subject: [PATCH 16/22] bind the server to 0.0.0.0 to allow it to be reachable by other devices --- frontend/package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/frontend/package.json b/frontend/package.json index fedb61227..064e8f98a 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -25,9 +25,9 @@ "i18n-extract-from-source": "./node_modules/@angular/cli/bin/ng xi18n --ivy --out-file ./src/locale/messages.xlf", "i18n-pull-from-transifex": "tx pull -a --parallel --minimum-perc 1 --force", "serve": "ng serve --proxy-config proxy.conf.json", - "serve:stg": "ng serve --proxy-config proxy.stg.conf.json --verbose", + "serve:stg": "ng serve --host 0.0.0.0 --disable-host-check --proxy-config proxy.stg.conf.json --verbose", "start": "npm run generate-config && npm run sync-assets-dev && ng serve --proxy-config proxy.conf.json", - "start:stg": "npm run generate-config && npm run sync-assets-dev && ng serve --proxy-config proxy.stg.conf.json", + "start:stg": "npm run generate-config && npm run sync-assets-dev && ng serve --host 0.0.0.0 --disable-host-check --proxy-config proxy.stg.conf.json", "build": "npm run generate-config && ng build --prod --localize && npm run sync-assets && npm run build-mempool.js", "sync-assets": "node sync-assets.js && rsync -av ./dist/mempool/browser/en-US/resources ./dist/mempool/browser/resources", "sync-assets-dev": "node sync-assets.js dev", From 0a07a16650bc1064e63c84f7bdd54bfd5f2f6424 Mon Sep 17 00:00:00 2001 From: Felipe Knorr Kuhn Date: Sat, 17 Apr 2021 16:11:34 -0700 Subject: [PATCH 17/22] fix native scrolling on iOS devices --- frontend/src/styles.scss | 1 - 1 file changed, 1 deletion(-) diff --git a/frontend/src/styles.scss b/frontend/src/styles.scss index aad6a9f35..1458aed8c 100644 --- a/frontend/src/styles.scss +++ b/frontend/src/styles.scss @@ -50,7 +50,6 @@ $dropdown-link-active-bg: #11131f; html, body { height: 100%; - overflow-x: hidden; } body { From 220d9afd978d3224c105e9a6dfed74e623e97eb5 Mon Sep 17 00:00:00 2001 From: Felipe Knorr Kuhn <100320+knorrium@users.noreply.github.com> Date: Sun, 18 Apr 2021 23:17:16 -0700 Subject: [PATCH 18/22] persist graph window preference between reloads (#456) Persist graph window preference between reloads fixes #365 --- .../statistics/statistics.component.html | 3 +-- .../statistics/statistics.component.ts | 23 ++++++++++++------- 2 files changed, 16 insertions(+), 10 deletions(-) diff --git a/frontend/src/app/components/statistics/statistics.component.html b/frontend/src/app/components/statistics/statistics.component.html index e876f41fa..b83cb129b 100644 --- a/frontend/src/app/components/statistics/statistics.component.html +++ b/frontend/src/app/components/statistics/statistics.component.html @@ -14,8 +14,7 @@
Mempool by vBytes (sat/vByte) - -
+