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