diff --git a/packages/api/src/proc/connectProcess.js b/packages/api/src/proc/connectProcess.js index d6724e148..5e6041441 100644 --- a/packages/api/src/proc/connectProcess.js +++ b/packages/api/src/proc/connectProcess.js @@ -2,6 +2,25 @@ const childProcessChecker = require('../utility/childProcessChecker'); const requireEngineDriver = require('../utility/requireEngineDriver'); const connectUtility = require('../utility/connectUtility'); const { handleProcessCommunication } = require('../utility/processComm'); +const _ = require('lodash'); + +function pickSafeConnectionInfo(connection) { + return _.mapValues(connection, (v, k) => { + if (k == 'engine' || k == 'port' || k == 'authType' || k == 'sshMode' || k == 'passwordMode') return v; + if (v === null || v === true || v === false) return v; + if (v) return '***'; + return undefined; + }); +} + +const formatErrorDetail = (e, connection) => `${e.stack} + +Error JSON: ${JSON.stringify(e, undefined, 2)} + +Connection: ${JSON.stringify(pickSafeConnectionInfo(connection), undefined, 2)} + +Platform: ${process.platform} +`; function start() { childProcessChecker(); @@ -14,7 +33,11 @@ function start() { process.send({ msgtype: 'connected', ...res }); } catch (e) { console.error(e); - process.send({ msgtype: 'error', error: e.message }); + process.send({ + msgtype: 'error', + error: e.message, + detail: formatErrorDetail(e, connection), + }); } }); } diff --git a/packages/web/src/modals/ConnectionModal.svelte b/packages/web/src/modals/ConnectionModal.svelte index a8231c43c..db1351d49 100644 --- a/packages/web/src/modals/ConnectionModal.svelte +++ b/packages/web/src/modals/ConnectionModal.svelte @@ -12,8 +12,10 @@ import FormFieldTemplateLarge from '../forms/FormFieldTemplateLarge.svelte'; import ModalBase from './ModalBase.svelte'; - import { closeCurrentModal, closeModal } from './modalTools'; + import { closeCurrentModal, closeModal, showModal } from './modalTools'; import createRef from '../utility/createRef'; + import Link from '../elements/Link.svelte'; + import ErrorMessageModal from './ErrorMessageModal.svelte'; export let connection; @@ -92,6 +94,16 @@
Connect failed: {sqlConnectResult.error} + + showModal(ErrorMessageModal, { + message: sqlConnectResult.detail, + showAsCode: true, + title: 'Database connection error', + })} + > + Show detail +
{/if} {#if isTesting} diff --git a/packages/web/src/modals/ErrorMessageModal.svelte b/packages/web/src/modals/ErrorMessageModal.svelte index 4b48d2408..fbc7dfc8b 100644 --- a/packages/web/src/modals/ErrorMessageModal.svelte +++ b/packages/web/src/modals/ErrorMessageModal.svelte @@ -9,18 +9,25 @@ export let title = 'Error'; export let message; + export let showAsCode = false;
{title}
-
-
- + {#if showAsCode} +
{message}
+ {:else} +
+
+ +
+
+ {message} +
- {message} -
+ {/if}
@@ -38,4 +45,9 @@ margin-right: 10px; font-size: 20pt; } + + pre { + max-height: calc(100vh - 300px); + overflow-y: auto; + }