pgserve 1.0.6 → 1.0.8
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.
- package/package.json +1 -1
- package/src/cluster.js +3 -3
- package/src/logger.js +39 -0
- package/src/restore.js +2 -2
- package/src/router.js +2 -8
- package/src/sync.js +2 -2
package/package.json
CHANGED
package/src/cluster.js
CHANGED
|
@@ -13,7 +13,7 @@ import cluster from 'cluster';
|
|
|
13
13
|
import os from 'os';
|
|
14
14
|
import net from 'net';
|
|
15
15
|
import pg from 'pg';
|
|
16
|
-
import
|
|
16
|
+
import { createLogger } from './logger.js';
|
|
17
17
|
import { PostgresManager } from './postgres.js';
|
|
18
18
|
import { extractDatabaseNameFromSocket } from './protocol.js';
|
|
19
19
|
import { EventEmitter } from 'events';
|
|
@@ -34,7 +34,7 @@ class ClusterRouter extends EventEmitter {
|
|
|
34
34
|
this.autoProvision = options.autoProvision !== false;
|
|
35
35
|
this.maxConnections = options.maxConnections || 1000;
|
|
36
36
|
|
|
37
|
-
this.logger =
|
|
37
|
+
this.logger = createLogger({ level: options.logLevel || 'info' });
|
|
38
38
|
this.adminClient = null;
|
|
39
39
|
this.server = null;
|
|
40
40
|
this.connections = new Set();
|
|
@@ -206,7 +206,7 @@ export async function startClusterServer(options = {}) {
|
|
|
206
206
|
console.log(`[pgserve] Cluster mode: ${numWorkers} workers`);
|
|
207
207
|
|
|
208
208
|
// PRIMARY: Start our embedded PostgreSQL (single instance)
|
|
209
|
-
const logger =
|
|
209
|
+
const logger = createLogger({ level: options.logLevel || 'info' });
|
|
210
210
|
const pgManager = new PostgresManager({
|
|
211
211
|
dataDir: options.baseDir,
|
|
212
212
|
port: pgPort,
|
package/src/logger.js
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared Logger Configuration
|
|
3
|
+
*
|
|
4
|
+
* Provides colorful, human-readable logging via pino-pretty.
|
|
5
|
+
* All modules should use createLogger() for consistent output.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import pino from 'pino';
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Create a configured pino logger with pretty output
|
|
12
|
+
* @param {Object} options - Logger options
|
|
13
|
+
* @param {string} options.level - Log level (default: 'info')
|
|
14
|
+
* @param {string} options.component - Component name for log context
|
|
15
|
+
* @returns {pino.Logger} Configured pino logger
|
|
16
|
+
*/
|
|
17
|
+
export function createLogger(options = {}) {
|
|
18
|
+
const level = options.level || process.env.LOG_LEVEL || 'info';
|
|
19
|
+
|
|
20
|
+
const logger = pino({
|
|
21
|
+
level,
|
|
22
|
+
transport: {
|
|
23
|
+
target: 'pino-pretty',
|
|
24
|
+
options: {
|
|
25
|
+
colorize: true,
|
|
26
|
+
ignore: 'pid,hostname', // Remove noise
|
|
27
|
+
translateTime: 'HH:MM:ss', // Short timestamp
|
|
28
|
+
singleLine: false, // Multi-line for readable objects
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
// Return child logger with component if specified
|
|
34
|
+
if (options.component) {
|
|
35
|
+
return logger.child({ component: options.component });
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
return logger;
|
|
39
|
+
}
|
package/src/restore.js
CHANGED
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
|
|
16
16
|
import pg from 'pg';
|
|
17
17
|
import { from as copyFrom, to as copyTo } from 'pg-copy-streams';
|
|
18
|
-
import
|
|
18
|
+
import { createLogger } from './logger.js';
|
|
19
19
|
|
|
20
20
|
/**
|
|
21
21
|
* Match database name against patterns (supports wildcards)
|
|
@@ -46,7 +46,7 @@ export class RestoreManager {
|
|
|
46
46
|
this.targetPort = options.targetPort; // Local embedded PostgreSQL port
|
|
47
47
|
this.targetSocketPath = options.targetSocketPath; // Unix socket path (optional)
|
|
48
48
|
|
|
49
|
-
this.logger = options.logger ||
|
|
49
|
+
this.logger = options.logger || createLogger({ level: options.logLevel || 'info', component: 'restore' });
|
|
50
50
|
|
|
51
51
|
// Connection pools (lazy initialized)
|
|
52
52
|
this.sourcePool = null;
|
package/src/router.js
CHANGED
|
@@ -19,7 +19,7 @@ import { RestoreManager } from './restore.js';
|
|
|
19
19
|
import { Dashboard } from './dashboard.js';
|
|
20
20
|
import { extractDatabaseNameFromSocket } from './protocol.js';
|
|
21
21
|
import { EventEmitter } from 'events';
|
|
22
|
-
import
|
|
22
|
+
import { createLogger } from './logger.js';
|
|
23
23
|
|
|
24
24
|
/**
|
|
25
25
|
* Multi-Tenant Router Server
|
|
@@ -39,13 +39,7 @@ export class MultiTenantRouter extends EventEmitter {
|
|
|
39
39
|
|
|
40
40
|
// Pino logger (ultra-fast structured logging)
|
|
41
41
|
const logLevel = options.logLevel || 'info';
|
|
42
|
-
this.logger = options.logger ||
|
|
43
|
-
level: logLevel,
|
|
44
|
-
transport: logLevel === 'debug' ? {
|
|
45
|
-
target: 'pino-pretty',
|
|
46
|
-
options: { colorize: true }
|
|
47
|
-
} : undefined
|
|
48
|
-
});
|
|
42
|
+
this.logger = options.logger || createLogger({ level: logLevel });
|
|
49
43
|
|
|
50
44
|
// Sync options (async replication to real PostgreSQL)
|
|
51
45
|
this.syncTo = options.syncTo || null;
|
package/src/sync.js
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
8
|
import pg from 'pg';
|
|
9
|
-
import
|
|
9
|
+
import { createLogger } from './logger.js';
|
|
10
10
|
|
|
11
11
|
/**
|
|
12
12
|
* Match database name against patterns (supports wildcards)
|
|
@@ -36,7 +36,7 @@ export class SyncManager {
|
|
|
36
36
|
this.sourcePort = options.sourcePort; // pgserve PostgreSQL port
|
|
37
37
|
this.sourceSocketPath = options.sourceSocketPath; // pgserve socket path (optional)
|
|
38
38
|
|
|
39
|
-
this.logger =
|
|
39
|
+
this.logger = createLogger({ level: options.logLevel || 'info', component: 'sync' });
|
|
40
40
|
|
|
41
41
|
this.sourcePool = null; // Connection to pgserve's PostgreSQL
|
|
42
42
|
this.targetPool = null; // Connection to real PostgreSQL
|