From f1ebfcaa5fc5e34d7bc30c07dbb7a6825bc31ced Mon Sep 17 00:00:00 2001 From: Pavel Tiunov Date: Wed, 17 Apr 2019 16:46:46 +0300 Subject: [PATCH] Fix env backward compatibility for MongoBI connector --- .../driver/MongoBIDriver.js | 88 +++++++++---------- 1 file changed, 42 insertions(+), 46 deletions(-) diff --git a/packages/cubejs-mongobi-driver/driver/MongoBIDriver.js b/packages/cubejs-mongobi-driver/driver/MongoBIDriver.js index 3240d74dd9caf..99e007b501ce5 100644 --- a/packages/cubejs-mongobi-driver/driver/MongoBIDriver.js +++ b/packages/cubejs-mongobi-driver/driver/MongoBIDriver.js @@ -7,18 +7,20 @@ class MongoBIDriver extends BaseDriver { constructor(config) { super(); - let ssl = {}; - - if (process.env.CUBEJS_DB_SSL) { - ssl = process.env.CUBEJS_DB_SSL; - } else { - const sslOptions = [ - { name: 'ca', value: 'CUBEJS_DB_SSL_CA' }, - { name: 'cert', value: 'CUBEJS_DB_SSL_CERT' }, - { name: 'ciphers', value: 'CUBEJS_DB_SSL_CIPHERS' }, - { name: 'passphrase', value: 'CUBEJS_DB_SSL_PASSPHRASE' }, - ]; - + let ssl; + + const sslOptions = [ + { name: 'ca', value: 'CUBEJS_DB_SSL_CA' }, + { name: 'cert', value: 'CUBEJS_DB_SSL_CERT' }, + { name: 'ciphers', value: 'CUBEJS_DB_SSL_CIPHERS' }, + { name: 'passphrase', value: 'CUBEJS_DB_SSL_PASSPHRASE' }, + ]; + + if ( + process.env.CUBEJS_DB_SSL || + process.env.CUBEJS_DB_SSL_REJECT_UNAUTHORIZED || + sslOptions.find(o => !!process.env[o.value]) + ) { ssl = sslOptions.reduce( (agg, { name, value }) => ({ ...agg, @@ -51,17 +53,17 @@ class MongoBIDriver extends BaseDriver { const conn = mysql.createConnection(this.config); const connect = promisify(conn.connect.bind(conn)); - conn.on && conn.on('error', (err) => { - conn.destroy(); - }); + if (conn.on) { + conn.on('error', () => { + conn.destroy(); + }); + } conn.execute = promisify(conn.query.bind(conn)); await connect(); return conn; }, - destroy: (connection) => { - return promisify(connection.end.bind(connection))(); - }, + destroy: (connection) => promisify(connection.end.bind(connection))(), validate: async (connection) => { try { await connection.execute('SELECT 1'); @@ -90,52 +92,46 @@ class MongoBIDriver extends BaseDriver { const promise = connectionPromise.then(conn => { cancelObj.cancel = async () => { cancelled = true; - await self.withConnection(async conn => { - const processRows = await conn.execute('SHOW PROCESSLIST'); - await Promise.all(processRows.filter(row => row.Time >= 599).map(row => { - return conn.execute(`KILL ${row.Id}`); - })); + await self.withConnection(async processConnection => { + const processRows = await processConnection.execute('SHOW PROCESSLIST'); + await Promise.all(processRows.filter(row => row.Time >= 599) + .map(row => processConnection.execute(`KILL ${row.Id}`))); }); }; return fn(conn) - .then(res => { - return this.pool.release(conn).then(() => { - if (cancelled) { - throw new Error('Query cancelled'); - } - return res; - }); - }) - .catch((err) => { - return this.pool.release(conn).then(() => { - if (cancelled) { - throw new Error('Query cancelled'); - } - throw err; - }); - }) + .then(res => this.pool.release(conn).then(() => { + if (cancelled) { + throw new Error('Query cancelled'); + } + return res; + })) + .catch((err) => this.pool.release(conn).then(() => { + if (cancelled) { + throw new Error('Query cancelled'); + } + throw err; + })); }); promise.cancel = () => cancelObj.cancel(); return promise; } async testConnection() { + // eslint-disable-next-line no-underscore-dangle const conn = await this.pool._factory.create(); try { return await conn.execute('SELECT 1'); } finally { + // eslint-disable-next-line no-underscore-dangle await this.pool._factory.destroy(conn); } } query(query, values) { const self = this; - return this.withConnection(db => { - - return db.execute(`SET time_zone = '${self.config.storeTimezone || '+00:00'}'`, []) - .then(() => db.execute(query, values)) - .then(res => res); - }); + return this.withConnection(db => db.execute(`SET time_zone = '${self.config.storeTimezone || '+00:00'}'`, []) + .then(() => db.execute(query, values)) + .then(res => res)); } async release() { @@ -144,7 +140,7 @@ class MongoBIDriver extends BaseDriver { } informationSchemaQuery() { - return `${super.informationSchemaQuery()} AND columns.table_schema = '${this.config.database}'` + return `${super.informationSchemaQuery()} AND columns.table_schema = '${this.config.database}'`; } }