mirror of
https://github.com/DeNNiiInc/dbgate.git
synced 2026-04-22 18:06:01 +00:00
import error reporting
This commit is contained in:
@@ -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),
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
@@ -264,6 +264,7 @@
|
|||||||
{previewReaderStore}
|
{previewReaderStore}
|
||||||
{progressHolder}
|
{progressHolder}
|
||||||
isTabActive={tabid == $activeTabId}
|
isTabActive={tabid == $activeTabId}
|
||||||
|
isRunning={busy}
|
||||||
/>
|
/>
|
||||||
|
|
||||||
{#if busy}
|
{#if busy}
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
Reference in New Issue
Block a user