xypriss 1.2.3 → 1.3.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.
Files changed (103) hide show
  1. package/README.md +138 -3
  2. package/dist/cjs/mods/security/src/components/cache/index.js +1 -1
  3. package/dist/cjs/shared/logger/Logger.js +1 -0
  4. package/dist/cjs/shared/logger/Logger.js.map +1 -1
  5. package/dist/cjs/src/cluster/bun-cluster-manager.js +1567 -0
  6. package/dist/cjs/src/cluster/bun-cluster-manager.js.map +1 -0
  7. package/dist/cjs/src/cluster/cluster-manager.js +1 -1
  8. package/dist/cjs/src/cluster/cluster-manager.js.map +1 -1
  9. package/dist/cjs/src/cluster/index.js +25 -6
  10. package/dist/cjs/src/cluster/index.js.map +1 -1
  11. package/dist/cjs/src/cluster/memory-manager.js +463 -0
  12. package/dist/cjs/src/cluster/memory-manager.js.map +1 -0
  13. package/dist/cjs/src/cluster/modules/BunIPCManager.js +603 -0
  14. package/dist/cjs/src/cluster/modules/BunIPCManager.js.map +1 -0
  15. package/dist/cjs/src/cluster/modules/ClusterFactory.js +22 -1
  16. package/dist/cjs/src/cluster/modules/ClusterFactory.js.map +1 -1
  17. package/dist/cjs/src/cluster/modules/CpuMonitor.js +658 -0
  18. package/dist/cjs/src/cluster/modules/CpuMonitor.js.map +1 -0
  19. package/dist/cjs/src/cluster/modules/ProcessMonitor.js +513 -0
  20. package/dist/cjs/src/cluster/modules/ProcessMonitor.js.map +1 -0
  21. package/dist/cjs/src/plugins/server-maintenance-plugin.js +1 -1
  22. package/dist/cjs/src/server/FastServer.js +64 -43
  23. package/dist/cjs/src/server/FastServer.js.map +1 -1
  24. package/dist/cjs/src/server/components/fastapi/ClusterManagerComponent.js +226 -10
  25. package/dist/cjs/src/server/components/fastapi/ClusterManagerComponent.js.map +1 -1
  26. package/dist/cjs/src/server/const/Cluster.config.js +174 -31
  27. package/dist/cjs/src/server/const/Cluster.config.js.map +1 -1
  28. package/dist/cjs/src/server/const/default.js +11 -2
  29. package/dist/cjs/src/server/const/default.js.map +1 -1
  30. package/dist/cjs/src/server/utils/PortManager.js +26 -15
  31. package/dist/cjs/src/server/utils/PortManager.js.map +1 -1
  32. package/dist/esm/mods/security/src/components/cache/index.js +1 -1
  33. package/dist/esm/shared/logger/Logger.js +1 -0
  34. package/dist/esm/shared/logger/Logger.js.map +1 -1
  35. package/dist/esm/src/cluster/bun-cluster-manager.js +1565 -0
  36. package/dist/esm/src/cluster/bun-cluster-manager.js.map +1 -0
  37. package/dist/esm/src/cluster/cluster-manager.js +1 -1
  38. package/dist/esm/src/cluster/cluster-manager.js.map +1 -1
  39. package/dist/esm/src/cluster/index.js +25 -6
  40. package/dist/esm/src/cluster/index.js.map +1 -1
  41. package/dist/esm/src/cluster/memory-manager.js +461 -0
  42. package/dist/esm/src/cluster/memory-manager.js.map +1 -0
  43. package/dist/esm/src/cluster/modules/BunIPCManager.js +601 -0
  44. package/dist/esm/src/cluster/modules/BunIPCManager.js.map +1 -0
  45. package/dist/esm/src/cluster/modules/ClusterFactory.js +22 -1
  46. package/dist/esm/src/cluster/modules/ClusterFactory.js.map +1 -1
  47. package/dist/esm/src/cluster/modules/CpuMonitor.js +656 -0
  48. package/dist/esm/src/cluster/modules/CpuMonitor.js.map +1 -0
  49. package/dist/esm/src/cluster/modules/ProcessMonitor.js +511 -0
  50. package/dist/esm/src/cluster/modules/ProcessMonitor.js.map +1 -0
  51. package/dist/esm/src/plugins/server-maintenance-plugin.js +1 -1
  52. package/dist/esm/src/server/FastServer.js +64 -43
  53. package/dist/esm/src/server/FastServer.js.map +1 -1
  54. package/dist/esm/src/server/components/fastapi/ClusterManagerComponent.js +226 -10
  55. package/dist/esm/src/server/components/fastapi/ClusterManagerComponent.js.map +1 -1
  56. package/dist/esm/src/server/const/Cluster.config.js +174 -31
  57. package/dist/esm/src/server/const/Cluster.config.js.map +1 -1
  58. package/dist/esm/src/server/const/default.js +11 -2
  59. package/dist/esm/src/server/const/default.js.map +1 -1
  60. package/dist/esm/src/server/utils/PortManager.js +26 -15
  61. package/dist/esm/src/server/utils/PortManager.js.map +1 -1
  62. package/dist/index.d.ts +78 -1
  63. package/package.json +3 -1
  64. package/dist/cjs/src/plugins/modules/network/index.js +0 -120
  65. package/dist/cjs/src/plugins/modules/network/index.js.map +0 -1
  66. package/dist/cjs/src/server/plugins/PluginEngine.js +0 -378
  67. package/dist/cjs/src/server/plugins/PluginEngine.js.map +0 -1
  68. package/dist/cjs/src/server/plugins/PluginRegistry.js +0 -339
  69. package/dist/cjs/src/server/plugins/PluginRegistry.js.map +0 -1
  70. package/dist/cjs/src/server/plugins/builtin/JWTAuthPlugin.js +0 -591
  71. package/dist/cjs/src/server/plugins/builtin/JWTAuthPlugin.js.map +0 -1
  72. package/dist/cjs/src/server/plugins/builtin/ResponseTimePlugin.js +0 -413
  73. package/dist/cjs/src/server/plugins/builtin/ResponseTimePlugin.js.map +0 -1
  74. package/dist/cjs/src/server/plugins/builtin/SmartCachePlugin.js +0 -843
  75. package/dist/cjs/src/server/plugins/builtin/SmartCachePlugin.js.map +0 -1
  76. package/dist/cjs/src/server/plugins/core/CachePlugin.js +0 -1975
  77. package/dist/cjs/src/server/plugins/core/CachePlugin.js.map +0 -1
  78. package/dist/cjs/src/server/plugins/core/PerformancePlugin.js +0 -894
  79. package/dist/cjs/src/server/plugins/core/PerformancePlugin.js.map +0 -1
  80. package/dist/cjs/src/server/plugins/core/SecurityPlugin.js +0 -799
  81. package/dist/cjs/src/server/plugins/core/SecurityPlugin.js.map +0 -1
  82. package/dist/cjs/src/server/plugins/types/PluginTypes.js +0 -47
  83. package/dist/cjs/src/server/plugins/types/PluginTypes.js.map +0 -1
  84. package/dist/esm/src/plugins/modules/network/index.js +0 -109
  85. package/dist/esm/src/plugins/modules/network/index.js.map +0 -1
  86. package/dist/esm/src/server/plugins/PluginEngine.js +0 -376
  87. package/dist/esm/src/server/plugins/PluginEngine.js.map +0 -1
  88. package/dist/esm/src/server/plugins/PluginRegistry.js +0 -337
  89. package/dist/esm/src/server/plugins/PluginRegistry.js.map +0 -1
  90. package/dist/esm/src/server/plugins/builtin/JWTAuthPlugin.js +0 -589
  91. package/dist/esm/src/server/plugins/builtin/JWTAuthPlugin.js.map +0 -1
  92. package/dist/esm/src/server/plugins/builtin/ResponseTimePlugin.js +0 -411
  93. package/dist/esm/src/server/plugins/builtin/ResponseTimePlugin.js.map +0 -1
  94. package/dist/esm/src/server/plugins/builtin/SmartCachePlugin.js +0 -841
  95. package/dist/esm/src/server/plugins/builtin/SmartCachePlugin.js.map +0 -1
  96. package/dist/esm/src/server/plugins/core/CachePlugin.js +0 -1973
  97. package/dist/esm/src/server/plugins/core/CachePlugin.js.map +0 -1
  98. package/dist/esm/src/server/plugins/core/PerformancePlugin.js +0 -872
  99. package/dist/esm/src/server/plugins/core/PerformancePlugin.js.map +0 -1
  100. package/dist/esm/src/server/plugins/core/SecurityPlugin.js +0 -797
  101. package/dist/esm/src/server/plugins/core/SecurityPlugin.js.map +0 -1
  102. package/dist/esm/src/server/plugins/types/PluginTypes.js +0 -47
  103. package/dist/esm/src/server/plugins/types/PluginTypes.js.map +0 -1
