@goatlab/node-backend 1.4.0 → 1.5.0
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/dist/cache/RedisConnectionPool.d.ts +6 -0
- package/dist/cache/RedisConnectionPool.js +18 -2
- package/dist/cache/RedisConnectionPool.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/dist/server/bootstraps/ExpressTrpcAppConfig.d.ts +6 -1
- package/dist/server/bootstraps/ExpressTrpcAppConfig.js +4 -0
- package/dist/server/bootstraps/ExpressTrpcAppConfig.js.map +1 -1
- package/dist/server/bootstraps/getExpressTrpcApp.js +2 -2
- package/dist/server/bootstraps/getExpressTrpcApp.js.map +1 -1
- package/dist/server/middleware/logger/cloudRun.logger.d.ts +18 -2
- package/dist/server/middleware/logger/cloudRun.logger.js +120 -20
- package/dist/server/middleware/logger/cloudRun.logger.js.map +1 -1
- package/dist/server/middleware/logs.middleware.d.ts +20 -1
- package/dist/server/middleware/logs.middleware.js +56 -12
- package/dist/server/middleware/logs.middleware.js.map +1 -1
- package/dist/server/middleware/memoryMonitor.middleware.d.ts +1 -0
- package/dist/server/middleware/memoryMonitor.middleware.js +23 -4
- package/dist/server/middleware/memoryMonitor.middleware.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +3 -4
|
@@ -25,16 +25,17 @@ const httpResponseTimeColor = (msTime) => {
|
|
|
25
25
|
return (0, colors_1.red)(js_utils_1.Time.ms(msTime));
|
|
26
26
|
};
|
|
27
27
|
exports.httpResponseTimeColor = httpResponseTimeColor;
|
|
28
|
-
// Utility function to log based on status code
|
|
29
|
-
const logMessage = (message, statusCode, logger) => {
|
|
28
|
+
// Utility function to log based on status code with optional structured metadata
|
|
29
|
+
const logMessage = (message, statusCode, logger, meta) => {
|
|
30
|
+
const args = meta ? [message, meta] : [message];
|
|
30
31
|
if (statusCode >= 500) {
|
|
31
|
-
logger.error(
|
|
32
|
+
logger.error(...args);
|
|
32
33
|
}
|
|
33
34
|
else if (statusCode >= 400) {
|
|
34
|
-
logger.warn(
|
|
35
|
+
logger.warn(...args);
|
|
35
36
|
}
|
|
36
37
|
else {
|
|
37
|
-
logger.
|
|
38
|
+
logger.log(...args);
|
|
38
39
|
}
|
|
39
40
|
};
|
|
40
41
|
const getActualRequestDurationInMilliseconds = (start) => {
|
|
@@ -50,7 +51,14 @@ const formatRequestLog = ({ prefix, method, url, statusCode, statusMessage, dura
|
|
|
50
51
|
const prefixStr = prefix ? `[${(0, colors_1.cyan)(prefix)}] ` : '';
|
|
51
52
|
return `${prefixStr}${(0, colors_1.magenta)(method)}: ${(0, colors_1.bgBlack)(url)} | Response: ${(0, exports.httpResponseCodeColor)(statusCode)} (${statusMessage}) ${(0, exports.httpResponseTimeColor)(durationInMilliseconds)}`;
|
|
52
53
|
};
|
|
53
|
-
function logBatchRequests({ prefix, date, method, url, statusCode, statusMessage, durationInMilliseconds, logger, }) {
|
|
54
|
+
function logBatchRequests({ prefix, date, method, url, statusCode, statusMessage, durationInMilliseconds, logger, traceMeta, }) {
|
|
55
|
+
const baseMeta = {
|
|
56
|
+
...(prefix && { tenantId: prefix }),
|
|
57
|
+
httpMethod: method,
|
|
58
|
+
httpStatus: statusCode,
|
|
59
|
+
durationMs: Math.round(durationInMilliseconds),
|
|
60
|
+
...traceMeta,
|
|
61
|
+
};
|
|
54
62
|
const decodedUrl = decodeURIComponent(url);
|
|
55
63
|
const urlParts = decodedUrl.split('?');
|
|
56
64
|
const baseUrl = urlParts[0] || '';
|
|
@@ -64,7 +72,7 @@ function logBatchRequests({ prefix, date, method, url, statusCode, statusMessage
|
|
|
64
72
|
const endpointString = baseUrl.split('/trpc/')[1];
|
|
65
73
|
const endpoints = endpointString ? endpointString.split(',') : [];
|
|
66
74
|
if (endpoints.length > 1) {
|
|
67
|
-
logger.
|
|
75
|
+
logger.log(`Batch Requests: ${(0, colors_1.yellow)(`${endpoints.length} endpoints`)} \n\n${method.toUpperCase()} ${baseUrl} \n\n`);
|
|
68
76
|
}
|
|
69
77
|
endpoints.forEach((endpoint, index) => {
|
|
70
78
|
const params = parsedInput[index];
|
|
@@ -76,7 +84,11 @@ function logBatchRequests({ prefix, date, method, url, statusCode, statusMessage
|
|
|
76
84
|
statusMessage,
|
|
77
85
|
durationInMilliseconds,
|
|
78
86
|
})} | ${(0, colors_1.yellow)('Batch Params')}: ${JSON.stringify(params, null, 2)}`;
|
|
79
|
-
logMessage(message, statusCode, logger
|
|
87
|
+
logMessage(message, statusCode, logger, {
|
|
88
|
+
...baseMeta,
|
|
89
|
+
url: endpoint,
|
|
90
|
+
trpcPath: endpoint,
|
|
91
|
+
});
|
|
80
92
|
});
|
|
81
93
|
}
|
|
82
94
|
catch (err) {
|
|
@@ -84,15 +96,21 @@ function logBatchRequests({ prefix, date, method, url, statusCode, statusMessage
|
|
|
84
96
|
}
|
|
85
97
|
}
|
|
86
98
|
else {
|
|
99
|
+
const cleanUrl = `${baseUrl}?${queryParams.toString()}`;
|
|
87
100
|
const message = formatRequestLog({
|
|
88
101
|
prefix,
|
|
89
102
|
method,
|
|
90
|
-
url:
|
|
103
|
+
url: cleanUrl,
|
|
91
104
|
statusCode,
|
|
92
105
|
statusMessage,
|
|
93
106
|
durationInMilliseconds,
|
|
94
107
|
});
|
|
95
|
-
|
|
108
|
+
const trpcPath = baseUrl.split('/trpc/')[1];
|
|
109
|
+
logMessage(message, statusCode, logger, {
|
|
110
|
+
...baseMeta,
|
|
111
|
+
url: cleanUrl,
|
|
112
|
+
...(trpcPath && { trpcPath }),
|
|
113
|
+
});
|
|
96
114
|
}
|
|
97
115
|
}
|
|
98
116
|
else {
|
|
@@ -104,17 +122,42 @@ function logBatchRequests({ prefix, date, method, url, statusCode, statusMessage
|
|
|
104
122
|
statusMessage,
|
|
105
123
|
durationInMilliseconds,
|
|
106
124
|
});
|
|
107
|
-
|
|
125
|
+
const trpcPath = baseUrl.split('/trpc/')[1];
|
|
126
|
+
logMessage(message, statusCode, logger, {
|
|
127
|
+
...baseMeta,
|
|
128
|
+
url: baseUrl,
|
|
129
|
+
...(trpcPath && { trpcPath }),
|
|
130
|
+
});
|
|
108
131
|
}
|
|
109
132
|
}
|
|
110
|
-
const expressRequestLogger = (request, response, next, logger, getLogPrefix) => {
|
|
133
|
+
const expressRequestLogger = (request, response, next, logger, getLogPrefix, options) => {
|
|
111
134
|
const formattedDate = (0, exports.getCurrentTimeFormatted)();
|
|
112
135
|
const start = process.hrtime();
|
|
113
136
|
response.on('finish', () => {
|
|
114
137
|
const { method, originalUrl } = request;
|
|
115
138
|
const { statusCode, statusMessage } = response;
|
|
116
139
|
const durationInMilliseconds = (0, exports.getActualRequestDurationInMilliseconds)(start);
|
|
140
|
+
// Suppress noisy paths (e.g. health checks) for successful responses
|
|
141
|
+
if (options?.suppressedPaths?.length) {
|
|
142
|
+
const basePath = originalUrl.split('?')[0];
|
|
143
|
+
if (basePath &&
|
|
144
|
+
options.suppressedPaths.includes(basePath) &&
|
|
145
|
+
statusCode < 400) {
|
|
146
|
+
return;
|
|
147
|
+
}
|
|
148
|
+
}
|
|
117
149
|
const prefix = getLogPrefix?.(request);
|
|
150
|
+
// Build trace context for structured logging
|
|
151
|
+
const traceMeta = {};
|
|
152
|
+
if (options?.getTraceContext) {
|
|
153
|
+
const { traceId, spanId } = options.getTraceContext(request);
|
|
154
|
+
if (traceId) {
|
|
155
|
+
traceMeta['logging.googleapis.com/trace'] = traceId;
|
|
156
|
+
}
|
|
157
|
+
if (spanId) {
|
|
158
|
+
traceMeta['logging.googleapis.com/spanId'] = spanId;
|
|
159
|
+
}
|
|
160
|
+
}
|
|
118
161
|
logBatchRequests({
|
|
119
162
|
prefix,
|
|
120
163
|
date: formattedDate,
|
|
@@ -124,6 +167,7 @@ const expressRequestLogger = (request, response, next, logger, getLogPrefix) =>
|
|
|
124
167
|
statusMessage,
|
|
125
168
|
durationInMilliseconds,
|
|
126
169
|
logger,
|
|
170
|
+
traceMeta,
|
|
127
171
|
});
|
|
128
172
|
});
|
|
129
173
|
next();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logs.middleware.js","sourceRoot":"","sources":["../../../src/server/middleware/logs.middleware.ts"],"names":[],"mappings":";;;AAAA,gDAAsD;AAEtD,yCAAyE;
|
|
1
|
+
{"version":3,"file":"logs.middleware.js","sourceRoot":"","sources":["../../../src/server/middleware/logs.middleware.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,7 +3,6 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
4
|
exports.createMemoryMonitorMiddleware = createMemoryMonitorMiddleware;
|
|
5
5
|
exports.memoryMonitorMiddleware = memoryMonitorMiddleware;
|
|
6
|
-
const colors_1 = require("kleur/colors");
|
|
7
6
|
class MemoryMonitor {
|
|
8
7
|
logger;
|
|
9
8
|
warningThreshold;
|
|
@@ -14,6 +13,7 @@ class MemoryMonitor {
|
|
|
14
13
|
intervalTimer;
|
|
15
14
|
lastMetrics;
|
|
16
15
|
gcAvailable;
|
|
16
|
+
lastState = 'normal';
|
|
17
17
|
constructor(options = {}) {
|
|
18
18
|
this.logger = options.logger || console;
|
|
19
19
|
this.warningThreshold = options.warningThreshold || 90;
|
|
@@ -46,8 +46,23 @@ class MemoryMonitor {
|
|
|
46
46
|
}
|
|
47
47
|
checkMemoryUsage(metrics) {
|
|
48
48
|
const { heapUsedPercentage } = metrics;
|
|
49
|
+
// Determine current state
|
|
50
|
+
let currentState = 'normal';
|
|
49
51
|
if (heapUsedPercentage >= this.criticalThreshold) {
|
|
50
|
-
|
|
52
|
+
currentState = 'critical';
|
|
53
|
+
}
|
|
54
|
+
else if (heapUsedPercentage >= this.warningThreshold) {
|
|
55
|
+
currentState = 'warning';
|
|
56
|
+
}
|
|
57
|
+
// Only log on state transitions to avoid flooding logs
|
|
58
|
+
if (currentState === this.lastState) {
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
const previousState = this.lastState;
|
|
62
|
+
this.lastState = currentState;
|
|
63
|
+
const memInfo = `Memory usage at ${heapUsedPercentage.toFixed(1)}% - ${this.formatMemoryMetrics(metrics)}`;
|
|
64
|
+
if (currentState === 'critical') {
|
|
65
|
+
this.logger.error(`CRITICAL: ${memInfo}`);
|
|
51
66
|
// Attempt garbage collection if available and enabled
|
|
52
67
|
if (this.enableGarbageCollection && this.gcAvailable) {
|
|
53
68
|
this.logger.warn('Triggering garbage collection due to critical memory usage');
|
|
@@ -59,8 +74,12 @@ class MemoryMonitor {
|
|
|
59
74
|
}, 100);
|
|
60
75
|
}
|
|
61
76
|
}
|
|
62
|
-
else if (
|
|
63
|
-
this.logger.warn(
|
|
77
|
+
else if (currentState === 'warning') {
|
|
78
|
+
this.logger.warn(`WARNING: ${memInfo}`);
|
|
79
|
+
}
|
|
80
|
+
else if (previousState !== 'normal') {
|
|
81
|
+
// Recovered from warning/critical — log the good news
|
|
82
|
+
this.logger.log(`Memory recovered: ${memInfo}`);
|
|
64
83
|
}
|
|
65
84
|
}
|
|
66
85
|
startMonitoring() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"memoryMonitor.middleware.js","sourceRoot":"","sources":["../../../src/server/middleware/memoryMonitor.middleware.ts"],"names":[],"mappings":";AAAA,0EAA0E;;
|
|
1
|
+
{"version":3,"file":"memoryMonitor.middleware.js","sourceRoot":"","sources":["../../../src/server/middleware/memoryMonitor.middleware.ts"],"names":[],"mappings":"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"}
|