dbgate-api 5.2.1 → 5.2.2-alpha.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (43) hide show
  1. package/package.json +7 -6
  2. package/src/controllers/archive.js +4 -1
  3. package/src/controllers/auth.js +6 -3
  4. package/src/controllers/config.js +3 -1
  5. package/src/controllers/connections.js +23 -13
  6. package/src/controllers/databaseConnections.js +35 -12
  7. package/src/controllers/runners.js +21 -13
  8. package/src/controllers/scheduler.js +4 -1
  9. package/src/controllers/serverConnections.js +37 -10
  10. package/src/controllers/sessions.js +27 -10
  11. package/src/controllers/uploads.js +3 -1
  12. package/src/currentVersion.js +2 -2
  13. package/src/index.js +96 -2
  14. package/src/main.js +12 -9
  15. package/src/proc/databaseConnectionProcess.js +8 -6
  16. package/src/proc/serverConnectionProcess.js +4 -3
  17. package/src/proc/sessionProcess.js +26 -1
  18. package/src/proc/sshForwardProcess.js +5 -2
  19. package/src/shell/archiveWriter.js +4 -1
  20. package/src/shell/dumpDatabase.js +5 -2
  21. package/src/shell/executeQuery.js +5 -2
  22. package/src/shell/generateModelSql.js +30 -0
  23. package/src/shell/importDatabase.js +5 -2
  24. package/src/shell/index.js +4 -0
  25. package/src/shell/jsonArrayWriter.js +4 -1
  26. package/src/shell/jsonLinesReader.js +3 -1
  27. package/src/shell/jsonLinesWriter.js +3 -1
  28. package/src/shell/loadDatabase.js +21 -0
  29. package/src/shell/queryReader.js +4 -2
  30. package/src/shell/requirePlugin.js +3 -1
  31. package/src/shell/runScript.js +3 -1
  32. package/src/shell/sqlDataWriter.js +3 -2
  33. package/src/shell/tableReader.js +6 -5
  34. package/src/shell/tableWriter.js +4 -3
  35. package/src/utility/DatastoreProxy.js +29 -9
  36. package/src/utility/childProcessChecker.js +6 -2
  37. package/src/utility/cleanDirectory.js +2 -2
  38. package/src/utility/directories.js +22 -6
  39. package/src/utility/pipeForkLogs.js +19 -0
  40. package/src/utility/processArgs.js +2 -0
  41. package/src/utility/sshTunnel.js +23 -14
  42. package/src/utility/sshTunnelProxy.js +7 -1
  43. package/src/utility/useController.js +9 -7
package/src/index.js CHANGED
@@ -1,5 +1,96 @@
1
- const shell = require('./shell');
1
+ const { setLogger, getLogger, setLoggerName } = require('dbgate-tools');
2
2
  const processArgs = require('./utility/processArgs');