@@ -0,0 +1,463 @@
1
+ 'use strict';
2
+
3
+ var events = require('events');
4
+ var Logger = require('../../shared/logger/Logger.js');
5
+ var ProcessMonitor = require('./modules/ProcessMonitor.js');
6
+
7
+ /**
8
+ * Memory management utilities for cluster operations
9
+ */
10
+ /**
11
+ * Advanced memory management for cluster operations using ProcessMonitor
12
+ */
13
+ class MemoryManager extends events.EventEmitter {
14
+ constructor(config) {
15
+ super();
16
+ this.memoryHistory = new Map();
17
+ this.lastGCHint = new Map();
18
+ this.isLowMemoryMode = false;
19
+ this.config = config || {};
20
+ this.processMonitor = new ProcessMonitor.ProcessMonitor();
21
+ this.isLowMemoryMode =
22
+ config?.performanceOptimization?.lowMemoryMode || false;
23
+ Logger.logger.info("cluster", "MemoryManager initialized with ProcessMonitor");
24
+ }
25
+ /**
26
+ * Start memory monitoring
27
+ */
28
+ startMonitoring() {
29
+ const interval = this.config?.memoryManagement?.memoryCheckInterval || 30000;
30
+ Logger.logger.info("cluster", `Starting memory monitoring (interval: ${interval}ms)`);
31
+ this.monitoringInterval = setInterval(async () => {
32
+ await this.checkMemoryUsage();
33
+ }, interval);
34
+ // Initial check
35
+ this.checkMemoryUsage();
36
+ }
37
+ /**
38
+ * Stop memory monitoring
39
+ */
40
+ stopMonitoring() {
41
+ if (this.monitoringInterval) {
42
+ clearInterval(this.monitoringInterval);
43
+ this.monitoringInterval = undefined;
44
+ Logger.logger.info("cluster", "Memory monitoring stopped");
45
+ }
46
+ }
47
+ /**
48
+ * Get system memory statistics using ProcessMonitor
49
+ */
50
+ async getSystemMemoryStats() {
51
+ try {
52
+ // Update system stats periodically
53
+ this.systemStats = await this.processMonitor.getSystemStats();
54
+ const { memory, swap } = this.systemStats;
55
+ return {
56
+ totalMemory: memory.total,
57
+ usedMemory: memory.used,
58
+ freeMemory: memory.free,
59
+ usagePercentage: memory.usagePercentage,
60
+ swapUsed: swap.used,
61
+ swapTotal: swap.total,
62
+ swapPercentage: swap.usagePercentage,
63
+ };
64
+ }
65
+ catch (error) {
66
+ Logger.logger.error("cluster", "Failed to get system memory stats:", error);
67
+ // Fallback to basic OS stats
68
+ const os = require("os");
69
+ const totalMemory = os.totalmem();
70
+ const freeMemory = os.freemem();
71
+ const usedMemory = totalMemory - freeMemory;
72
+ const usagePercentage = (usedMemory / totalMemory) * 100;
73
+ return {
74
+ totalMemory,
75
+ usedMemory,
76
+ freeMemory,
77
+ usagePercentage,
78
+ swapUsed: 0,
79
+ swapTotal: 0,
80
+ swapPercentage: 0,
81
+ };
82
+ }
83
+ }
84
+ /**
85
+ * Get swap memory information using platform-specific methods
86
+ */
87
+ getSwapMemoryInfo() {
88
+ try {
89
+ if (process.platform === "linux") {
90
+ return this.getLinuxSwapInfo();
91
+ }
92
+ else if (process.platform === "darwin") {
93
+ return this.getMacOSSwapInfo();
94
+ }
95
+ else if (process.platform === "win32") {
96
+ return this.getWindowsSwapInfo();
97
+ }
98
+ else {
99
+ return { swapUsed: 0, swapTotal: 0, swapPercentage: 0 };
100
+ }
101
+ }
102
+ catch (error) {
103
+ Logger.logger.warn("cluster", "Failed to get swap memory info:", error);
104
+ return { swapUsed: 0, swapTotal: 0, swapPercentage: 0 };
105
+ }
106
+ }
107
+ /**
108
+ * Get swap information on Linux
109
+ */
110
+ getLinuxSwapInfo() {
111
+ try {
112
+ const fs = require("fs");
113
+ const meminfo = fs.readFileSync("/proc/meminfo", "utf8");
114
+ const swapTotalMatch = meminfo.match(/SwapTotal:\s+(\d+)\s+kB/);
115
+ const swapFreeMatch = meminfo.match(/SwapFree:\s+(\d+)\s+kB/);
116
+ const swapTotal = swapTotalMatch
117
+ ? parseInt(swapTotalMatch[1]) * 1024
118
+ : 0;
119
+ const swapFree = swapFreeMatch
120
+ ? parseInt(swapFreeMatch[1]) * 1024
121
+ : 0;
122
+ const swapUsed = swapTotal - swapFree;
123
+ const swapPercentage = swapTotal > 0 ? (swapUsed / swapTotal) * 100 : 0;
124
+ return { swapUsed, swapTotal, swapPercentage };
125
+ }
126
+ catch (error) {
127
+ throw new Error(`Failed to get Linux swap info: ${error}`);
128
+ }
129
+ }
130
+ /**
131
+ * Get swap information on macOS
132
+ */
133
+ getMacOSSwapInfo() {
134
+ try {
135
+ const { execSync } = require("child_process");
136
+ const swapUsage = execSync("sysctl vm.swapusage", {
137
+ encoding: "utf8",
138
+ });
139
+ // Parse output like: vm.swapusage: total = 2048.00M used = 617.75M free = 1430.25M (encrypted)
140
+ const totalMatch = swapUsage.match(/total = ([\d.]+)([MG])/);
141
+ const usedMatch = swapUsage.match(/used = ([\d.]+)([MG])/);
142
+ let swapTotal = 0;
143
+ let swapUsed = 0;
144
+ if (totalMatch) {
145
+ const value = parseFloat(totalMatch[1]);
146
+ const unit = totalMatch[2];
147
+ swapTotal =
148
+ unit === "G"
149
+ ? value * 1024 * 1024 * 1024
150
+ : value * 1024 * 1024;
151
+ }
152
+ if (usedMatch) {
153
+ const value = parseFloat(usedMatch[1]);
154
+ const unit = usedMatch[2];
155
+ swapUsed =
156
+ unit === "G"
157
+ ? value * 1024 * 1024 * 1024
158
+ : value * 1024 * 1024;
159
+ }
160
+ const swapPercentage = swapTotal > 0 ? (swapUsed / swapTotal) * 100 : 0;
161
+ return { swapUsed, swapTotal, swapPercentage };
162
+ }
163
+ catch (error) {
164
+ throw new Error(`Failed to get macOS swap info: ${error}`);
165
+ }
166
+ }
167
+ /**
168
+ * Get swap information on Windows
169
+ */
170
+ getWindowsSwapInfo() {
171
+ try {
172
+ const { execSync } = require("child_process");
173
+ // Use wmic to get page file information
174
+ const pageFileInfo = execSync("wmic pagefile get Size,Usage /format:csv", { encoding: "utf8" });
175
+ const lines = pageFileInfo
176
+ .split("\n")
177
+ .filter((line) => line.trim() && !line.includes("Node"));
178
+ let totalSize = 0;
179
+ let totalUsage = 0;
180
+ for (const line of lines) {
181
+ const parts = line.split(",");
182
+ if (parts.length >= 3) {
183
+ const size = parseInt(parts[1]) || 0;
184
+ const usage = parseInt(parts[2]) || 0;
185
+ totalSize += size;
186
+ totalUsage += usage;
187
+ }
188
+ }
189
+ const swapTotal = totalSize * 1024 * 1024; // Convert MB to bytes
190
+ const swapUsed = totalUsage * 1024 * 1024;
191
+ const swapPercentage = swapTotal > 0 ? (swapUsed / swapTotal) * 100 : 0;
192
+ return { swapUsed, swapTotal, swapPercentage };
193
+ }
194
+ catch (error) {
195
+ throw new Error(`Failed to get Windows swap info: ${error}`);
196
+ }
197
+ }
198
+ /**
199
+ * Get worker memory statistics using actual process monitoring
200
+ */
201
+ async getWorkerMemoryStats(workerId, pid) {
202
+ try {
203
+ const processStats = await this.processMonitor.getProcessStats(pid);
204
+ return {
205
+ workerId,
206
+ pid,
207
+ memoryUsage: {
208
+ rss: processStats.memory.rss,
209
+ heapTotal: processStats.memory.heapTotal,
210
+ heapUsed: processStats.memory.heapUsed,
211
+ external: processStats.memory.external,
212
+ arrayBuffers: processStats.memory.arrayBuffers,
213
+ },
214
+ cpuUsage: processStats.cpu.usage,
215
+ uptime: processStats.uptime,
216
+ };
217
+ }
218
+ catch (error) {
219
+ Logger.logger.error("cluster", `Failed to get memory stats for worker ${workerId} (PID: ${pid}):`, error);
220
+ // Return minimal stats on error
221
+ return {
222
+ workerId,
223
+ pid,
224
+ memoryUsage: {
225
+ rss: 0,
226
+ heapTotal: 0,
227
+ heapUsed: 0,
228
+ external: 0,
229
+ arrayBuffers: 0,
230
+ },
231
+ cpuUsage: 0,
232
+ uptime: 0,
233
+ };
234
+ }
235
+ }
236
+ /**
237
+ * Check if memory usage is within limits
238
+ */
239
+ checkMemoryLimits(workerId, memoryUsage) {
240
+ const maxMemory = this.parseMemoryString(this.config?.maxMemoryPerWorker || "1GB");
241
+ const warningThreshold = this.config?.memoryManagement?.memoryWarningThreshold || 80;
242
+ const criticalThreshold = this.config?.memoryManagement?.memoryCriticalThreshold || 95;
243
+ const usagePercentage = (memoryUsage / maxMemory) * 100;
244
+ if (usagePercentage >= criticalThreshold) {
245
+ return {
246
+ withinLimits: false,
247
+ action: this.config?.enforcement?.enforceHardLimits
248
+ ? "restart"
249
+ : "scale_down",
250
+ message: `Worker ${workerId} memory usage critical: ${usagePercentage.toFixed(1)}%`,
251
+ };
252
+ }
253
+ if (usagePercentage >= warningThreshold) {
254
+ return {
255
+ withinLimits: true,
256
+ action: "warning",
257
+ message: `Worker ${workerId} memory usage high: ${usagePercentage.toFixed(1)}%`,
258
+ };
259
+ }
260
+ return {
261
+ withinLimits: true,
262
+ action: "none",
263
+ message: `Worker ${workerId} memory usage normal: ${usagePercentage.toFixed(1)}%`,
264
+ };
265
+ }
266
+ /**
267
+ * Detect memory leaks in workers
268
+ */
269
+ detectMemoryLeak(workerId, memoryUsage) {
270
+ if (!this.config?.memoryManagement?.memoryLeakDetection) {
271
+ return false;
272
+ }
273
+ const history = this.memoryHistory.get(workerId) || [];
274
+ history.push(memoryUsage);
275
+ // Keep only last 10 measurements
276
+ if (history.length > 10) {
277
+ history.shift();
278
+ }
279
+ this.memoryHistory.set(workerId, history);
280
+ // Detect consistent memory growth
281
+ if (history.length >= 5) {
282
+ const trend = this.calculateMemoryTrend(history);
283
+ const leakThreshold = 0.1; // 10% consistent growth
284
+ if (trend > leakThreshold) {
285
+ Logger.logger.warn("cluster", `Memory leak detected in worker ${workerId}`);
286
+ this.emitMemoryAlert({
287
+ type: "leak_detected",
288
+ workerId,
289
+ message: `Memory leak detected in worker ${workerId}`,
290
+ memoryUsage,
291
+ threshold: leakThreshold,
292
+ timestamp: Date.now(),
293
+ action: "restart_worker",
294
+ });
295
+ return true;
296
+ }
297
+ }
298
+ return false;
299
+ }
300
+ /**
301
+ * Suggest garbage collection for worker
302
+ */
303
+ suggestGarbageCollection(workerId) {
304
+ if (!this.config?.memoryManagement?.garbageCollectionHint) {
305
+ return false;
306
+ }
307
+ const lastGC = this.lastGCHint.get(workerId) || 0;
308
+ const gcCooldown = 60000; // 1 minute cooldown
309
+ if (Date.now() - lastGC > gcCooldown) {
310
+ this.lastGCHint.set(workerId, Date.now());
311
+ Logger.logger.debug("cluster", `Suggesting garbage collection for worker ${workerId}`);
312
+ return true;
313
+ }
314
+ return false;
315
+ }
316
+ /**
317
+ * Get memory optimization recommendations
318
+ */
319
+ async getMemoryOptimizationRecommendations() {
320
+ const systemStats = await this.getSystemMemoryStats();
321
+ const recommendations = [];
322
+ if (systemStats.usagePercentage > 85) {
323
+ recommendations.push("System memory usage is high (>85%). Consider reducing worker count.");
324
+ }
325
+ if (systemStats.usagePercentage > 95) {
326
+ recommendations.push("Critical memory usage! Enable low memory mode immediately.");
327
+ }
328
+ if (!this.config?.performanceOptimization?.lowMemoryMode &&
329
+ systemStats.usagePercentage > 70) {
330
+ recommendations.push("Consider enabling low memory mode for better resource utilization.");
331
+ }
332
+ if (!this.config?.memoryManagement?.memoryLeakDetection) {
333
+ recommendations.push("Enable memory leak detection for better stability.");
334
+ }
335
+ const maxWorkers = await this.calculateOptimalWorkerCount(systemStats);
336
+ return {
337
+ recommendations,
338
+ canEnableLowMemoryMode: systemStats.usagePercentage > 70,
339
+ suggestedWorkerCount: maxWorkers,
340
+ };
341
+ }
342
+ /**
343
+ * Calculate optimal worker count based on available memory
344
+ */
345
+ async calculateOptimalWorkerCount(systemStats) {
346
+ const stats = systemStats || (await this.getSystemMemoryStats());
347
+ const maxMemoryPerWorker = this.parseMemoryString(this.config?.maxMemoryPerWorker || "512MB");
348
+ const reservedMemory = this.parseMemoryString(this.config?.memoryManagement?.memoryReservation || "1GB");
349
+ const availableMemory = stats.totalMemory - reservedMemory;
350
+ const maxWorkers = Math.floor(availableMemory / maxMemoryPerWorker);
351
+ // Ensure at least 1 worker, but respect system limits
352
+ return Math.max(1, Math.min(maxWorkers, require("os").cpus().length));
353
+ }
354
+ /**
355
+ * Enable low memory mode
356
+ */
357
+ enableLowMemoryMode() {
358
+ this.isLowMemoryMode = true;
359
+ Logger.logger.info("cluster", "Low memory mode enabled");
360
+ this.emit("low_memory_mode_enabled", {
361
+ timestamp: Date.now(),
362
+ systemStats: this.getSystemMemoryStats(),
363
+ });
364
+ }
365
+ /**
366
+ * Disable low memory mode
367
+ */
368
+ disableLowMemoryMode() {
369
+ this.isLowMemoryMode = false;
370
+ Logger.logger.info("cluster", "Low memory mode disabled");
371
+ this.emit("low_memory_mode_disabled", {
372
+ timestamp: Date.now(),
373
+ systemStats: this.getSystemMemoryStats(),
374
+ });
375
+ }
376
+ /**
377
+ * Check current memory usage and emit alerts if needed
378
+ */
379
+ async checkMemoryUsage() {
380
+ const systemStats = await this.getSystemMemoryStats();
381
+ const warningThreshold = this.config?.memoryManagement?.memoryWarningThreshold || 80;
382
+ const criticalThreshold = this.config?.memoryManagement?.memoryCriticalThreshold || 95;
383
+ if (systemStats.usagePercentage >= criticalThreshold) {
384
+ this.emitMemoryAlert({
385
+ type: "critical",
386
+ message: `Critical system memory usage: ${systemStats.usagePercentage.toFixed(1)}%`,
387
+ memoryUsage: systemStats.usedMemory,
388
+ threshold: criticalThreshold,
389
+ timestamp: Date.now(),
390
+ action: "scale_down",
391
+ });
392
+ if (!this.isLowMemoryMode) {
393
+ this.enableLowMemoryMode();
394
+ }
395
+ }
396
+ else if (systemStats.usagePercentage >= warningThreshold) {
397
+ this.emitMemoryAlert({
398
+ type: "warning",
399
+ message: `High system memory usage: ${systemStats.usagePercentage.toFixed(1)}%`,
400
+ memoryUsage: systemStats.usedMemory,
401
+ threshold: warningThreshold,
402
+ timestamp: Date.now(),
403
+ action: "alert_only",
404
+ });
405
+ }
406
+ else if (this.isLowMemoryMode &&
407
+ systemStats.usagePercentage < warningThreshold - 10) {
408
+ // Exit low memory mode if usage drops significantly
409
+ this.disableLowMemoryMode();
410
+ }
411
+ }
412
+ /**
413
+ * Parse memory string to bytes
414
+ */
415
+ parseMemoryString(memoryStr) {
416
+ const units = {
417
+ B: 1,
418
+ KB: 1024,
419
+ MB: 1024 * 1024,
420
+ GB: 1024 * 1024 * 1024,
421
+ TB: 1024 * 1024 * 1024 * 1024,
422
+ };
423
+ const match = memoryStr.match(/^(\d+(?:\.\d+)?)\s*([KMGT]?B)$/i);
424
+ if (!match) {
425
+ throw new Error(`Invalid memory format: ${memoryStr}`);
426
+ }
427
+ const value = parseFloat(match[1]);
428
+ const unit = match[2].toUpperCase();
429
+ return value * (units[unit] || 1);
430
+ }
431
+ /**
432
+ * Calculate memory trend from history
433
+ */
434
+ calculateMemoryTrend(history) {
435
+ if (history.length < 2)
436
+ return 0;
437
+ const first = history[0];
438
+ const last = history[history.length - 1];
439
+ return (last - first) / first;
440
+ }
441
+ // Removed - using ProcessMonitor module instead
442
+ /**
443
+ * Emit memory alert
444
+ */
445
+ emitMemoryAlert(alert) {
446
+ Logger.logger.warn("cluster", `Memory Alert: ${alert.message}`);
447
+ this.emit("memory_alert", alert);
448
+ }
449
+ /**
450
+ * Clean up resources and stop monitoring
451
+ */
452
+ destroy() {
453
+ this.stopMonitoring();
454
+ this.processMonitor.destroy();
455
+ this.memoryHistory.clear();
456
+ this.lastGCHint.clear();
457
+ this.removeAllListeners();
458
+ Logger.logger.info("cluster", "MemoryManager destroyed");
459
+ }
460
+ }
461
+
462
+ exports.MemoryManager = MemoryManager;
463
+ //# sourceMappingURL=memory-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory-manager.js","sources":["../../../../src/cluster/memory-manager.ts"],"sourcesContent":[null],"names":["EventEmitter","ProcessMonitor","logger"],"mappings":"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"}