mirror of
https://github.com/DeNNiiInc/dbgate.git
synced 2026-04-21 01:16:01 +00:00
pipe logs from forks into pino logger
This commit is contained in:
@@ -15,6 +15,7 @@ const processArgs = require('../utility/processArgs');
|
|||||||
const { safeJsonParse, getLogger } = require('dbgate-tools');
|
const { safeJsonParse, getLogger } = 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 logger = getLogger('connections');
|
const logger = getLogger('connections');
|
||||||
|
|
||||||
@@ -205,13 +206,20 @@ module.exports = {
|
|||||||
|
|
||||||
test_meta: true,
|
test_meta: true,
|
||||||
test(connection) {
|
test(connection) {
|
||||||
const subprocess = fork(global['API_PACKAGE'] || process.argv[1], [
|
const subprocess = fork(
|
||||||
|
global['API_PACKAGE'] || process.argv[1],
|
||||||
|
[
|
||||||
'--is-forked-api',
|
'--is-forked-api',
|
||||||
'--start-process',
|
'--start-process',
|
||||||
'connectProcess',
|
'connectProcess',
|
||||||
...processArgs.getPassArgs(),
|
...processArgs.getPassArgs(),
|
||||||
// ...process.argv.slice(3),
|
// ...process.argv.slice(3),
|
||||||
]);
|
],
|
||||||
|
{
|
||||||
|
stdio: ['ignore', 'pipe', 'pipe', 'ipc'],
|
||||||
|
}
|
||||||
|
);
|
||||||
|
pipeForkLogs(subprocess);
|
||||||
subprocess.send(connection);
|
subprocess.send(connection);
|
||||||
return new Promise(resolve => {
|
return new Promise(resolve => {
|
||||||
subprocess.on('message', resp => {
|
subprocess.on('message', resp => {
|
||||||
|
|||||||
@@ -29,6 +29,7 @@ const diff2htmlPage = require('../utility/diff2htmlPage');
|
|||||||
const processArgs = require('../utility/processArgs');
|
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 logger = getLogger('databaseConnections');
|
const logger = getLogger('databaseConnections');
|
||||||
|
|
||||||
@@ -88,13 +89,20 @@ module.exports = {
|
|||||||
if (connection.passwordMode == 'askPassword' || connection.passwordMode == 'askUser') {
|
if (connection.passwordMode == 'askPassword' || connection.passwordMode == 'askUser') {
|
||||||
throw new MissingCredentialsError({ conid, passwordMode: connection.passwordMode });
|
throw new MissingCredentialsError({ conid, passwordMode: connection.passwordMode });
|
||||||
}
|
}
|
||||||
const subprocess = fork(global['API_PACKAGE'] || process.argv[1], [
|
const subprocess = fork(
|
||||||
|
global['API_PACKAGE'] || process.argv[1],
|
||||||
|
[
|
||||||
'--is-forked-api',
|
'--is-forked-api',
|
||||||
'--start-process',
|
'--start-process',
|
||||||
'databaseConnectionProcess',
|
'databaseConnectionProcess',
|
||||||
...processArgs.getPassArgs(),
|
...processArgs.getPassArgs(),
|
||||||
// ...process.argv.slice(3),
|
// ...process.argv.slice(3),
|
||||||
]);
|
],
|
||||||
|
{
|
||||||
|
stdio: ['ignore', 'pipe', 'pipe', 'ipc'],
|
||||||
|
}
|
||||||
|
);
|
||||||
|
pipeForkLogs(subprocess);
|
||||||
const lastClosed = this.closed[`${conid}/${database}`];
|
const lastClosed = this.closed[`${conid}/${database}`];
|
||||||
const newOpened = {
|
const newOpened = {
|
||||||
conid,
|
conid,
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ const config = require('./config');
|
|||||||
const processArgs = require('../utility/processArgs');
|
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');
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
opened: [],
|
opened: [],
|
||||||
@@ -53,13 +54,20 @@ module.exports = {
|
|||||||
if (connection.passwordMode == 'askPassword' || connection.passwordMode == 'askUser') {
|
if (connection.passwordMode == 'askPassword' || connection.passwordMode == 'askUser') {
|
||||||
throw new MissingCredentialsError({ conid, passwordMode: connection.passwordMode });
|
throw new MissingCredentialsError({ conid, passwordMode: connection.passwordMode });
|
||||||
}
|
}
|
||||||
const subprocess = fork(global['API_PACKAGE'] || process.argv[1], [
|
const subprocess = fork(
|
||||||
|
global['API_PACKAGE'] || process.argv[1],
|
||||||
|
[
|
||||||
'--is-forked-api',
|
'--is-forked-api',
|
||||||
'--start-process',
|
'--start-process',
|
||||||
'serverConnectionProcess',
|
'serverConnectionProcess',
|
||||||
...processArgs.getPassArgs(),
|
...processArgs.getPassArgs(),
|
||||||
// ...process.argv.slice(3),
|
// ...process.argv.slice(3),
|
||||||
]);
|
],
|
||||||
|
{
|
||||||
|
stdio: ['ignore', 'pipe', 'pipe', 'ipc'],
|
||||||
|
}
|
||||||
|
);
|
||||||
|
pipeForkLogs(subprocess);
|
||||||
const newOpened = {
|
const newOpened = {
|
||||||
conid,
|
conid,
|
||||||
subprocess,
|
subprocess,
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ 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 } = require('dbgate-tools');
|
||||||
|
const pipeForkLogs = require('../utility/pipeForkLogs');
|
||||||
|
|
||||||
const logger = getLogger('sessions');
|
const logger = getLogger('sessions');
|
||||||
|
|
||||||
@@ -85,13 +86,20 @@ module.exports = {
|
|||||||
async create({ conid, database }) {
|
async create({ conid, database }) {
|
||||||
const sesid = uuidv1();
|
const sesid = uuidv1();
|
||||||
const connection = await connections.getCore({ conid });
|
const connection = await connections.getCore({ conid });
|
||||||
const subprocess = fork(global['API_PACKAGE'] || process.argv[1], [
|
const subprocess = fork(
|
||||||
|
global['API_PACKAGE'] || process.argv[1],
|
||||||
|
[
|
||||||
'--is-forked-api',
|
'--is-forked-api',
|
||||||
'--start-process',
|
'--start-process',
|
||||||
'sessionProcess',
|
'sessionProcess',
|
||||||
...processArgs.getPassArgs(),
|
...processArgs.getPassArgs(),
|
||||||
// ...process.argv.slice(3),
|
// ...process.argv.slice(3),
|
||||||
]);
|
],
|
||||||
|
{
|
||||||
|
stdio: ['ignore', 'pipe', 'pipe', 'ipc'],
|
||||||
|
}
|
||||||
|
);
|
||||||
|
pipeForkLogs(subprocess);
|
||||||
const newOpened = {
|
const newOpened = {
|
||||||
conid,
|
conid,
|
||||||
database,
|
database,
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ const { fork } = require('child_process');
|
|||||||
const uuidv1 = require('uuid/v1');
|
const uuidv1 = require('uuid/v1');
|
||||||
const { handleProcessCommunication } = require('./processComm');
|
const { handleProcessCommunication } = require('./processComm');
|
||||||
const processArgs = require('../utility/processArgs');
|
const processArgs = require('../utility/processArgs');
|
||||||
|
const pipeForkLogs = require('./pipeForkLogs');
|
||||||
|
|
||||||
class DatastoreProxy {
|
class DatastoreProxy {
|
||||||
constructor(file) {
|
constructor(file) {
|
||||||
@@ -30,13 +31,20 @@ class DatastoreProxy {
|
|||||||
|
|
||||||
async ensureSubprocess() {
|
async ensureSubprocess() {
|
||||||
if (!this.subprocess) {
|
if (!this.subprocess) {
|
||||||
this.subprocess = fork(global['API_PACKAGE'] || process.argv[1], [
|
this.subprocess = fork(
|
||||||
|
global['API_PACKAGE'] || process.argv[1],
|
||||||
|
[
|
||||||
'--is-forked-api',
|
'--is-forked-api',
|
||||||
'--start-process',
|
'--start-process',
|
||||||
'jslDatastoreProcess',
|
'jslDatastoreProcess',
|
||||||
...processArgs.getPassArgs(),
|
...processArgs.getPassArgs(),
|
||||||
// ...process.argv.slice(3),
|
// ...process.argv.slice(3),
|
||||||
]);
|
],
|
||||||
|
{
|
||||||
|
stdio: ['ignore', 'pipe', 'pipe', 'ipc'],
|
||||||
|
}
|
||||||
|
);
|
||||||
|
pipeForkLogs(this.subprocess);
|
||||||
|
|
||||||
this.subprocess.on('message', message => {
|
this.subprocess.on('message', message => {
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
|
|||||||
15
packages/api/src/utility/pipeForkLogs.js
Normal file
15
packages/api/src/utility/pipeForkLogs.js
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
const byline = require('byline');
|
||||||
|
const { safeJsonParse, getLogger } = require('dbgate-tools');
|
||||||
|
const logger = getLogger();
|
||||||
|
|
||||||
|
const logDispatcher = method => data => {
|
||||||
|
const json = safeJsonParse(data.toString());
|
||||||
|
logger[method](json || data.toString());
|
||||||
|
};
|
||||||
|
|
||||||
|
function pipeForkLogs(subprocess) {
|
||||||
|
byline(subprocess.stdout).on('data', logDispatcher('info'));
|
||||||
|
byline(subprocess.stderr).on('data', logDispatcher('error'));
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = pipeForkLogs;
|
||||||
@@ -6,6 +6,7 @@ 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 } = require('dbgate-tools');
|
||||||
|
const pipeForkLogs = require('./pipeForkLogs');
|
||||||
const logger = getLogger('sshTunnel');
|
const logger = getLogger('sshTunnel');
|
||||||
|
|
||||||
const sshTunnelCache = {};
|
const sshTunnelCache = {};
|
||||||
@@ -23,12 +24,14 @@ const CONNECTION_FIELDS = [
|
|||||||
const TUNNEL_FIELDS = [...CONNECTION_FIELDS, 'server', 'port'];
|
const TUNNEL_FIELDS = [...CONNECTION_FIELDS, 'server', 'port'];
|
||||||
|
|
||||||
function callForwardProcess(connection, tunnelConfig, tunnelCacheKey) {
|
function callForwardProcess(connection, tunnelConfig, tunnelCacheKey) {
|
||||||
let subprocess = fork(global['API_PACKAGE'] || process.argv[1], [
|
let subprocess = fork(
|
||||||
'--is-forked-api',
|
global['API_PACKAGE'] || process.argv[1],
|
||||||
'--start-process',
|
['--is-forked-api', '--start-process', 'sshForwardProcess', ...processArgs.getPassArgs()],
|
||||||
'sshForwardProcess',
|
{
|
||||||
...processArgs.getPassArgs(),
|
stdio: ['ignore', 'pipe', 'pipe', 'ipc'],
|
||||||
]);
|
}
|
||||||
|
);
|
||||||
|
pipeForkLogs(subprocess);
|
||||||
|
|
||||||
subprocess.send({
|
subprocess.send({
|
||||||
msgtype: 'connect',
|
msgtype: 'connect',
|
||||||
|
|||||||
Reference in New Issue
Block a user