mirror of
https://github.com/DeNNiiInc/dbgate.git
synced 2026-05-02 18:23:59 +00:00
better error reporting
This commit is contained in:
@@ -6,7 +6,7 @@ const { archivedir, clearArchiveLinksCache, resolveArchiveFolder } = require('..
|
|||||||
const socket = require('../utility/socket');
|
const socket = require('../utility/socket');
|
||||||
const loadFilesRecursive = require('../utility/loadFilesRecursive');
|
const loadFilesRecursive = require('../utility/loadFilesRecursive');
|
||||||
const getJslFileName = require('../utility/getJslFileName');
|
const getJslFileName = require('../utility/getJslFileName');
|
||||||
const { getLogger } = require('dbgate-tools');
|
const { getLogger, extractErrorLogData } = require('dbgate-tools');
|
||||||
const dbgateApi = require('../shell');
|
const dbgateApi = require('../shell');
|
||||||
const jsldata = require('./jsldata');
|
const jsldata = require('./jsldata');
|
||||||
const platformInfo = require('../utility/platformInfo');
|
const platformInfo = require('../utility/platformInfo');
|
||||||
@@ -74,7 +74,7 @@ module.exports = {
|
|||||||
...fileType('.matview.sql', 'matview.sql'),
|
...fileType('.matview.sql', 'matview.sql'),
|
||||||
];
|
];
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
logger.error({ err }, 'Error reading archive files');
|
logger.error(extractErrorLogData(err), 'Error reading archive files');
|
||||||
return [];
|
return [];
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
const axios = require('axios');
|
const axios = require('axios');
|
||||||
const jwt = require('jsonwebtoken');
|
const jwt = require('jsonwebtoken');
|
||||||
const getExpressPath = require('../utility/getExpressPath');
|
const getExpressPath = require('../utility/getExpressPath');
|
||||||
const { getLogger } = require('dbgate-tools');
|
const { getLogger, extractErrorLogData } = require('dbgate-tools');
|
||||||
const AD = require('activedirectory2').promiseWrapper;
|
const AD = require('activedirectory2').promiseWrapper;
|
||||||
const crypto = require('crypto');
|
const crypto = require('crypto');
|
||||||
const { getTokenSecret, getTokenLifetime } = require('../auth/authCommon');
|
const { getTokenSecret, getTokenLifetime } = require('../auth/authCommon');
|
||||||
@@ -71,7 +71,7 @@ function authMiddleware(req, res, next) {
|
|||||||
return next();
|
return next();
|
||||||
}
|
}
|
||||||
|
|
||||||
logger.error({ err }, 'Sending invalid token error');
|
logger.error(extractErrorLogData(err), 'Sending invalid token error');
|
||||||
|
|
||||||
return unauthorizedResponse(req, res, 'invalid token');
|
return unauthorizedResponse(req, res, 'invalid token');
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ const { pickSafeConnectionInfo } = require('../utility/crypting');
|
|||||||
const JsonLinesDatabase = require('../utility/JsonLinesDatabase');
|
const JsonLinesDatabase = require('../utility/JsonLinesDatabase');
|
||||||
|
|
||||||
const processArgs = require('../utility/processArgs');
|
const processArgs = require('../utility/processArgs');
|
||||||
const { safeJsonParse, getLogger } = require('dbgate-tools');
|
const { safeJsonParse, getLogger, extractErrorLogData } = require('dbgate-tools');
|
||||||
const platformInfo = require('../utility/platformInfo');
|
const platformInfo = require('../utility/platformInfo');
|
||||||
const { connectionHasPermission, testConnectionPermission } = require('../utility/hasPermission');
|
const { connectionHasPermission, testConnectionPermission } = require('../utility/hasPermission');
|
||||||
const pipeForkLogs = require('../utility/pipeForkLogs');
|
const pipeForkLogs = require('../utility/pipeForkLogs');
|
||||||
@@ -430,7 +430,7 @@ module.exports = {
|
|||||||
socket.emit('got-volatile-token', { strmid, savedConId: conid, volatileConId: volatile._id });
|
socket.emit('got-volatile-token', { strmid, savedConId: conid, volatileConId: volatile._id });
|
||||||
return { success: true };
|
return { success: true };
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
logger.error({ err }, 'Error getting DB token');
|
logger.error(extractErrorLogData(err), 'Error getting DB token');
|
||||||
return { error: err.message };
|
return { error: err.message };
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -446,7 +446,7 @@ module.exports = {
|
|||||||
const resp = await authProvider.login(null, null, { conid: volatile._id });
|
const resp = await authProvider.login(null, null, { conid: volatile._id });
|
||||||
return resp;
|
return resp;
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
logger.error({ err }, 'Error getting DB token');
|
logger.error(extractErrorLogData(err), 'Error getting DB token');
|
||||||
return { error: err.message };
|
return { error: err.message };
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ const {
|
|||||||
extendDatabaseInfo,
|
extendDatabaseInfo,
|
||||||
modelCompareDbDiffOptions,
|
modelCompareDbDiffOptions,
|
||||||
getLogger,
|
getLogger,
|
||||||
|
extractErrorLogData,
|
||||||
} = require('dbgate-tools');
|
} = require('dbgate-tools');
|
||||||
const { html, parse } = require('diff2html');
|
const { html, parse } = require('diff2html');
|
||||||
const { handleProcessCommunication } = require('../utility/processComm');
|
const { handleProcessCommunication } = require('../utility/processComm');
|
||||||
@@ -146,7 +147,7 @@ module.exports = {
|
|||||||
try {
|
try {
|
||||||
conn.subprocess.send({ msgid, ...message });
|
conn.subprocess.send({ msgid, ...message });
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
logger.error({ err }, 'Error sending request do process');
|
logger.error(extractErrorLogData(err), 'Error sending request do process');
|
||||||
this.close(conn.conid, conn.database);
|
this.close(conn.conid, conn.database);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@@ -318,7 +319,7 @@ module.exports = {
|
|||||||
try {
|
try {
|
||||||
existing.subprocess.send({ msgtype: 'ping' });
|
existing.subprocess.send({ msgtype: 'ping' });
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
logger.error({ err }, 'Error pinging DB connection');
|
logger.error(extractErrorLogData(err), 'Error pinging DB connection');
|
||||||
this.close(conid, database);
|
this.close(conid, database);
|
||||||
|
|
||||||
return {
|
return {
|
||||||
@@ -362,7 +363,7 @@ module.exports = {
|
|||||||
try {
|
try {
|
||||||
existing.subprocess.kill();
|
existing.subprocess.kill();
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
logger.error({ err }, 'Error killing subprocess');
|
logger.error(extractErrorLogData(err), 'Error killing subprocess');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
this.opened = this.opened.filter(x => x.conid != conid || x.database != database);
|
this.opened = this.opened.filter(x => x.conid != conid || x.database != database);
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ const processArgs = require('../utility/processArgs');
|
|||||||
const { testConnectionPermission } = require('../utility/hasPermission');
|
const { testConnectionPermission } = require('../utility/hasPermission');
|
||||||
const { MissingCredentialsError } = require('../utility/exceptions');
|
const { MissingCredentialsError } = require('../utility/exceptions');
|
||||||
const pipeForkLogs = require('../utility/pipeForkLogs');
|
const pipeForkLogs = require('../utility/pipeForkLogs');
|
||||||
const { getLogger } = require('dbgate-tools');
|
const { getLogger, extractErrorLogData } = require('dbgate-tools');
|
||||||
|
|
||||||
const logger = getLogger('serverConnection');
|
const logger = getLogger('serverConnection');
|
||||||
|
|
||||||
@@ -112,7 +112,7 @@ module.exports = {
|
|||||||
try {
|
try {
|
||||||
existing.subprocess.kill();
|
existing.subprocess.kill();
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
logger.error({ err }, 'Error killing subprocess');
|
logger.error(extractErrorLogData(err), 'Error killing subprocess');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
this.opened = this.opened.filter(x => x.conid != conid);
|
this.opened = this.opened.filter(x => x.conid != conid);
|
||||||
@@ -167,7 +167,7 @@ module.exports = {
|
|||||||
try {
|
try {
|
||||||
opened.subprocess.send({ msgtype: 'ping' });
|
opened.subprocess.send({ msgtype: 'ping' });
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
logger.error({ err }, 'Error pinging server connection');
|
logger.error(extractErrorLogData(err), 'Error pinging server connection');
|
||||||
this.close(conid);
|
this.close(conid);
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
@@ -217,7 +217,7 @@ module.exports = {
|
|||||||
try {
|
try {
|
||||||
conn.subprocess.send({ msgid, ...message });
|
conn.subprocess.send({ msgid, ...message });
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
logger.error({ err }, 'Error sending request');
|
logger.error(extractErrorLogData(err), 'Error sending request');
|
||||||
this.close(conn.conid);
|
this.close(conn.conid);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ const path = require('path');
|
|||||||
const { handleProcessCommunication } = require('../utility/processComm');
|
const { handleProcessCommunication } = require('../utility/processComm');
|
||||||
const processArgs = require('../utility/processArgs');
|
const processArgs = require('../utility/processArgs');
|
||||||
const { appdir } = require('../utility/directories');
|
const { appdir } = require('../utility/directories');
|
||||||
const { getLogger } = require('dbgate-tools');
|
const { getLogger, extractErrorLogData } = require('dbgate-tools');
|
||||||
const pipeForkLogs = require('../utility/pipeForkLogs');
|
const pipeForkLogs = require('../utility/pipeForkLogs');
|
||||||
const config = require('./config');
|
const config = require('./config');
|
||||||
|
|
||||||
@@ -222,7 +222,7 @@ module.exports = {
|
|||||||
try {
|
try {
|
||||||
session.subprocess.send({ msgtype: 'ping' });
|
session.subprocess.send({ msgtype: 'ping' });
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
logger.error({ err }, 'Error pinging session');
|
logger.error(extractErrorLogData(err), 'Error pinging session');
|
||||||
|
|
||||||
return {
|
return {
|
||||||
status: 'error',
|
status: 'error',
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
const crypto = require('crypto');
|
const crypto = require('crypto');
|
||||||
const path = require('path');
|
const path = require('path');
|
||||||
const { uploadsdir, getLogsFilePath } = require('../utility/directories');
|
const { uploadsdir, getLogsFilePath } = require('../utility/directories');
|
||||||
const { getLogger } = require('dbgate-tools');
|
const { getLogger, extractErrorLogData } = require('dbgate-tools');
|
||||||
const logger = getLogger('uploads');
|
const logger = getLogger('uploads');
|
||||||
const axios = require('axios');
|
const axios = require('axios');
|
||||||
const os = require('os');
|
const os = require('os');
|
||||||
@@ -110,7 +110,7 @@ module.exports = {
|
|||||||
|
|
||||||
return response.data;
|
return response.data;
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
logger.error({ err }, 'Error uploading gist');
|
logger.error(extractErrorLogData(err), 'Error uploading gist');
|
||||||
|
|
||||||
return {
|
return {
|
||||||
apiErrorMessage: err.message,
|
apiErrorMessage: err.message,
|
||||||
|
|||||||
@@ -7,6 +7,8 @@ const {
|
|||||||
getLogger,
|
getLogger,
|
||||||
isCompositeDbName,
|
isCompositeDbName,
|
||||||
dbNameLogCategory,
|
dbNameLogCategory,
|
||||||
|
extractErrorMessage,
|
||||||
|
extractErrorLogData,
|
||||||
} = require('dbgate-tools');
|
} = require('dbgate-tools');
|
||||||
const requireEngineDriver = require('../utility/requireEngineDriver');
|
const requireEngineDriver = require('../utility/requireEngineDriver');
|
||||||
const connectUtility = require('../utility/connectUtility');
|
const connectUtility = require('../utility/connectUtility');
|
||||||
@@ -34,25 +36,6 @@ function getStatusCounter() {
|
|||||||
return statusCounter;
|
return statusCounter;
|
||||||
}
|
}
|
||||||
|
|
||||||
function extractErrorMessage(err, defaultMessage) {
|
|
||||||
if (!err) {
|
|
||||||
return defaultMessage;
|
|
||||||
}
|
|
||||||
if (err.errors) {
|
|
||||||
try {
|
|
||||||
return err.errors.map(x => x.message).join('\n');
|
|
||||||
} catch (e2) {}
|
|
||||||
}
|
|
||||||
if (err.message) {
|
|
||||||
return err.message;
|
|
||||||
}
|
|
||||||
const s = `${err}`;
|
|
||||||
if (s && (!s.endsWith('Error') || s.includes(' '))) {
|
|
||||||
return s;
|
|
||||||
}
|
|
||||||
return defaultMessage;
|
|
||||||
}
|
|
||||||
|
|
||||||
async function checkedAsyncCall(promise) {
|
async function checkedAsyncCall(promise) {
|
||||||
try {
|
try {
|
||||||
const res = await promise;
|
const res = await promise;
|
||||||
@@ -261,7 +244,7 @@ async function handleDriverDataCore(msgid, callMethod, { logName }) {
|
|||||||
const result = await callMethod(driver);
|
const result = await callMethod(driver);
|
||||||
process.send({ msgtype: 'response', msgid, result });
|
process.send({ msgtype: 'response', msgid, result });
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
logger.error(err, `Error when handling message ${logName}`);
|
logger.error(extractErrorLogData(err, { logName }), `Error when handling message ${logName}`);
|
||||||
process.send({ msgtype: 'response', msgid, errorMessage: extractErrorMessage(err, 'Error executing DB data') });
|
process.send({ msgtype: 'response', msgid, errorMessage: extractErrorMessage(err, 'Error executing DB data') });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -436,7 +419,7 @@ function start() {
|
|||||||
try {
|
try {
|
||||||
await handleMessage(message);
|
await handleMessage(message);
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
logger.error({ err }, 'Error in DB connection');
|
logger.error(extractErrorLogData(err), 'Error in DB connection');
|
||||||
process.send({ msgtype: 'error', error: extractErrorMessage(err, 'Error processing message') });
|
process.send({ msgtype: 'error', error: extractErrorMessage(err, 'Error processing message') });
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ const platformInfo = require('../utility/platformInfo');
|
|||||||
const childProcessChecker = require('../utility/childProcessChecker');
|
const childProcessChecker = require('../utility/childProcessChecker');
|
||||||
const { handleProcessCommunication } = require('../utility/processComm');
|
const { handleProcessCommunication } = require('../utility/processComm');
|
||||||
const { SSHConnection } = require('../utility/SSHConnection');
|
const { SSHConnection } = require('../utility/SSHConnection');
|
||||||
const { getLogger } = require('dbgate-tools');
|
const { getLogger, extractErrorLogData } = require('dbgate-tools');
|
||||||
|
|
||||||
const logger = getLogger('sshProcess');
|
const logger = getLogger('sshProcess');
|
||||||
|
|
||||||
@@ -40,7 +40,7 @@ async function handleStart({ connection, tunnelConfig }) {
|
|||||||
tunnelConfig,
|
tunnelConfig,
|
||||||
});
|
});
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
logger.error({ err }, 'Error creating SSH tunnel connection:');
|
logger.error(extractErrorLogData(err), 'Error creating SSH tunnel connection:');
|
||||||
|
|
||||||
process.send({
|
process.send({
|
||||||
msgtype: 'error',
|
msgtype: 'error',
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
const { getLogger } = require('dbgate-tools');
|
const { getLogger, extractErrorLogData } = require('dbgate-tools');
|
||||||
const childProcessChecker = require('../utility/childProcessChecker');
|
const childProcessChecker = require('../utility/childProcessChecker');
|
||||||
const processArgs = require('../utility/processArgs');
|
const processArgs = require('../utility/processArgs');
|
||||||
const logger = getLogger();
|
const logger = getLogger();
|
||||||
@@ -11,7 +11,7 @@ async function runScript(func) {
|
|||||||
await func();
|
await func();
|
||||||
process.exit(0);
|
process.exit(0);
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
logger.error({ err }, `Error running script: ${err.message || err}`);
|
logger.error(extractErrorLogData(err), `Error running script`);
|
||||||
process.exit(1);
|
process.exit(1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ const { fork } = require('child_process');
|
|||||||
const { handleProcessCommunication } = require('./processComm');
|
const { handleProcessCommunication } = require('./processComm');
|
||||||
const processArgs = require('../utility/processArgs');
|
const processArgs = require('../utility/processArgs');
|
||||||
const pipeForkLogs = require('./pipeForkLogs');
|
const pipeForkLogs = require('./pipeForkLogs');
|
||||||
const { getLogger } = require('dbgate-tools');
|
const { getLogger, extractErrorLogData } = require('dbgate-tools');
|
||||||
const logger = getLogger('DatastoreProxy');
|
const logger = getLogger('DatastoreProxy');
|
||||||
|
|
||||||
class DatastoreProxy {
|
class DatastoreProxy {
|
||||||
@@ -73,7 +73,7 @@ class DatastoreProxy {
|
|||||||
try {
|
try {
|
||||||
this.subprocess.send({ msgtype: 'read', msgid, offset, limit });
|
this.subprocess.send({ msgtype: 'read', msgid, offset, limit });
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
logger.error({ err }, 'Error getting rows');
|
logger.error(extractErrorLogData(err), 'Error getting rows');
|
||||||
this.subprocess = null;
|
this.subprocess = null;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@@ -87,7 +87,7 @@ class DatastoreProxy {
|
|||||||
try {
|
try {
|
||||||
this.subprocess.send({ msgtype: 'notify', msgid });
|
this.subprocess.send({ msgtype: 'notify', msgid });
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
logger.error({ err }, 'Error notifying subprocess');
|
logger.error(extractErrorLogData(err), 'Error notifying subprocess');
|
||||||
this.subprocess = null;
|
this.subprocess = null;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
const { getLogger } = require('dbgate-tools');
|
const { getLogger, extractErrorLogData } = require('dbgate-tools');
|
||||||
|
|
||||||
const logger = getLogger('childProcessChecked');
|
const logger = getLogger('childProcessChecked');
|
||||||
|
|
||||||
@@ -12,7 +12,7 @@ function childProcessChecker() {
|
|||||||
// This will come once parent dies.
|
// This will come once parent dies.
|
||||||
// One way can be to check for error code ERR_IPC_CHANNEL_CLOSED
|
// One way can be to check for error code ERR_IPC_CHANNEL_CLOSED
|
||||||
// and call process.exit()
|
// and call process.exit()
|
||||||
logger.error({ err }, 'parent died');
|
logger.error(extractErrorLogData(err), 'parent died');
|
||||||
process.exit(1);
|
process.exit(1);
|
||||||
}
|
}
|
||||||
}, 1000);
|
}, 1000);
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ const AsyncLock = require('async-lock');
|
|||||||
const lock = new AsyncLock();
|
const lock = new AsyncLock();
|
||||||
const { fork } = require('child_process');
|
const { fork } = require('child_process');
|
||||||
const processArgs = require('../utility/processArgs');
|
const processArgs = require('../utility/processArgs');
|
||||||
const { getLogger } = require('dbgate-tools');
|
const { getLogger, extractErrorLogData } = require('dbgate-tools');
|
||||||
const pipeForkLogs = require('./pipeForkLogs');
|
const pipeForkLogs = require('./pipeForkLogs');
|
||||||
const logger = getLogger('sshTunnel');
|
const logger = getLogger('sshTunnel');
|
||||||
|
|
||||||
@@ -40,7 +40,7 @@ function callForwardProcess(connection, tunnelConfig, tunnelCacheKey) {
|
|||||||
tunnelConfig,
|
tunnelConfig,
|
||||||
});
|
});
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
logger.error({ err }, 'Error connecting SSH');
|
logger.error(extractErrorLogData(err), 'Error connecting SSH');
|
||||||
}
|
}
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
subprocess.on('message', resp => {
|
subprocess.on('message', resp => {
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
const crypto = require('crypto');
|
const crypto = require('crypto');
|
||||||
const { getLogger } = require('dbgate-tools');
|
const { getLogger, extractErrorLogData } = require('dbgate-tools');
|
||||||
const { getSshTunnel } = require('./sshTunnel');
|
const { getSshTunnel } = require('./sshTunnel');
|
||||||
const logger = getLogger('sshTunnelProxy');
|
const logger = getLogger('sshTunnelProxy');
|
||||||
|
|
||||||
@@ -10,7 +10,7 @@ async function handleGetSshTunnelRequest({ msgid, connection }, subprocess) {
|
|||||||
try {
|
try {
|
||||||
subprocess.send({ msgtype: 'getsshtunnel-response', msgid, response });
|
subprocess.send({ msgtype: 'getsshtunnel-response', msgid, response });
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
logger.error({ err }, 'Error sending to SSH tunnel');
|
logger.error(extractErrorLogData(err), 'Error sending to SSH tunnel');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ const _ = require('lodash');
|
|||||||
const express = require('express');
|
const express = require('express');
|
||||||
const getExpressPath = require('./getExpressPath');
|
const getExpressPath = require('./getExpressPath');
|
||||||
const { MissingCredentialsError } = require('./exceptions');
|
const { MissingCredentialsError } = require('./exceptions');
|
||||||
const { getLogger } = require('dbgate-tools');
|
const { getLogger, extractErrorLogData } = require('dbgate-tools');
|
||||||
|
|
||||||
const logger = getLogger('useController');
|
const logger = getLogger('useController');
|
||||||
/**
|
/**
|
||||||
@@ -16,7 +16,7 @@ module.exports = function useController(app, electron, route, controller) {
|
|||||||
try {
|
try {
|
||||||
controller._init();
|
controller._init();
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
logger.error({ err }, `Error initializing controller, exiting application`);
|
logger.error(extractErrorLogData(err), `Error initializing controller, exiting application`);
|
||||||
process.exit(1);
|
process.exit(1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -78,7 +78,7 @@ module.exports = function useController(app, electron, route, controller) {
|
|||||||
const data = await controller[key]({ ...req.body, ...req.query }, req);
|
const data = await controller[key]({ ...req.body, ...req.query }, req);
|
||||||
res.json(data);
|
res.json(data);
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
logger.error({ err }, `Error when processing route ${route}/${key}`);
|
logger.error(extractErrorLogData(err), `Error when processing route ${route}/${key}`);
|
||||||
if (err instanceof MissingCredentialsError) {
|
if (err instanceof MissingCredentialsError) {
|
||||||
res.json({
|
res.json({
|
||||||
missingCredentials: true,
|
missingCredentials: true,
|
||||||
|
|||||||
@@ -1,4 +1,10 @@
|
|||||||
import { createAsyncWriteStream, getLogger, runCommandOnDriver, runQueryOnDriver } from 'dbgate-tools';
|
import {
|
||||||
|
createAsyncWriteStream,
|
||||||
|
extractErrorLogData,
|
||||||
|
getLogger,
|
||||||
|
runCommandOnDriver,
|
||||||
|
runQueryOnDriver,
|
||||||
|
} from 'dbgate-tools';
|
||||||
import { DatabaseInfo, EngineDriver, ForeignKeyInfo, TableInfo } from 'dbgate-types';
|
import { DatabaseInfo, EngineDriver, ForeignKeyInfo, TableInfo } from 'dbgate-types';
|
||||||
import _pick from 'lodash/pick';
|
import _pick from 'lodash/pick';
|
||||||
import _omit from 'lodash/omit';
|
import _omit from 'lodash/omit';
|
||||||
@@ -255,7 +261,7 @@ export class DataDuplicator {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
logger.error({ err }, `Failed duplicator job, rollbacking. ${err.message}`);
|
logger.error(extractErrorLogData(err), `Failed duplicator job, rollbacking. ${err.message}`);
|
||||||
await runCommandOnDriver(this.pool, this.driver, dmp => dmp.rollbackTransaction());
|
await runCommandOnDriver(this.pool, this.driver, dmp => dmp.rollbackTransaction());
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -13,6 +13,7 @@ global.IS_DB_MODEL = true;
|
|||||||
const program = require('commander');
|
const program = require('commander');
|
||||||
const dbgateApi = require('dbgate-api');
|
const dbgateApi = require('dbgate-api');
|
||||||
const { createLogger } = require('pinomin');
|
const { createLogger } = require('pinomin');
|
||||||
|
const { extractErrorLogData } = require('dbgate-tools');
|
||||||
|
|
||||||
const logger = createLogger('dbmodel');
|
const logger = createLogger('dbmodel');
|
||||||
|
|
||||||
@@ -22,7 +23,7 @@ async function runAndExit(promise) {
|
|||||||
logger.info('Success');
|
logger.info('Success');
|
||||||
process.exit();
|
process.exit();
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
logger.error({ err }, 'Processing failed');
|
logger.error(extractErrorLogData(err), 'Processing failed');
|
||||||
process.exit(1);
|
process.exit(1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ import _compact from 'lodash/compact';
|
|||||||
import { getLogger } from './getLogger';
|
import { getLogger } from './getLogger';
|
||||||
import { type Logger } from 'pinomin';
|
import { type Logger } from 'pinomin';
|
||||||
import { dbNameLogCategory, isCompositeDbName, splitCompositeDbName } from './schemaInfoTools';
|
import { dbNameLogCategory, isCompositeDbName, splitCompositeDbName } from './schemaInfoTools';
|
||||||
|
import { extractErrorLogData } from './stringTools';
|
||||||
|
|
||||||
const logger = getLogger('dbAnalyser');
|
const logger = getLogger('dbAnalyser');
|
||||||
|
|
||||||
@@ -90,7 +91,9 @@ export class DatabaseAnalyser {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async incrementalAnalysis(structure) {
|
async incrementalAnalysis(structure) {
|
||||||
logger.info(`Performing incremental analysis, DB=${dbNameLogCategory(this.dbhan.database)}, engine=${this.driver.engine}`);
|
logger.info(
|
||||||
|
`Performing incremental analysis, DB=${dbNameLogCategory(this.dbhan.database)}, engine=${this.driver.engine}`
|
||||||
|
);
|
||||||
this.structure = structure;
|
this.structure = structure;
|
||||||
|
|
||||||
const modifications = await this.getModifications();
|
const modifications = await this.getModifications();
|
||||||
@@ -336,7 +339,7 @@ export class DatabaseAnalyser {
|
|||||||
this.logger.debug({ rows: res.rows.length, template }, `Loaded analyser query`);
|
this.logger.debug({ rows: res.rows.length, template }, `Loaded analyser query`);
|
||||||
return res;
|
return res;
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
logger.error({ err, message: err.message, template }, 'Error running analyser query');
|
logger.error(extractErrorLogData(err, { template }), 'Error running analyser query');
|
||||||
return {
|
return {
|
||||||
rows: [],
|
rows: [],
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ import _uniqBy from 'lodash/uniqBy';
|
|||||||
import { getLogger } from './getLogger';
|
import { getLogger } from './getLogger';
|
||||||
import { SqlDumper } from './SqlDumper';
|
import { SqlDumper } from './SqlDumper';
|
||||||
import { extendDatabaseInfo } from './structureTools';
|
import { extendDatabaseInfo } from './structureTools';
|
||||||
|
import { extractErrorLogData } from './stringTools';
|
||||||
|
|
||||||
const logger = getLogger('sqlGenerator');
|
const logger = getLogger('sqlGenerator');
|
||||||
|
|
||||||
@@ -85,7 +86,7 @@ export class SqlGenerator {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private handleException = error => {
|
private handleException = error => {
|
||||||
logger.error({ error }, 'Unhandled error');
|
logger.error(extractErrorLogData(error), 'Unhandled error');
|
||||||
this.isUnhandledException = true;
|
this.isUnhandledException = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -19,7 +19,8 @@ export type EditorDataType =
|
|||||||
const dateTimeStorageRegex =
|
const dateTimeStorageRegex =
|
||||||
/^([0-9]+)-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])[Tt]([01][0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9]|60)(\.[0-9]+)?(([Zz])|()|([\+|\-]([01][0-9]|2[0-3]):[0-5][0-9]))$/;
|
/^([0-9]+)-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])[Tt]([01][0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9]|60)(\.[0-9]+)?(([Zz])|()|([\+|\-]([01][0-9]|2[0-3]):[0-5][0-9]))$/;
|
||||||
|
|
||||||
const dateTimeParseRegex = /^(\d{4})-(\d{2})-(\d{2})[Tt ](\d{2}):(\d{2}):(\d{2})(\.[0-9]+)?(([Zz])|()|([\+|\-]([01][0-9]|2[0-3]):[0-5][0-9]))$/;
|
const dateTimeParseRegex =
|
||||||
|
/^(\d{4})-(\d{2})-(\d{2})[Tt ](\d{2}):(\d{2}):(\d{2})(\.[0-9]+)?(([Zz])|()|([\+|\-]([01][0-9]|2[0-3]):[0-5][0-9]))$/;
|
||||||
|
|
||||||
export function arrayToHexString(byteArray) {
|
export function arrayToHexString(byteArray) {
|
||||||
return byteArray.reduce((output, elem) => output + ('0' + elem.toString(16)).slice(-2), '').toUpperCase();
|
return byteArray.reduce((output, elem) => output + ('0' + elem.toString(16)).slice(-2), '').toUpperCase();
|
||||||
@@ -463,3 +464,31 @@ export function getConvertValueMenu(value, onSetValue, editorTypes?: DataEditorT
|
|||||||
},
|
},
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function extractErrorMessage(err, defaultMessage = 'Unknown error') {
|
||||||
|
if (!err) {
|
||||||
|
return defaultMessage;
|
||||||
|
}
|
||||||
|
if (_isArray(err.errors)) {
|
||||||
|
try {
|
||||||
|
return err.errors.map(x => x.message).join('\n');
|
||||||
|
} catch (e2) {}
|
||||||
|
}
|
||||||
|
if (err.message) {
|
||||||
|
return err.message;
|
||||||
|
}
|
||||||
|
const s = `${err}`;
|
||||||
|
if (s && (!s.endsWith('Error') || s.includes(' '))) {
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
return defaultMessage;
|
||||||
|
}
|
||||||
|
|
||||||
|
export function extractErrorLogData(err, additionalFields = {}) {
|
||||||
|
if (!err) return null;
|
||||||
|
return {
|
||||||
|
errorMessage: extractErrorMessage(err),
|
||||||
|
errorObject: err,
|
||||||
|
...additionalFields,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|||||||
@@ -3,7 +3,8 @@ const stream = require('stream');
|
|||||||
const driverBases = require('../frontend/drivers');
|
const driverBases = require('../frontend/drivers');
|
||||||
const Analyser = require('./Analyser');
|
const Analyser = require('./Analyser');
|
||||||
const mysql2 = require('mysql2');
|
const mysql2 = require('mysql2');
|
||||||
const { getLogger, createBulkInsertStreamBase, makeUniqueColumnNames } = global.DBGATE_PACKAGES['dbgate-tools'];
|
const { getLogger, createBulkInsertStreamBase, makeUniqueColumnNames, extractErrorLogData } =
|
||||||
|
global.DBGATE_PACKAGES['dbgate-tools'];
|
||||||
const { MySqlDumper } = require('antares-mysql-dumper');
|
const { MySqlDumper } = require('antares-mysql-dumper');
|
||||||
|
|
||||||
const logger = getLogger('mysqlDriver');
|
const logger = getLogger('mysqlDriver');
|
||||||
@@ -128,7 +129,7 @@ const drivers = driverBases.map(driverBase => ({
|
|||||||
};
|
};
|
||||||
|
|
||||||
const handleError = error => {
|
const handleError = error => {
|
||||||
logger.error({ error }, 'Stream error');
|
logger.error(extractErrorLogData(error), 'Stream error');
|
||||||
const { message } = error;
|
const { message } = error;
|
||||||
options.info({
|
options.info({
|
||||||
message,
|
message,
|
||||||
|
|||||||
@@ -5,8 +5,13 @@ const driverBases = require('../frontend/drivers');
|
|||||||
const Analyser = require('./Analyser');
|
const Analyser = require('./Analyser');
|
||||||
const pg = require('pg');
|
const pg = require('pg');
|
||||||
const pgCopyStreams = require('pg-copy-streams');
|
const pgCopyStreams = require('pg-copy-streams');
|
||||||
const { getLogger, createBulkInsertStreamBase, makeUniqueColumnNames, extractDbNameFromComposite } =
|
const {
|
||||||
global.DBGATE_PACKAGES['dbgate-tools'];
|
getLogger,
|
||||||
|
createBulkInsertStreamBase,
|
||||||
|
makeUniqueColumnNames,
|
||||||
|
extractDbNameFromComposite,
|
||||||
|
extractErrorLogData,
|
||||||
|
} = global.DBGATE_PACKAGES['dbgate-tools'];
|
||||||
|
|
||||||
const logger = getLogger('postreDriver');
|
const logger = getLogger('postreDriver');
|
||||||
|
|
||||||
@@ -155,7 +160,7 @@ const drivers = driverBases.map(driverBase => ({
|
|||||||
});
|
});
|
||||||
|
|
||||||
query.on('error', error => {
|
query.on('error', error => {
|
||||||
logger.error({ error }, 'Stream error');
|
logger.error(extractErrorLogData(error), 'Stream error');
|
||||||
const { message, position, procName } = error;
|
const { message, position, procName } = error;
|
||||||
let line = null;
|
let line = null;
|
||||||
if (position) {
|
if (position) {
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ const stream = require('stream');
|
|||||||
const driverBase = require('../frontend/driver');
|
const driverBase = require('../frontend/driver');
|
||||||
const Analyser = require('./Analyser');
|
const Analyser = require('./Analyser');
|
||||||
const { splitQuery, sqliteSplitterOptions } = require('dbgate-query-splitter');
|
const { splitQuery, sqliteSplitterOptions } = require('dbgate-query-splitter');
|
||||||
const { getLogger, createBulkInsertStreamBase, makeUniqueColumnNames } = global.DBGATE_PACKAGES['dbgate-tools'];
|
const { getLogger, createBulkInsertStreamBase, extractErrorLogData } = global.DBGATE_PACKAGES['dbgate-tools'];
|
||||||
|
|
||||||
const logger = getLogger('sqliteDriver');
|
const logger = getLogger('sqliteDriver');
|
||||||
|
|
||||||
@@ -116,7 +116,7 @@ const driver = {
|
|||||||
try {
|
try {
|
||||||
inTransaction();
|
inTransaction();
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
logger.error({ error }, 'Stream error');
|
logger.error(extractErrorLogData(error), 'Stream error');
|
||||||
const { message, procName } = error;
|
const { message, procName } = error;
|
||||||
options.info({
|
options.info({
|
||||||
message,
|
message,
|
||||||
|
|||||||
Reference in New Issue
Block a user