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 ColumnMapTransformStream = require('../utility/ColumnMapTransformStream');
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 stream = require('stream');
@@ -66,7 +66,7 @@ async function copyStream(input, output, options) {
process.send({
msgtype: 'copyStreamError',
copyStreamError: {
message: err.message,
message: extractErrorMessage(err),
...err,
},
});
@@ -76,7 +76,7 @@ async function copyStream(input, output, options) {
msgtype: 'progress',
progressName,
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.createIfNotExists - create table if not exists
* @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)
* @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'));
return await driver.writeTable(dbhan, { schemaName, pureName }, options);
try {
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;

View File

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

View File

@@ -264,6 +264,7 @@
{previewReaderStore}
{progressHolder}
isTabActive={tabid == $activeTabId}
isRunning={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 getConcreteType = require('./getConcreteType');
const _ = require('lodash');
const logger = getLogger('tediousBulkInsertStream');
function runBulkInsertBatch(dbhan, tableName, writable, rows) {
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
var bulkLoad = dbhan.client.newBulkLoad(tableName, options, (error, rowCount) => {
const bulkLoad = dbhan.client.newBulkLoad(tableName, options, (error, rowCount) => {
if (error) reject(error);
else resolve();
});
@@ -68,7 +69,13 @@ function createTediousBulkInsertStream(driver, stream, dbhan, name, options) {
const rows = writable.buffer;
writable.buffer = [];
await runBulkInsertBatch(dbhan, fullName, writable, rows);
try {
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;