diff --git a/reverse_engineering/api.js b/reverse_engineering/api.js index cfd2bfc..7112827 100644 --- a/reverse_engineering/api.js +++ b/reverse_engineering/api.js @@ -19,9 +19,21 @@ module.exports = { () => { logger.log('info', 'Successfully connected to the database instance', 'Connection'); - neo4j.getRawDbVersion().then(dbVersion => { - logger.log('info', `Database version ${dbVersion}`); - }); + neo4j + .getRawDbVersion() + .then(dbVersion => { + logger.log('info', `Database version ${dbVersion}`); + }) + .catch(error => { + logger.log( + 'warn', + { + message: error.step || 'Could not retrieve Database version at connect phase', + error: prepareError(error), + }, + 'Connection', + ); + }); cb(); }, @@ -143,7 +155,7 @@ module.exports = { logger.log('info', '', 'Start Reverse Engineering Neo4j'); const isMultiDb = await neo4j.supportsMultiDb(); - const dbVersion = await neo4j.getDbVersion(); + const dbVersion = await neo4j.getDbVersion(logger); logger.log('info', `Version: ${dbVersion}`, 'Database info'); const modelProps = { dbVersion, diff --git a/reverse_engineering/neo4jHelper.js b/reverse_engineering/neo4jHelper.js index 756c6a8..e324ef8 100644 --- a/reverse_engineering/neo4jHelper.js +++ b/reverse_engineering/neo4jHelper.js @@ -313,13 +313,26 @@ const getSSLConfig = info => { }; const getRawDbVersion = async () => { - const versionResponse = await execute( - 'call dbms.components() yield versions unwind versions as version return version', - ); - return _.head(versionResponse)?.version; + try { + const versionResponse = await execute( + 'call dbms.components() yield versions unwind versions as version return version', + ); + const version = _.head(versionResponse)?.version; + + if (!version || typeof version !== 'string') { + throw new Error( + `Expected Neo4j version to be a string, but got "${typeof version}" with value: ${JSON.stringify(version)}`, + ); + } + + return version; + } catch (error) { + error.step = 'Error in getRawDbVersion detecting Neo4j database version.'; + throw error; + } }; -const getDbVersion = async () => { +const getDbVersion = async logger => { try { const version = await getRawDbVersion(); const [major, minor] = version.split('.'); @@ -337,6 +350,15 @@ const getDbVersion = async () => { } return '3.x'; } catch (err) { + const errorObj = err instanceof Error ? { message: err.message, stack: err.stack, step: err.step } : err; + logger?.log( + 'warn', + { + message: 'Error in getDbVersion', + error: errorObj, + }, + 'Database info', + ); return '3.x'; } };