diff --git a/packages/api/src/controllers/runners.js b/packages/api/src/controllers/runners.js index 114351bc4..f6a2b0042 100644 --- a/packages/api/src/controllers/runners.js +++ b/packages/api/src/controllers/runners.js @@ -12,6 +12,7 @@ const { jsonScriptToJavascript, getLogger, safeJsonParse, + pinoLogRecordToMessageRecord, } = require('dbgate-tools'); const { handleProcessCommunication } = require('../utility/processComm'); const processArgs = require('../utility/processArgs'); @@ -68,18 +69,20 @@ module.exports = { dispatchMessage(runid, message) { if (message) { - const json = safeJsonParse(message.message); + if (_.isPlainObject(message)) logger.log(message); + else logger.info(message); - if (json) logger.log(json); - else logger.info(message.message); + const toEmit = _.isPlainObject(message) + ? { + time: new Date(), + ...message, + } + : { + message, + time: new Date(), + }; - const toEmit = { - time: new Date(), - ...message, - message: json ? json.msg : message.message, - }; - - if (json && json.level >= 50) { + if (toEmit.level >= 50) { toEmit.severity = 'error'; } @@ -131,7 +134,16 @@ module.exports = { } ); const pipeDispatcher = severity => data => { - return this.dispatchMessage(runid, { severity, message: data.toString().trim() }); + const json = safeJsonParse(data, null); + + if (json) { + return this.dispatchMessage(runid, pinoLogRecordToMessageRecord(json)); + } else { + return this.dispatchMessage(runid, { + message: json == null ? data.toString().trim() : null, + severity, + }); + } }; byline(subprocess.stdout).on('data', pipeDispatcher('info')); @@ -165,7 +177,7 @@ module.exports = { start_meta: true, async start({ script }) { - const runid = crypto.randomUUID() + const runid = crypto.randomUUID(); if (script.type == 'json') { const js = jsonScriptToJavascript(script); diff --git a/packages/api/src/utility/platformInfo.js b/packages/api/src/utility/platformInfo.js index 20d52f15a..3fd34dee5 100644 --- a/packages/api/src/utility/platformInfo.js +++ b/packages/api/src/utility/platformInfo.js @@ -43,9 +43,17 @@ const platformInfo = { platform, runningInWebpack: !!process.env.WEBPACK_DEV_SERVER_URL, allowShellConnection: - (!processArgs.listenApiChild && !isNpmDist) || !!process.env.SHELL_CONNECTION || !!isElectron() || !!isDbModel, + (!processArgs.listenApiChild && !isNpmDist) || + !!process.env.SHELL_CONNECTION || + !!isElectron() || + !!isDbModel || + isDevMode, allowShellScripting: - (!processArgs.listenApiChild && !isNpmDist) || !!process.env.SHELL_SCRIPTING || !!isElectron() || !!isDbModel, + (!processArgs.listenApiChild && !isNpmDist) || + !!process.env.SHELL_SCRIPTING || + !!isElectron() || + !!isDbModel || + isDevMode, allowConnectionFromEnvVariables: !!isDbModel, defaultKeyfile: path.join(os.homedir(), '.ssh/id_rsa'), isAwsUbuntuLayout, diff --git a/packages/tools/src/DatabaseAnalyser.ts b/packages/tools/src/DatabaseAnalyser.ts index aed1faf7e..b068b0826 100644 --- a/packages/tools/src/DatabaseAnalyser.ts +++ b/packages/tools/src/DatabaseAnalyser.ts @@ -70,7 +70,7 @@ export class DatabaseAnalyser { } async fullAnalysis() { - logger.info(`Performing full analysis, DB=${dbNameLogCategory(this.dbhan.database)}, engine=${this.driver.engine}`); + logger.debug(`Performing full analysis, DB=${dbNameLogCategory(this.dbhan.database)}, engine=${this.driver.engine}`); const res = this.addEngineField(await this._runAnalysis()); // console.log('FULL ANALYSIS', res); return res; diff --git a/packages/tools/src/driverBase.ts b/packages/tools/src/driverBase.ts index c54ebd2a2..6c1391efb 100644 --- a/packages/tools/src/driverBase.ts +++ b/packages/tools/src/driverBase.ts @@ -76,7 +76,7 @@ export const driverBase = { for (const sqlItem of splitQuery(sql, this.getQuerySplitterOptions('script'))) { try { if (options?.logScriptItems) { - logger.info({ sql: getLimitedQuery(sqlItem as string) }, `Execute script item`); + logger.info({ sql: getLimitedQuery(sqlItem as string) }, 'Execute script item'); } await this.query(pool, sqlItem, { discardResult: true, ...options?.queryOptions }); } catch (err) { diff --git a/packages/tools/src/stringTools.ts b/packages/tools/src/stringTools.ts index 14cfe7290..bb7d7aa3e 100644 --- a/packages/tools/src/stringTools.ts +++ b/packages/tools/src/stringTools.ts @@ -521,3 +521,23 @@ export function getLimitedQuery(sql: string): string { } return sql; } + +export function pinoLogRecordToMessageRecord(logRecord, defaultSeverity = 'info') { + const { level, time, msg, ...rest } = logRecord; + + const levelToSeverity = { + 10: 'debug', + 20: 'debug', + 30: 'info', + 40: 'info', + 50: 'error', + 60: 'error', + }; + + return { + ...rest, + time, + message: msg, + severity: levelToSeverity[level] ?? defaultSeverity, + }; +} diff --git a/packages/web/src/query/MessageView.svelte b/packages/web/src/query/MessageView.svelte index 20d0a6e08..1703e9cba 100644 --- a/packages/web/src/query/MessageView.svelte +++ b/packages/web/src/query/MessageView.svelte @@ -23,6 +23,8 @@ $: time0 = items[0] && new Date(items[0].time).getTime(); const dispatch = createEventDispatcher(); + + // $: console.log('MESSAGE ROWS', items);
@@ -43,6 +45,7 @@ {#each items as row, index} dispatch('messageclick', row)} > @@ -99,4 +102,7 @@ tr.isError { color: var(--theme-icon-red); } + tr.isDebug { + color: var(--theme-font-3); + }