Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 | 35x 35x 35x 35x 35x 35x 35x 35x 35x | import { CardanoWsServer } from '../../WsServer';
import {
CommonOptionsDescriptions,
CommonProgramOptions,
OgmiosProgramOptions,
PosgresProgramOptions
} from '../options';
import { MissingProgramOption } from '../errors';
import { createDnsResolver } from '../utils';
import { createLogger } from 'bunyan';
import { getOgmiosCardanoNode } from '../services';
import { getPool } from '../services/postgres';
import { loadGenesisData } from '../../util';
export type WsServerArgs = CommonProgramOptions & PosgresProgramOptions<'DbSync'> & OgmiosProgramOptions;
export const loadWsServer = (args: WsServerArgs) => {
const { apiUrl, dbCacheTtl, heartbeatTimeout, loggerMinSeverity, ogmiosUrl } = args;
const { cardanoNodeConfigPath, serviceDiscoveryBackoffFactor: factor, serviceDiscoveryTimeout: maxRetryTime } = args;
const logger = createLogger({ level: loggerMinSeverity, name: 'ws-server' });
logger.info('Loading WebSocket server...');
Iif (!cardanoNodeConfigPath)
throw new MissingProgramOption('WebSocketServer', CommonOptionsDescriptions.CardanoNodeConfigPath);
(async () => {
const dnsResolver = createDnsResolver({ factor, maxRetryTime }, logger);
const cardanoNode = await getOgmiosCardanoNode(dnsResolver, logger, { ogmiosUrl });
const db = await getPool(dnsResolver, logger, args);
const genesisData = await loadGenesisData(cardanoNodeConfigPath);
const port = Number.parseInt(apiUrl.port, 10);
Iif (!db) throw new Error('Unable to get DB Pool');
await cardanoNode.initialize();
await cardanoNode.start();
const server = new CardanoWsServer(
{ cardanoNode, db, genesisData, logger },
{ dbCacheTtl, heartbeatTimeout, port }
);
let shuttingDown = false;
const shutDown = (signal: string) => {
Iif (shuttingDown) return;
shuttingDown = true;
logger.info(`Shutting down Cardano SDK WebSocket Server due to ${signal} ...`);
server.close(() => {
Promise.all([db.end(), cardanoNode.shutdown()])
.then(() => logger.info('Cardano SDK WebSocket Server shutdown'))
.catch((error) => logger.error(error, 'Error while shutting down WebSocket Server'));
});
};
for (const signal of ['SIGABRT', 'SIGINT', 'SIGQUIT', 'SIGTERM'] as const) process.on(signal, shutDown);
})().catch((error) => logger.error(error, 'While loading the WebSocket server'));
};
|