xypriss 1.2.4 → 1.3.1

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