import { nativeDbConn } from '../db/mongodb'; import { Config } from '../config/types'; import Logger from './logger'; import { lessThan } from '../prelude/array'; const requiredMongoDBVersion = [3, 6]; export function checkMongoDB(config: Config, logger: Logger) { return new Promise((res, rej) => { const mongoDBLogger = logger.createSubLogger('db'); const u = config.mongodb.user.map(x => encodeURIComponent(x)).getOrElse(null); const p = config.mongodb.pass.map(x => encodeURIComponent(x)).getOrElse(null); const uri = `mongodb://${u && p ? `${u}:****@` : ''}${config.mongodb.host}:${config.mongodb.port}/${config.mongodb.db}`; mongoDBLogger.info(`Connecting to ${uri} ...`); nativeDbConn().then(db => { mongoDBLogger.succ('Connectivity confirmed'); db.admin().serverInfo().then(x => { const version = x.version as string; mongoDBLogger.info(`Version: ${version}`); if (lessThan(version.split('.').map(x => parseInt(x, 10)), requiredMongoDBVersion)) { mongoDBLogger.error(`MongoDB version is less than ${requiredMongoDBVersion.join('.')}. Please upgrade it.`); rej('outdated version'); } else { res(); } }).catch(err => { mongoDBLogger.error(`Failed to fetch server info: ${err.message}`); rej(err); }); }).catch(err => { mongoDBLogger.error(err.message); rej(err); }); }); }