Refactored the DB class into a regular singleton class.
This commit is contained in:
parent
6fb0571b06
commit
6919393e6c
@ -1,5 +1,5 @@
|
|||||||
import config from '../config';
|
import config from '../config';
|
||||||
import { DB } from '../database';
|
import DB from '../database';
|
||||||
import logger from '../logger';
|
import logger from '../logger';
|
||||||
|
|
||||||
const sleep = (ms: number) => new Promise(res => setTimeout(res, ms));
|
const sleep = (ms: number) => new Promise(res => setTimeout(res, ms));
|
||||||
|
@ -2,7 +2,7 @@ import { IBitcoinApi } from '../bitcoin/bitcoin-api.interface';
|
|||||||
import bitcoinClient from '../bitcoin/bitcoin-client';
|
import bitcoinClient from '../bitcoin/bitcoin-client';
|
||||||
import bitcoinSecondClient from '../bitcoin/bitcoin-second-client';
|
import bitcoinSecondClient from '../bitcoin/bitcoin-second-client';
|
||||||
import { Common } from '../common';
|
import { Common } from '../common';
|
||||||
import { DB } from '../../database';
|
import DB from '../../database';
|
||||||
import logger from '../../logger';
|
import logger from '../../logger';
|
||||||
|
|
||||||
class ElementsParser {
|
class ElementsParser {
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
import { readFileSync } from 'fs';
|
import DB from '../database';
|
||||||
import { DB } from '../database';
|
|
||||||
import logger from '../logger';
|
import logger from '../logger';
|
||||||
import config from '../config';
|
import config from '../config';
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
import memPool from './mempool';
|
import memPool from './mempool';
|
||||||
import { DB } from '../database';
|
import DB from '../database';
|
||||||
import logger from '../logger';
|
import logger from '../logger';
|
||||||
|
|
||||||
import { Statistic, TransactionExtended, OptimizedStatistic } from '../mempool.interfaces';
|
import { Statistic, TransactionExtended, OptimizedStatistic } from '../mempool.interfaces';
|
||||||
|
@ -3,52 +3,49 @@ import { createPool, Pool, PoolConnection } from 'mysql2/promise';
|
|||||||
import logger from './logger';
|
import logger from './logger';
|
||||||
import { PoolOptions } from 'mysql2/typings/mysql';
|
import { PoolOptions } from 'mysql2/typings/mysql';
|
||||||
|
|
||||||
export class DB {
|
class DB {
|
||||||
static connectionsReady: number[] = [];
|
constructor() {
|
||||||
static pool: Pool | null = null;
|
|
||||||
|
|
||||||
static poolConfig = (): PoolOptions => {
|
|
||||||
const poolConfig: PoolOptions = {
|
|
||||||
port: config.DATABASE.PORT,
|
|
||||||
database: config.DATABASE.DATABASE,
|
|
||||||
user: config.DATABASE.USERNAME,
|
|
||||||
password: config.DATABASE.PASSWORD,
|
|
||||||
connectionLimit: 10,
|
|
||||||
supportBigNumbers: true,
|
|
||||||
timezone: '+00:00',
|
|
||||||
};
|
|
||||||
|
|
||||||
if (config.DATABASE.SOCKET !== '') {
|
if (config.DATABASE.SOCKET !== '') {
|
||||||
poolConfig.socketPath = config.DATABASE.SOCKET;
|
this.poolConfig.socketPath = config.DATABASE.SOCKET;
|
||||||
} else {
|
} else {
|
||||||
poolConfig.host = config.DATABASE.HOST;
|
this.poolConfig.host = config.DATABASE.HOST;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
private pool: Pool | null = null;
|
||||||
|
private poolConfig: PoolOptions = {
|
||||||
|
port: config.DATABASE.PORT,
|
||||||
|
database: config.DATABASE.DATABASE,
|
||||||
|
user: config.DATABASE.USERNAME,
|
||||||
|
password: config.DATABASE.PASSWORD,
|
||||||
|
connectionLimit: 10,
|
||||||
|
supportBigNumbers: true,
|
||||||
|
timezone: '+00:00',
|
||||||
|
};
|
||||||
|
|
||||||
return poolConfig;
|
public async query(query, params?) {
|
||||||
|
const pool = await this.getPool();
|
||||||
|
return pool.query(query, params);
|
||||||
}
|
}
|
||||||
|
|
||||||
static async getPool(): Promise<Pool> {
|
public async checkDbConnection() {
|
||||||
if (DB.pool === null) {
|
try {
|
||||||
DB.pool = createPool(DB.poolConfig());
|
await this.query('SELECT ?', [1]);
|
||||||
DB.pool.on('connection', function (newConnection: PoolConnection) {
|
logger.info('Database connection established.');
|
||||||
|
} catch (e) {
|
||||||
|
logger.err('Could not connect to database: ' + (e instanceof Error ? e.message : e));
|
||||||
|
process.exit(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private async getPool(): Promise<Pool> {
|
||||||
|
if (this.pool === null) {
|
||||||
|
this.pool = createPool(this.poolConfig);
|
||||||
|
this.pool.on('connection', function (newConnection: PoolConnection) {
|
||||||
newConnection.query(`SET time_zone='+00:00'`);
|
newConnection.query(`SET time_zone='+00:00'`);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
return DB.pool;
|
return this.pool;
|
||||||
}
|
|
||||||
|
|
||||||
static async query(query, params?) {
|
|
||||||
const pool = await DB.getPool();
|
|
||||||
return pool.query(query, params);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function checkDbConnection() {
|
export default new DB();
|
||||||
try {
|
|
||||||
await DB.query('SELECT ?', [1]);
|
|
||||||
logger.info('Database connection established.');
|
|
||||||
} catch (e) {
|
|
||||||
logger.err('Could not connect to database: ' + (e instanceof Error ? e.message : e));
|
|
||||||
process.exit(1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
@ -5,7 +5,7 @@ import * as WebSocket from 'ws';
|
|||||||
import * as cluster from 'cluster';
|
import * as cluster from 'cluster';
|
||||||
import axios from 'axios';
|
import axios from 'axios';
|
||||||
|
|
||||||
import { checkDbConnection, DB } from './database';
|
import DB from './database';
|
||||||
import config from './config';
|
import config from './config';
|
||||||
import routes from './routes';
|
import routes from './routes';
|
||||||
import blocks from './api/blocks';
|
import blocks from './api/blocks';
|
||||||
@ -89,7 +89,7 @@ class Server {
|
|||||||
diskCache.loadMempoolCache();
|
diskCache.loadMempoolCache();
|
||||||
|
|
||||||
if (config.DATABASE.ENABLED) {
|
if (config.DATABASE.ENABLED) {
|
||||||
await checkDbConnection();
|
await DB.checkDbConnection();
|
||||||
try {
|
try {
|
||||||
if (process.env.npm_config_reindex != undefined) { // Re-index requests
|
if (process.env.npm_config_reindex != undefined) { // Re-index requests
|
||||||
const tables = process.env.npm_config_reindex.split(',');
|
const tables = process.env.npm_config_reindex.split(',');
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
import { BlockExtended, PoolTag } from '../mempool.interfaces';
|
import { BlockExtended } from '../mempool.interfaces';
|
||||||
import { DB } from '../database';
|
import DB from '../database';
|
||||||
import logger from '../logger';
|
import logger from '../logger';
|
||||||
import { Common } from '../api/common';
|
import { Common } from '../api/common';
|
||||||
import { prepareBlock } from '../utils/blocks-utils';
|
import { prepareBlock } from '../utils/blocks-utils';
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
import { Common } from '../api/common';
|
import { Common } from '../api/common';
|
||||||
import { DB } from '../database';
|
import DB from '../database';
|
||||||
import logger from '../logger';
|
import logger from '../logger';
|
||||||
import PoolsRepository from './PoolsRepository';
|
import PoolsRepository from './PoolsRepository';
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
import { Common } from '../api/common';
|
import { Common } from '../api/common';
|
||||||
import config from '../config';
|
import config from '../config';
|
||||||
import { DB } from '../database';
|
import DB from '../database';
|
||||||
import logger from '../logger';
|
import logger from '../logger';
|
||||||
import { PoolInfo, PoolTag } from '../mempool.interfaces';
|
import { PoolInfo, PoolTag } from '../mempool.interfaces';
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
const https = require('https');
|
const https = require('https');
|
||||||
import poolsParser from '../api/pools-parser';
|
import poolsParser from '../api/pools-parser';
|
||||||
import config from '../config';
|
import config from '../config';
|
||||||
import { DB } from '../database';
|
import DB from '../database';
|
||||||
import logger from '../logger';
|
import logger from '../logger';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Loading…
x
Reference in New Issue
Block a user