@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.
@@ -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(message);
32
+ logger.error(...args);
32
33
  }
33
34
  else if (statusCode >= 400) {
34
- logger.warn(message);
35
+ logger.warn(...args);
35
36
  }
36
37
  else {
37
- logger.warn(message);
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.warn(`Batch Requests: ${(0, colors_1.yellow)(`${endpoints.length} endpoints`)} \n\n${method.toUpperCase()} ${baseUrl} \n\n`);
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: `${baseUrl}?${queryParams.toString()}`,
103
+ url: cleanUrl,
91
104
  statusCode,
92
105
  statusMessage,
93
106
  durationInMilliseconds,
94
107
  });
95
- logMessage(message, statusCode, logger);
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
- logMessage(message, statusCode, logger);
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":"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"}
1
+ {"version":3,"file":"logs.middleware.js","sourceRoot":"","sources":["../../../src/server/middleware/logs.middleware.ts"],"names":[],"mappings":"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"}
@@ -25,6 +25,7 @@ declare class MemoryMonitor {
25
25
  private intervalTimer?;
26
26
  private lastMetrics?;
27
27
  private gcAvailable;
28
+ private lastState;
28
29
  constructor(options?: MemoryMonitorOptions);
29
30
  private getMemoryMetrics;
30
31
  private formatMemoryMetrics;
@@ -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
- this.logger.error((0, colors_1.red)(`CRITICAL: Memory usage at ${heapUsedPercentage.toFixed(1)}% - ${this.formatMemoryMetrics(metrics)}`));
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 (heapUsedPercentage >= this.warningThreshold) {
63
- this.logger.warn((0, colors_1.yellow)(`WARNING: Memory usage at ${heapUsedPercentage.toFixed(1)}% - ${this.formatMemoryMetrics(metrics)}`));
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":"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"}
1
+ {"version":3,"file":"memoryMonitor.middleware.js","sourceRoot":"","sources":["../../../src/server/middleware/memoryMonitor.middleware.ts"],"names":[],"mappings":"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"}