3
+ const fs = require('fs');
4
+ const moment = require('moment');
5
+ const path = require('path');
6
+ const { logsdir, setLogsFilePath, getLogsFilePath } = require('./utility/directories');
7
+ const { createLogger } = require('pinomin');
8
+
9
+ if (processArgs.startProcess) {
10
+ setLoggerName(processArgs.startProcess.replace(/Process$/, ''));
11
+ }
12
+ if (processArgs.processDisplayName) {
13
+ setLoggerName(processArgs.processDisplayName);
14
+ }
15
+
16
+ // function loadLogsContent(maxLines) {
17
+ // const text = fs.readFileSync(getLogsFilePath(), { encoding: 'utf8' });
18
+ // if (maxLines) {
19
+ // const lines = text
20
+ // .split('\n')
21
+ // .map(x => x.trim())
22
+ // .filter(x => x);
23
+ // return lines.slice(-maxLines).join('\n');
24
+ // }
25
+ // return text;
26
+ // }
27
+
28
+ function configureLogger() {
29
+ const logsFilePath = path.join(logsdir(), `${moment().format('YYYY-MM-DD-HH-mm')}-${process.pid}.ndjson`);
30
+ setLogsFilePath(logsFilePath);
31
+ setLoggerName('main');
32
+
33
+ const logger = createLogger({
34
+ base: { pid: process.pid },
35
+ targets: [
36
+ {
37
+ type: 'console',
38
+ // @ts-ignore
39
+ level: process.env.CONSOLE_LOG_LEVEL || process.env.LOG_LEVEL || 'info',
40
+ },
41
+ {
42
+ type: 'stream',
43
+ // @ts-ignore
44
+ level: process.env.FILE_LOG_LEVEL || process.env.LOG_LEVEL || 'info',
45
+ stream: fs.createWriteStream(logsFilePath, { flags: 'a' }),
46
+ },
47
+ ],
48
+ });
49
+
50
+ // const streams = [];
51
+ // if (!platformInfo.isElectron) {
52
+ // streams.push({
53
+ // stream: process.stdout,
54
+ // level: process.env.CONSOLE_LOG_LEVEL || process.env.LOG_LEVEL || 'info',
55
+ // });
56
+ // }
57
+
58
+ // streams.push({
59
+ // stream: fs.createWriteStream(logsFilePath),
60
+ // level: process.env.FILE_LOG_LEVEL || process.env.LOG_LEVEL || 'info',
61
+ // });
62
+
63
+ // let logger = pinoms({
64
+ // redact: { paths: ['hostname'], remove: true },
65
+ // streams,
66
+ // });
67
+
68
+ // // @ts-ignore
69
+ // let logger = pino({
70
+ // redact: { paths: ['hostname'], remove: true },
71
+ // transport: {
72
+ // targets: [
73
+ // {
74
+ // level: process.env.CONSOLE_LOG_LEVEL || process.env.LOG_LEVEL || 'info',
75
+ // target: 'pino/file',
76
+ // },
77
+ // {
78
+ // level: process.env.FILE_LOG_LEVEL || process.env.LOG_LEVEL || 'info',
79
+ // target: 'pino/file',
80
+ // options: { destination: logsFilePath },
81
+ // },
82
+ // ],
83
+ // },
84
+ // });
85
+
86
+ setLogger(logger);
87
+ }
88
+
89
+ if (processArgs.listenApi) {
90
+ configureLogger();
91
+ }
92
+
93
+ const shell = require('./shell');
3
94
  const dbgateTools = require('dbgate-tools');
4
95
 
5
96
  global['DBGATE_TOOLS'] = dbgateTools;
@@ -8,7 +99,7 @@ if (processArgs.startProcess) {
8
99
  const proc = require('./proc');
9
100
  const module = proc[processArgs.startProcess];
10
101
  module.start();
11
- }
102
+ }
12
103
 
