a2r
Version:
A2R Framework
55 lines (54 loc) • 1.9 kB
JavaScript
;
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;