diff --git a/packages/api/src/controllers/runners.js b/packages/api/src/controllers/runners.js index cdaaa36b1..778058f7a 100644 --- a/packages/api/src/controllers/runners.js +++ b/packages/api/src/controllers/runners.js @@ -100,15 +100,15 @@ module.exports = { }, handle_copyStreamError(runid, { copyStreamError }) { - const { reject, exitOnStreamError } = this.requests[runid]; + const { reject, exitOnStreamError } = this.requests[runid] || {}; if (exitOnStreamError) { reject(copyStreamError); delete this.requests[runid]; } }, - handle_progress(runid, { progressName, status }) { - socket.emit(`runner-progress-${runid}`, { progressName, status }); + handle_progress(runid, { progressName, status, errorMessage }) { + socket.emit(`runner-progress-${runid}`, { progressName, status, errorMessage }); }, rejectRequest(runid, error) { diff --git a/packages/api/src/shell/copyStream.js b/packages/api/src/shell/copyStream.js index c73476d62..c6471619f 100644 --- a/packages/api/src/shell/copyStream.js +++ b/packages/api/src/shell/copyStream.js @@ -1,6 +1,8 @@ const EnsureStreamHeaderStream = require('../utility/EnsureStreamHeaderStream'); const ColumnMapTransformStream = require('../utility/ColumnMapTransformStream'); const streamPipeline = require('../utility/streamPipeline'); +const { getLogger, extractErrorLogData } = require('dbgate-tools'); +const logger = getLogger('copyStream'); /** * Copies reader to writer. Used for import, export tables and transfer data between tables @@ -52,10 +54,12 @@ async function copyStream(input, output, options) { msgtype: 'progress', progressName, status: 'error', + errorMessage: err.message, }); } - throw err; + logger.error(extractErrorLogData(err, { progressName }), 'Import/export job failed'); + // throw err; } } diff --git a/packages/web/src/impexp/ImportExportConfigurator.svelte b/packages/web/src/impexp/ImportExportConfigurator.svelte index 8889f763d..9309e98a8 100644 --- a/packages/web/src/impexp/ImportExportConfigurator.svelte +++ b/packages/web/src/impexp/ImportExportConfigurator.svelte @@ -76,6 +76,7 @@ import { compositeDbNameIfNeeded } from 'dbgate-tools'; import createRef from '../utility/createRef'; import DropDownButton from '../buttons/DropDownButton.svelte'; + import ErrorMessageModal from '../modals/ErrorMessageModal.svelte'; // export let uploadedFile = undefined; // export let openedFile = undefined; @@ -307,6 +308,14 @@ Running {:else if progressHolder[row]?.status == 'error'} Error + {#if progressHolder[row]?.errorMessage} + showModal(ErrorMessageModal, { message: progressHolder[row]?.errorMessage })} + style="cursor: pointer" + /> + {/if} {:else if progressHolder[row]?.status == 'done'} Done {:else} diff --git a/packages/web/src/query/MessageView.svelte b/packages/web/src/query/MessageView.svelte index ce6d9dae5..4d67e3c77 100644 --- a/packages/web/src/query/MessageView.svelte +++ b/packages/web/src/query/MessageView.svelte @@ -18,7 +18,7 @@ // $: console.log('MESSAGE ROWS', items); const values = writable({ - hideDebug: false, + hideDebug: true, hideInfo: false, hideError: false, });