55 lines
1.7 KiB
JavaScript
55 lines
1.7 KiB
JavaScript
import nconf from 'nconf';
|
|
import mongoose from 'mongoose';
|
|
import logger from './logger';
|
|
import {
|
|
getDevelopmentConnectionUrl,
|
|
getDefaultConnectionOptions,
|
|
} from './mongodb';
|
|
import SERVER_STATUS from './serverStatus';
|
|
|
|
const IS_PROD = nconf.get('IS_PROD');
|
|
const MAINTENANCE_MODE = nconf.get('MAINTENANCE_MODE');
|
|
const MIN_POOL_SIZE = nconf.get('MONGODB_MIN_POOL_SIZE');
|
|
const POOL_SIZE = nconf.get('MONGODB_POOL_SIZE');
|
|
const SOCKET_TIMEOUT = nconf.get('MONGODB_SOCKET_TIMEOUT');
|
|
|
|
const mongooseOptions = getDefaultConnectionOptions();
|
|
|
|
if (MIN_POOL_SIZE) mongooseOptions.minPoolSize = Number(MIN_POOL_SIZE);
|
|
if (POOL_SIZE) mongooseOptions.maxPoolSize = Number(POOL_SIZE);
|
|
if (SOCKET_TIMEOUT) mongooseOptions.socketTimeoutMS = Number(SOCKET_TIMEOUT);
|
|
|
|
const DB_URI = nconf.get('IS_TEST') ? nconf.get('TEST_DB_URI') : nconf.get('NODE_DB_URI');
|
|
const connectionUrl = IS_PROD ? DB_URI : getDevelopmentConnectionUrl(DB_URI);
|
|
|
|
export default async function connectToMongoDB () {
|
|
// Do not connect to MongoDB when in maintenance mode
|
|
if (MAINTENANCE_MODE !== 'true') {
|
|
mongoose.connection.on('open', () => {
|
|
SERVER_STATUS.MONGODB = true;
|
|
});
|
|
mongoose.connection.on('disconnected', () => {
|
|
SERVER_STATUS.MONGODB = false;
|
|
});
|
|
|
|
return mongoose.connect(connectionUrl, mongooseOptions).then(() => {
|
|
logger.info('Connected with Mongoose.');
|
|
});
|
|
}
|
|
return null;
|
|
}
|
|
|
|
let analyticsDb;
|
|
|
|
export function getAnalyticsDatabase () {
|
|
if (!analyticsDb) {
|
|
const analyticsDbName = nconf.get('ANALYTICS_DB');
|
|
const analyticsDbUri = nconf.get('ANALYTICS_DB_URI') || connectionUrl;
|
|
analyticsDb = mongoose.createConnection(analyticsDbUri, {
|
|
...mongooseOptions,
|
|
dbName: analyticsDbName,
|
|
});
|
|
}
|
|
return analyticsDb;
|
|
}
|