UNPKG

a2r

Version:
55 lines (54 loc) 1.9 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.clean = exports.getCollection = void 0; const mongodb_1 = require("mongodb"); const telemetry_1 = require("@a2r/telemetry"); const settings_1 = require("../settings"); const url = process.env[settings_1.mongoUrlParam]; const dbName = process.env[settings_1.mongoDbNameParam]; let mongoClient = null; const options = { ignoreUndefined: true, }; const getPromise = () => new Promise((resolve, reject) => { mongodb_1.MongoClient.connect(url, options, (err, client) => { if (err || !client) { reject(err); } else { telemetry_1.out.info(`Connecting to database ${dbName}`); mongoClient = client; const db = client.db(dbName); client.on('close', () => telemetry_1.out.warn('Db was closed')); client.on('timeout', () => telemetry_1.out.warn('Db timed out')); client.on('error', (error) => telemetry_1.out.error(`Db produced an error: ${error.stack}`)); client.on('parseError', (error) => telemetry_1.out.error(`Db produced an error: ${error.stack}`)); client.on('reconnect', () => telemetry_1.out.info('Db reconnected')); resolve(db); } }); }); let clientPromise = getPromise(); async function getConnection() { try { const db = await clientPromise; return db; } catch (ex) { clientPromise = getPromise(); return clientPromise; } } exports.default = getConnection; async function getCollection(collectionName) { const db = await getConnection(); return db.collection(collectionName); } exports.getCollection = getCollection; async function clean() { if (mongoClient) { telemetry_1.out.verbose(`DbPool: Cleaning mongo client`); await mongoClient.close(); } } exports.clean = clean;