From e4d789238df3def52530c2acab8790b930987889 Mon Sep 17 00:00:00 2001 From: chulanovskyi Date: Mon, 7 Apr 2025 19:09:08 +0300 Subject: [PATCH 1/5] feat: implemented new plugin API method `validateConnection` --- reverse_engineering/api.js | 41 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/reverse_engineering/api.js b/reverse_engineering/api.js index f5f3ac0..cece864 100644 --- a/reverse_engineering/api.js +++ b/reverse_engineering/api.js @@ -39,6 +39,47 @@ module.exports = { } }, + async validateConnection(connectionInfo, logger, cb) { + const log = createLogger({ + title: 'Validate connection', + hiddenKeys: connectionInfo.hiddenKeys, + logger, + }); + + try { + logger.clear(); + log.info(getSystemInfo(connectionInfo.appVersion)); + log.info(connectionInfo, 'connectionInfo'); + + const docDbClientInstance = await getDocDbClientInstance({ + connectionInfo: { + ...connectionInfo, + ...parseHost(connectionInfo.host, log), + }, + logger: log, + }); + + log.info('Getting cluster information'); + + const cluster = await docDbClientInstance.getCluster(); + + if (!cluster) { + cb(null, "Cluster doesn't exist in the chosen region."); + } + + log.info('Cluster information retrieved successfully'); + + cb(); + } catch (error) { + log.error(error); + + return cb({ + message: error.message, + stack: error.stack, + }); + } + }, + async getDbCollectionsNames(connectionInfo, logger, cb, app) { const sshService = app.require('@hackolade/ssh-service'); From 9d794f759540db879b5d345aff927f44b57d2bbc Mon Sep 17 00:00:00 2001 From: chulanovskyi Date: Mon, 7 Apr 2025 19:09:32 +0300 Subject: [PATCH 2/5] chore: removed redundant feature flag --- package.json | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/package.json b/package.json index c13db21..5ab86be 100644 --- a/package.json +++ b/package.json @@ -52,8 +52,7 @@ "enableREQueryAndSortCriteria": true, "relationships": { "entityNameSeparator": "." - }, - "checkAwsCredentials": true + } } }, "description": "Hackolade plugin for Amazon DocumentDB", From 44fdcd7053a9e9da7bb515fbf57e9fb0fa773ddc Mon Sep 17 00:00:00 2001 From: chulanovskyi Date: Tue, 8 Apr 2025 10:44:57 +0300 Subject: [PATCH 3/5] fix: removed clear log statement from `getDbCollectionsNames`, as it will be called in `validateConnection` --- reverse_engineering/api.js | 2 -- 1 file changed, 2 deletions(-) diff --git a/reverse_engineering/api.js b/reverse_engineering/api.js index cece864..5a5efb9 100644 --- a/reverse_engineering/api.js +++ b/reverse_engineering/api.js @@ -90,8 +90,6 @@ module.exports = { }); try { - logger.clear(); - log.info(getSystemInfo(connectionInfo.appVersion)); log.info(connectionInfo, 'connectionInfo'); From b74853365453bec10f02f70e1d51e15bfa00ef8b Mon Sep 17 00:00:00 2001 From: chulanovskyi Date: Tue, 8 Apr 2025 15:27:05 +0300 Subject: [PATCH 4/5] fix: removed clear log statement from `getDbCollectionsNames`, as it will be called in `validateConnection` --- reverse_engineering/api.js | 3 --- 1 file changed, 3 deletions(-) diff --git a/reverse_engineering/api.js b/reverse_engineering/api.js index 5a5efb9..39b9c03 100644 --- a/reverse_engineering/api.js +++ b/reverse_engineering/api.js @@ -90,9 +90,6 @@ module.exports = { }); try { - log.info(getSystemInfo(connectionInfo.appVersion)); - log.info(connectionInfo, 'connectionInfo'); - await getDocDbClientInstance({ connectionInfo: { ...connectionInfo, From afa9d364a0c1086ec5472cf3257379a27210702e Mon Sep 17 00:00:00 2001 From: chulanovskyi Date: Tue, 8 Apr 2025 15:51:45 +0300 Subject: [PATCH 5/5] feat: explicitly catch error on connection error --- reverse_engineering/api.js | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/reverse_engineering/api.js b/reverse_engineering/api.js index 39b9c03..30da3aa 100644 --- a/reverse_engineering/api.js +++ b/reverse_engineering/api.js @@ -61,10 +61,13 @@ module.exports = { log.info('Getting cluster information'); - const cluster = await docDbClientInstance.getCluster(); - - if (!cluster) { - cb(null, "Cluster doesn't exist in the chosen region."); + try { + const cluster = await docDbClientInstance.getCluster(); + if (!cluster) { + return cb(null, "Cluster doesn't exist in the chosen region."); + } + } catch (err) { + return cb(null, err); } log.info('Cluster information retrieved successfully');