import error reporting

This commit is contained in:
SPRINX0\prochazka
2025-03-05 12:51:44 +01:00
parent e7f63e0460
commit 75bf58359c
5 changed files with 40 additions and 10 deletions

View File

@@ -1,7 +1,7 @@
const EnsureStreamHeaderStream = require('../utility/EnsureStreamHeaderStream'); const EnsureStreamHeaderStream = require('../utility/EnsureStreamHeaderStream');
const ColumnMapTransformStream = require('../utility/ColumnMapTransformStream'); const ColumnMapTransformStream = require('../utility/ColumnMapTransformStream');
const streamPipeline = require('../utility/streamPipeline'); const streamPipeline = require('../utility/streamPipeline');
const { getLogger, extractErrorLogData, RowProgressReporter } = require('dbgate-tools'); const { getLogger, extractErrorLogData, RowProgressReporter, extractErrorMessage } = require('dbgate-tools');
const logger = getLogger('copyStream'); const logger = getLogger('copyStream');
const stream = require('stream'); const stream = require('stream');
@@ -66,7 +66,7 @@ async function copyStream(input, output, options) {
process.send({ process.send({
msgtype: 'copyStreamError', msgtype: 'copyStreamError',
copyStreamError: { copyStreamError: {
message: err.message, message: extractErrorMessage(err),
...err, ...err,
}, },
}); });
@@ -76,7 +76,7 @@ async function copyStream(input, output, options) {
msgtype: 'progress', msgtype: 'progress',
progressName, progressName,
status: 'error', status: 'error',
errorMessage: err.message, errorMessage: extractErrorMessage(err),
}); });
} }

View File

@@ -15,6 +15,7 @@ const logger = getLogger('tableWriter');
* @param {boolean} options.truncate - truncate table before insert * @param {boolean} options.truncate - truncate table before insert
* @param {boolean} options.createIfNotExists - create table if not exists * @param {boolean} options.createIfNotExists - create table if not exists
* @param {boolean} options.commitAfterInsert - commit transaction after insert * @param {boolean} options.commitAfterInsert - commit transaction after insert
* @param {string} options.progressName - name for reporting progress
* @param {any} options.targetTableStructure - target table structure (don't analyse if given) * @param {any} options.targetTableStructure - target table structure (don't analyse if given)
* @returns {Promise<writerType>} - writer object * @returns {Promise<writerType>} - writer object
*/ */
@@ -26,7 +27,20 @@ async function tableWriter({ connection, schemaName, pureName, driver, systemCon
} }
const dbhan = systemConnection || (await connectUtility(driver, connection, 'write')); const dbhan = systemConnection || (await connectUtility(driver, connection, 'write'));
try {
return await driver.writeTable(dbhan, { schemaName, pureName }, options); return await driver.writeTable(dbhan, { schemaName, pureName }, options);
} catch (err) {
if (options.progressName) {
process.send({
msgtype: 'progress',
progressName: options.progressName,
status: 'error',
errorMessage: err.message,
});
}
throw err;
}
} }
module.exports = tableWriter; module.exports = tableWriter;

View File

@@ -82,6 +82,7 @@
// export let openedFile = undefined; // export let openedFile = undefined;
export let previewReaderStore; export let previewReaderStore;
export let isTabActive; export let isTabActive;
export let isRunning = false;
const { values, setFieldValue } = getFormContext(); const { values, setFieldValue } = getFormContext();
@@ -305,7 +306,7 @@
</Link> </Link>
</svelte:fragment> </svelte:fragment>
<svelte:fragment slot="3" let:row> <svelte:fragment slot="3" let:row>
{#if progressHolder[row]?.status == 'running'} {#if progressHolder[row]?.status == 'running' && isRunning}
<FontIcon icon="icon loading" /> <FontIcon icon="icon loading" />
{#if progressHolder[row]?.writtenRowCount} {#if progressHolder[row]?.writtenRowCount}
{progressHolder[row]?.writtenRowCount} rows writtem {progressHolder[row]?.writtenRowCount} rows writtem
@@ -334,7 +335,14 @@
Done Done
{/if} {/if}
{:else} {:else}
<FontIcon icon="icon wait" /> Queued <FontIcon icon="icon wait" />
{#if progressHolder[row]?.writtenRowCount}
{progressHolder[row]?.writtenRowCount} rows writtem
{:else if progressHolder[row]?.readRowCount}
{progressHolder[row]?.readRowCount} rows read
{:else}
Queued
{/if}
{/if} {/if}
</svelte:fragment> </svelte:fragment>
</TableControl> </TableControl>

View File

@@ -264,6 +264,7 @@
{previewReaderStore} {previewReaderStore}
{progressHolder} {progressHolder}
isTabActive={tabid == $activeTabId} isTabActive={tabid == $activeTabId}
isRunning={busy}
/> />
{#if busy} {#if busy}

View File

@@ -1,14 +1,15 @@
const { createBulkInsertStreamBase } = global.DBGATE_PACKAGES['dbgate-tools']; const { createBulkInsertStreamBase, getLogger, extractErrorLogData } = global.DBGATE_PACKAGES['dbgate-tools'];
const tedious = require('tedious'); const tedious = require('tedious');
const getConcreteType = require('./getConcreteType'); const getConcreteType = require('./getConcreteType');
const _ = require('lodash'); const _ = require('lodash');
const logger = getLogger('tediousBulkInsertStream');
function runBulkInsertBatch(dbhan, tableName, writable, rows) { function runBulkInsertBatch(dbhan, tableName, writable, rows) {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
var options = { keepNulls: true }; const options = { keepNulls: true };
// instantiate - provide the table where you'll be inserting to, options and a callback // instantiate - provide the table where you'll be inserting to, options and a callback
var bulkLoad = dbhan.client.newBulkLoad(tableName, options, (error, rowCount) => { const bulkLoad = dbhan.client.newBulkLoad(tableName, options, (error, rowCount) => {
if (error) reject(error); if (error) reject(error);
else resolve(); else resolve();
}); });
@@ -68,7 +69,13 @@ function createTediousBulkInsertStream(driver, stream, dbhan, name, options) {
const rows = writable.buffer; const rows = writable.buffer;
writable.buffer = []; writable.buffer = [];
try {
await runBulkInsertBatch(dbhan, fullName, writable, rows); await runBulkInsertBatch(dbhan, fullName, writable, rows);
} catch (err) {
logger.error(extractErrorLogData(err), 'Error during bulk insert, insert stopped');
// writable.emit('error', err);
writable.destroy(err);
}
}; };
return writable; return writable;