13
104
  if (processArgs.listenApi) {
14
105
  const main = require('./main');
@@ -17,5 +108,8 @@ if (processArgs.listenApi) {
17
108
 
18
109
  module.exports = {
19
110
  ...shell,
111
+ getLogger,
112
+ configureLogger,
113
+ // loadLogsContent,
20
114
  getMainModule: () => require('./main'),
21
115
  };
package/src/main.js CHANGED
@@ -33,6 +33,9 @@ const platformInfo = require('./utility/platformInfo');
33
33
  const getExpressPath = require('./utility/getExpressPath');
34
34
  const { getLogins } = require('./utility/hasPermission');
35
35
  const _ = require('lodash');
36
+ const { getLogger } = require('dbgate-tools');
37
+
38
+ const logger = getLogger('main');
36
39
 
37
40
  function start() {
38
41
  // console.log('process.argv', process.argv);
@@ -60,8 +63,8 @@ function start() {
60
63
  } else if (platformInfo.isNpmDist) {
61
64
  app.use(getExpressPath('/'), express.static(path.join(__dirname, '../../dbgate-web/public')));
62
65
  } else if (process.env.DEVWEB) {
63
- console.log('__dirname', __dirname);
64
- console.log(path.join(__dirname, '../../web/public/build'));
66
+ // console.log('__dirname', __dirname);
67
+ // console.log(path.join(__dirname, '../../web/public/build'));
65
68
  app.use(getExpressPath('/'), express.static(path.join(__dirname, '../../web/public')));
66
69
  } else {
67
70
  app.get(getExpressPath('/'), (req, res) => {
@@ -109,7 +112,7 @@ function start() {
109
112
 
110
113
  if (platformInfo.isDocker) {
111
114
  const port = process.env.PORT || 3000;
112
- console.log('DbGate API listening on port (docker build)', port);
115
+ logger.info(`DbGate API listening on port ${port} (docker build)`);
113
116
  server.listen(port);
114
117
  } else if (platformInfo.isNpmDist) {
115
118
  getPort({
@@ -119,27 +122,27 @@ function start() {
119
122
  ),
120
123
  }).then(port => {
121
124
  server.listen(port, () => {
122
- console.log(`DbGate API listening on port ${port} (NPM build)`);
125
+ logger.info(`DbGate API listening on port ${port} (NPM build)`);
123
126
  });
124
127
  });
125
128
  } else if (process.env.DEVWEB) {
126
129
  const port = process.env.PORT || 3000;
127
- console.log('DbGate API & web listening on port (dev web build)', port);
130
+ logger.info(`DbGate API & web listening on port ${port} (dev web build)`);
128
131
  server.listen(port);
129
132
  } else {
130
133
  const port = process.env.PORT || 3000;
131
- console.log('DbGate API listening on port (dev API build)', port);
134
+ logger.info(`DbGate API listening on port ${port} (dev API build)`);
132
135
  server.listen(port);
133
136
  }
134
137
 
135
138
  function shutdown() {
136
- console.log('\nShutting down DbGate API server');
139
+ logger.info('\nShutting down DbGate API server');
137
140
  server.close(() => {
138
- console.log('Server shut down, terminating');
141
+ logger.info('Server shut down, terminating');
139
142
  process.exit(0);
140
143
  });
141
144
  setTimeout(() => {
142
- console.log('Server close timeout, terminating');
145
+ logger.info('Server close timeout, terminating');
143
146
  process.exit(0);
144
147
  }, 1000);
145
148
  }
@@ -1,7 +1,7 @@
1
1
  const stableStringify = require('json-stable-stringify');
2
2
  const { splitQuery } = require('dbgate-query-splitter');
3
3
  const childProcessChecker = require('../utility/childProcessChecker');
4
- const { extractBoolSettingsValue, extractIntSettingsValue } = require('dbgate-tools');
4
+ const { extractBoolSettingsValue, extractIntSettingsValue, getLogger } = require('dbgate-tools');
5
5
  const requireEngineDriver = require('../utility/requireEngineDriver');
6
6
  const connectUtility = require('../utility/connectUtility');
7
7
  const { handleProcessCommunication } = require('../utility/processComm');
@@ -9,6 +9,8 @@ const { SqlGenerator } = require('dbgate-tools');
9
9
  const generateDeploySql = require('../shell/generateDeploySql');
10
10
  const { dumpSqlSelect } = require('dbgate-sqltree');
11
11
 
12
+ const logger = getLogger('dbconnProcess');
13
+
12
14
  let systemConnection;
13
15
  let storedConnection;
14
16
  let afterConnectCallbacks = [];
@@ -269,7 +271,7 @@ async function handleSqlPreview({ msgid, objects, options }) {
269
271
  process.send({ msgtype: 'response', msgid, sql: dmp.s, isTruncated: generator.isTruncated });
270
272
  if (generator.isUnhandledException) {
271
273
  setTimeout(() => {
272
- console.log('Exiting because of unhandled exception');
274
+ getLogger.info('Exiting because of unhandled exception');
273
275
  process.exit(0);
274
276
  }, 500);
275
277
  }
@@ -336,7 +338,7 @@ function start() {
336
338
  setInterval(() => {
337
339
  const time = new Date().getTime();
338
340
  if (time - lastPing > 40 * 1000) {
339
- console.log('Database connection not alive, exiting');
341
+ logger.info('Database connection not alive, exiting');
340
342
  process.exit(0);
341
343
  }
342
344
  }, 10 * 1000);
@@ -345,9 +347,9 @@ function start() {
345
347
  if (handleProcessCommunication(message)) return;
346
348
  try {
347
349
  await handleMessage(message);
348
- } catch (e) {
349
- console.error('Error in DB connection', e);
350
- process.send({ msgtype: 'error', error: e.message });
350
+ } catch (err) {
351
+ logger.error({ err }, 'Error in DB connection');
352
+ process.send({ msgtype: 'error', error: err.message });
351
353
  }
352
354
  });
353
355
  }
@@ -1,9 +1,10 @@
1
1
  const stableStringify = require('json-stable-stringify');
2
- const { extractBoolSettingsValue, extractIntSettingsValue } = require('dbgate-tools');
2
+ const { extractBoolSettingsValue, extractIntSettingsValue, getLogger } = require('dbgate-tools');
3
3
  const childProcessChecker = require('../utility/childProcessChecker');
4
4
  const requireEngineDriver = require('../utility/requireEngineDriver');
5
5
  const connectUtility = require('../utility/connectUtility');
6
6
  const { handleProcessCommunication } = require('../utility/processComm');
7
+ const logger = getLogger('srvconnProcess');
7
8
 
8
9
  let systemConnection;
9
10
  let storedConnection;
@@ -101,7 +102,7 @@ async function handleDatabaseOp(op, { name }) {
101
102
  } else {
102
103
  const dmp = driver.createDumper();
103
104
  dmp[op](name);
104
- console.log(`RUNNING SCRIPT: ${dmp.s}`);
105
+ logger.info({ sql: dmp.s }, 'Running script');
105
106
  await driver.query(systemConnection, dmp.s);
106
107
  }
107
108
  await handleRefresh();
@@ -146,7 +147,7 @@ function start() {
146
147
  setInterval(() => {
147
148
  const time = new Date().getTime();
148
149
  if (time - lastPing > 40 * 1000) {
149
- console.log('Server connection not alive, exiting');
150
+ logger.info('Server connection not alive, exiting');
150
151
  process.exit(0);
151
152
  }
152
153
  }, 10 * 1000);
@@ -10,12 +10,16 @@ const requireEngineDriver = require('../utility/requireEngineDriver');
10
10
  const { decryptConnection } = require('../utility/crypting');
11
11
  const connectUtility = require('../utility/connectUtility');
12
12
  const { handleProcessCommunication } = require('../utility/processComm');
13
+ const { getLogger, extractIntSettingsValue, extractBoolSettingsValue } = require('dbgate-tools');
14
+
15
+ const logger = getLogger('sessionProcess');
13
16
 
14
17
  let systemConnection;
15
18
  let storedConnection;
16
19
  let afterConnectCallbacks = [];
17
20
  // let currentHandlers = [];
18
21
  let lastPing = null;
22
+ let lastActivity = null;
19
23
  let currentProfiler = null;
20
24
 
21
25
  class TableWriter {
@@ -212,6 +216,8 @@ function waitConnected() {
212
216
  }
213
217
 
214
218
  async function handleStartProfiler({ jslid }) {
219
+ lastActivity = new Date().getTime();
220
+
215
221
  await waitConnected();
216
222
  const driver = requireEngineDriver(storedConnection);
217
223
 
@@ -230,6 +236,8 @@ async function handleStartProfiler({ jslid }) {
230
236
  }
231
237
 
232
238
  async function handleStopProfiler({ jslid }) {
239
+ lastActivity = new Date().getTime();
240
+
233
241
  const driver = requireEngineDriver(storedConnection);
234
242
  currentProfiler.writer.close();
235
243
  driver.stopProfiler(systemConnection, currentProfiler);
@@ -237,6 +245,8 @@ async function handleStopProfiler({ jslid }) {
237
245
  }
238
246
 
239
247
  async function handleExecuteQuery({ sql }) {
248
+ lastActivity = new Date().getTime();
249
+
240
250
  await waitConnected();
241
251
  const driver = requireEngineDriver(storedConnection);
242
252
 
@@ -270,6 +280,8 @@ async function handleExecuteQuery({ sql }) {
270
280
  }
271
281
 
272
282
  async function handleExecuteReader({ jslid, sql, fileName }) {
283
+ lastActivity = new Date().getTime();
284
+
273
285
  await waitConnected();
274
286
 
275
287
  const driver = requireEngineDriver(storedConnection);
@@ -325,7 +337,20 @@ function start() {
325
337
  setInterval(() => {
326
338
  const time = new Date().getTime();
327
339
  if (time - lastPing > 25 * 1000) {
328
- console.log('Session not alive, exiting');
340
+ logger.info('Session not alive, exiting');
341
+ process.exit(0);
342
+ }
343
+
344
+ const useSessionTimeout =
345
+ storedConnection && storedConnection.globalSettings
346
+ ? extractBoolSettingsValue(storedConnection.globalSettings, 'session.autoClose', true)
347
+ : false;
348
+ const sessionTimeout =
349
+ storedConnection && storedConnection.globalSettings
350
+ ? extractIntSettingsValue(storedConnection.globalSettings, 'session.autoCloseTimeout', 15, 1, 120)
351
+ : 15;
352
+ if (useSessionTimeout && time - lastActivity > sessionTimeout * 60 * 1000 && !currentProfiler) {
353
+ logger.info('Session not active, exiting');
329
354
  process.exit(0);
330
355
  }
331
356
  }, 10 * 1000);
@@ -3,6 +3,9 @@ const platformInfo = require('../utility/platformInfo');
3
3
  const childProcessChecker = require('../utility/childProcessChecker');
4
4
  const { handleProcessCommunication } = require('../utility/processComm');
5
5
  const { SSHConnection } = require('../utility/SSHConnection');
6
+ const { getLogger } = require('dbgate-tools');
7
+
8
+ const logger = getLogger('sshProcess');
6
9
 
7
10
  async function getSshConnection(connection) {
8
11
  const sshConfig = {
@@ -35,8 +38,8 @@ async function handleStart({ connection, tunnelConfig }) {
35
38
  tunnelConfig,
36
39
  });
37
40
  } catch (err) {
38
- console.log('Error creating SSH tunnel connection:', err.message);
39
-
41
+ logger.error({ err }, 'Error creating SSH tunnel connection:');
42
+
40
43
  process.send({
41
44
  msgtype: 'error',
42
45
  connection,
@@ -3,11 +3,14 @@ const fs = require('fs');
3
3
  const { archivedir, resolveArchiveFolder } = require('../utility/directories');
4
4
  // const socket = require('../utility/socket');
5
5
  const jsonLinesWriter = require('./jsonLinesWriter');
6
+ const { getLogger } = require('dbgate-tools');
7
+
8
+ const logger = getLogger();
6
9
 
7
10
  function archiveWriter({ folderName, fileName }) {
8
11
  const dir = resolveArchiveFolder(folderName);
9
12
  if (!fs.existsSync(dir)) {
10
- console.log(`Creating directory ${dir}`);
13
+ logger.info(`Creating directory ${dir}`);
11
14
  fs.mkdirSync(dir);
12
15
  }
13
16
  const jsonlFile = path.join(dir, `${fileName}.jsonl`);
@@ -1,5 +1,8 @@
1
1
  const requireEngineDriver = require('../utility/requireEngineDriver');
2
2
  const connectUtility = require('../utility/connectUtility');
3
+ const { getLogger } = require('dbgate-tools');
4
+
5
+ const logger = getLogger('dumpDb');
3
6
 
4
7
  function doDump(dumper) {
5
8
  return new Promise((resolve, reject) => {
@@ -21,11 +24,11 @@ async function dumpDatabase({
21
24
  databaseName,
22
25
  schemaName,
23
26
  }) {
24
- console.log(`Dumping database`);
27
+ logger.info(`Dumping database`);
25
28
 
26
29
  if (!driver) driver = requireEngineDriver(connection);
27
30
  const pool = systemConnection || (await connectUtility(driver, connection, 'read', { forceRowsAsObjects: true }));
28
- console.log(`Connected.`);
31
+ logger.info(`Connected.`);
29
32
 
30
33
  const dumper = await driver.createBackupDumper(pool, {
31
34
  outputFile,
@@ -1,12 +1,15 @@
1
1
  const requireEngineDriver = require('../utility/requireEngineDriver');
2
2
  const connectUtility = require('../utility/connectUtility');
3
+ const { getLogger } = require('dbgate-tools');
4
+
5
+ const logger = getLogger('execQuery');
3
6
 
4
7
  async function executeQuery({ connection = undefined, systemConnection = undefined, driver = undefined, sql }) {
5
- console.log(`Execute query ${sql}`);
8
+ logger.info({ sql }, `Execute query`);
6
9
 
7
10
  if (!driver) driver = requireEngineDriver(connection);
8
11
  const pool = systemConnection || (await connectUtility(driver, connection, 'script'));
9
- console.log(`Connected.`);
12
+ logger.info(`Connected.`);
10
13
 
11
14
  await driver.script(pool, sql);
12
15
  }
@@ -0,0 +1,30 @@
1
+ const requireEngineDriver = require('../utility/requireEngineDriver');
2
+ const {
3
+ extendDatabaseInfo,
4
+ databaseInfoFromYamlModel,
5
+ getAlterDatabaseScript,
6
+ DatabaseAnalyser,
7
+ } = require('dbgate-tools');
8
+ const importDbModel = require('../utility/importDbModel');
9
+ const fs = require('fs');
10
+
11
+ async function generateModelSql({ engine, driver, modelFolder, loadedDbModel, outputFile }) {
12
+ if (!driver) driver = requireEngineDriver(engine);
13
+
14
+ const dbInfo = extendDatabaseInfo(
15
+ loadedDbModel ? databaseInfoFromYamlModel(loadedDbModel) : await importDbModel(modelFolder)
16
+ );
17
+
18
+ const { sql } = getAlterDatabaseScript(
19
+ DatabaseAnalyser.createEmptyStructure(),
20
+ dbInfo,
21
+ {},
22
+ DatabaseAnalyser.createEmptyStructure(),
23
+ dbInfo,
24
+ driver
25
+ );
26
+
27
+ fs.writeFileSync(outputFile, sql);
28
+ }
29
+
30
+ module.exports = generateModelSql;
@@ -4,6 +4,9 @@ const connectUtility = require('../utility/connectUtility');
4
4
  const { splitQueryStream } = require('dbgate-query-splitter/lib/splitQueryStream');
5
5
  const download = require('./download');
6
6
  const stream = require('stream');
7
+ const { getLogger } = require('dbgate-tools');
8
+
9
+ const logger = getLogger('importDb');
7
10
 
8
11
  class ImportStream extends stream.Transform {
9
12
  constructor(pool, driver) {
@@ -38,11 +41,11 @@ function awaitStreamEnd(stream) {
38
41
  }
39
42
 
40
43
  async function importDatabase({ connection = undefined, systemConnection = undefined, driver = undefined, inputFile }) {
41
- console.log(`Importing database`);
44
+ logger.info(`Importing database`);
42
45
 
43
46
  if (!driver) driver = requireEngineDriver(connection);
44
47
  const pool = systemConnection || (await connectUtility(driver, connection, 'write'));
45
- console.log(`Connected.`);
48
+ logger.info(`Connected.`);
46
49
 
47
50
  const downloadedFile = await download(inputFile);
48
51
 
@@ -23,6 +23,8 @@ const deployDb = require('./deployDb');
23
23
  const initializeApiEnvironment = require('./initializeApiEnvironment');
24
24
  const dumpDatabase = require('./dumpDatabase');
25
25
  const importDatabase = require('./importDatabase');
26
+ const loadDatabase = require('./loadDatabase');
27
+ const generateModelSql = require('./generateModelSql');
26
28
 
27
29
  const dbgateApi = {
28
30
  queryReader,
@@ -49,6 +51,8 @@ const dbgateApi = {
49
51
  initializeApiEnvironment,
50
52
  dumpDatabase,
51
53
  importDatabase,
54
+ loadDatabase,
55
+ generateModelSql,
52
56
  };
53
57
 
54
58
  requirePlugin.initializeDbgateApi(dbgateApi);
@@ -1,6 +1,9 @@
1
+ const { getLogger } = require('dbgate-tools');
1
2
  const fs = require('fs');
2
3
  const stream = require('stream');
3
4
 
5
+ const logger = getLogger('jsonArrayWriter');
6
+
4
7
  class StringifyStream extends stream.Transform {
5
8
  constructor() {
6
9
  super({ objectMode: true });
@@ -38,7 +41,7 @@ class StringifyStream extends stream.Transform {
38
41
  }
39
42
 
40
43
  async function jsonArrayWriter({ fileName, encoding = 'utf-8' }) {
41
- console.log(`Writing file ${fileName}`);
44
+ logger.info(`Writing file ${fileName}`);
42
45
  const stringify = new StringifyStream();
43
46
  const fileStream = fs.createWriteStream(fileName, encoding);
44
47
  stringify.pipe(fileStream);
@@ -1,6 +1,8 @@
1
1
  const fs = require('fs');
2
2
  const stream = require('stream');
3
3
  const byline = require('byline');
4
+ const { getLogger } = require('dbgate-tools');
5
+ const logger = getLogger('jsonLinesReader');
4
6
 
5
7
  class ParseStream extends stream.Transform {
6
8
  constructor({ limitRows }) {
@@ -31,7 +33,7 @@ class ParseStream extends stream.Transform {
31
33
  }
32
34
 
33
35
  async function jsonLinesReader({ fileName, encoding = 'utf-8', limitRows = undefined }) {
34
- console.log(`Reading file ${fileName}`);
36
+ logger.info(`Reading file ${fileName}`);
35
37
 
36
38
  const fileStream = fs.createReadStream(fileName, encoding);
37
39
  const liner = byline(fileStream);
@@ -1,5 +1,7 @@
1
+ const { getLogger } = require('dbgate-tools');
1
2
  const fs = require('fs');
2
3
  const stream = require('stream');
4
+ const logger = getLogger('jsonLinesWriter');
3
5
 
4
6
  class StringifyStream extends stream.Transform {
5
7
  constructor({ header }) {
@@ -21,7 +23,7 @@ class StringifyStream extends stream.Transform {
21
23
  }
22
24
 
23
25
  async function jsonLinesWriter({ fileName, encoding = 'utf-8', header = true }) {
24
- console.log(`Writing file ${fileName}`);
26
+ logger.info(`Writing file ${fileName}`);
25
27
  const stringify = new StringifyStream({ header });
26
28
  const fileStream = fs.createWriteStream(fileName, encoding);
27
29
  stringify.pipe(fileStream);
@@ -0,0 +1,21 @@
1
+ const requireEngineDriver = require('../utility/requireEngineDriver');
2
+ const connectUtility = require('../utility/connectUtility');
3
+ const { getLogger } = require('dbgate-tools');
4
+ const exportDbModel = require('../utility/exportDbModel');
5
+
6
+ const logger = getLogger('analyseDb');
7
+
8
+ async function loadDatabase({ connection = undefined, systemConnection = undefined, driver = undefined, outputDir }) {
9
+ logger.info(`Analysing database`);
10
+
11
+ if (!driver) driver = requireEngineDriver(connection);
12
+ const pool = systemConnection || (await connectUtility(driver, connection, 'read', { forceRowsAsObjects: true }));
13
+ logger.info(`Connected.`);
14
+
15
+ const dbInfo = await driver.analyseFull(pool);
16
+ logger.info(`Analyse finished`);
17
+
18
+ await exportDbModel(dbInfo, outputDir);
19
+ }
20
+
21
+ module.exports = loadDatabase;
@@ -1,5 +1,7 @@
1
1
  const requireEngineDriver = require('../utility/requireEngineDriver');
2
2
  const connectUtility = require('../utility/connectUtility');
3
+ const { getLogger } = require('dbgate-tools');
4
+ const logger = getLogger('queryReader');
3
5
 
4
6
  async function queryReader({
5
7
  connection,
@@ -14,12 +16,12 @@ async function queryReader({
14
16
  // if (!sql && !json) {
15
17
  // throw new Error('One of sql or json must be set');
16
18
  // }
17
- console.log(`Reading query ${query || sql}`);
19
+ logger.info({ sql: query || sql }, `Reading query`);
18
20
  // else console.log(`Reading query ${JSON.stringify(json)}`);
19
21
 
20
22
  const driver = requireEngineDriver(connection);
21
23
  const pool = await connectUtility(driver, connection, queryType == 'json' ? 'read' : 'script');
22
- console.log(`Connected.`);
24
+ logger.info(`Connected.`);
23
25
  const reader =
24
26
  queryType == 'json' ? await driver.readJsonQuery(pool, query) : await driver.readQuery(pool, query || sql);
25
27
  return reader;
@@ -3,6 +3,8 @@ const fs = require('fs');
3
3
  const { pluginsdir, packagedPluginsDir, getPluginBackendPath } = require('../utility/directories');
4
4
  const nativeModules = require('../nativeModules');
5
5
  const platformInfo = require('../utility/platformInfo');
6
+ const { getLogger } = require('dbgate-tools');
7
+ const logger = getLogger('requirePlugin');
6
8
 
7
9
  const loadedPlugins = {};
8
10
 
@@ -17,7 +19,7 @@ function requirePlugin(packageName, requiredPlugin = null) {
17
19
  if (requiredPlugin == null) {
18
20
  let module;
19
21
  const modulePath = getPluginBackendPath(packageName);
20
- console.log(`Loading module ${packageName} from ${modulePath}`);
22
+ logger.info(`Loading module ${packageName} from ${modulePath}`);
21
23
  try {
22
24
  // @ts-ignore
23
25
  module = __non_webpack_require__(modulePath);
@@ -1,5 +1,7 @@
1
+ const { getLogger } = require('dbgate-tools');
1
2
  const childProcessChecker = require('../utility/childProcessChecker');
2
3
  const processArgs = require('../utility/processArgs');
4
+ const logger = getLogger();
3
5
 
4
6
  async function runScript(func) {
5
7
  if (processArgs.checkParent) {
@@ -9,7 +11,7 @@ async function runScript(func) {
9
11
  await func();
10
12
  process.exit(0);
11
13
  } catch (err) {
12
- console.log(err);
14
+ logger.error('Error running script', err);
13
15
  process.exit(1);
14
16
  }
15
17
  }
@@ -1,8 +1,9 @@
1
1
  const fs = require('fs');
2
2
  const stream = require('stream');
3
3
  const path = require('path');
4
- const { driverBase } = require('dbgate-tools');
4
+ const { driverBase, getLogger } = require('dbgate-tools');
5
5
  const requireEngineDriver = require('../utility/requireEngineDriver');
6
+ const logger = getLogger('sqlDataWriter');
6
7
 
7
8
  class SqlizeStream extends stream.Transform {
8
9
  constructor({ fileName, dataName }) {
@@ -40,7 +41,7 @@ class SqlizeStream extends stream.Transform {
40
41
  }
41
42
 
42
43
  async function sqlDataWriter({ fileName, dataName, driver, encoding = 'utf-8' }) {
43
- console.log(`Writing file ${fileName}`);
44
+ logger.info(`Writing file ${fileName}`);
44
45
  const stringify = new SqlizeStream({ fileName, dataName });
45
46
  const fileStream = fs.createWriteStream(fileName, encoding);
46
47
  stringify.pipe(fileStream);