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.
- package/README.md +51 -3
- package/dist/cjs/mods/security/src/components/cache/index.js +1 -1
- package/dist/cjs/shared/logger/Logger.js +2 -0
- package/dist/cjs/shared/logger/Logger.js.map +1 -1
- package/dist/cjs/src/cluster/bun-cluster-manager.js +1567 -0
- package/dist/cjs/src/cluster/bun-cluster-manager.js.map +1 -0
- package/dist/cjs/src/cluster/cluster-manager.js +1 -1
- package/dist/cjs/src/cluster/cluster-manager.js.map +1 -1
- package/dist/cjs/src/cluster/index.js +25 -6
- package/dist/cjs/src/cluster/index.js.map +1 -1
- package/dist/cjs/src/cluster/memory-manager.js +486 -0
- package/dist/cjs/src/cluster/memory-manager.js.map +1 -0
- package/dist/cjs/src/cluster/modules/BunIPCManager.js +603 -0
- package/dist/cjs/src/cluster/modules/BunIPCManager.js.map +1 -0
- package/dist/cjs/src/cluster/modules/ClusterFactory.js +22 -1
- package/dist/cjs/src/cluster/modules/ClusterFactory.js.map +1 -1
- package/dist/cjs/src/cluster/modules/CpuMonitor.js +658 -0
- package/dist/cjs/src/cluster/modules/CpuMonitor.js.map +1 -0
- package/dist/cjs/src/cluster/modules/CrossPlatformMemory.js +257 -0
- package/dist/cjs/src/cluster/modules/CrossPlatformMemory.js.map +1 -0
- package/dist/cjs/src/cluster/modules/ProcessMonitor.js +513 -0
- package/dist/cjs/src/cluster/modules/ProcessMonitor.js.map +1 -0
- package/dist/cjs/src/plugins/server-maintenance-plugin.js +79 -14
- package/dist/cjs/src/plugins/server-maintenance-plugin.js.map +1 -1
- package/dist/cjs/src/server/FastServer.js +64 -43
- package/dist/cjs/src/server/FastServer.js.map +1 -1
- package/dist/cjs/src/server/components/fastapi/ClusterManagerComponent.js +226 -10
- package/dist/cjs/src/server/components/fastapi/ClusterManagerComponent.js.map +1 -1
- package/dist/cjs/src/server/const/Cluster.config.js +174 -31
- package/dist/cjs/src/server/const/Cluster.config.js.map +1 -1
- package/dist/cjs/src/server/const/default.js +11 -2
- package/dist/cjs/src/server/const/default.js.map +1 -1
- package/dist/cjs/src/server/utils/PortManager.js +26 -15
- package/dist/cjs/src/server/utils/PortManager.js.map +1 -1
- package/dist/esm/mods/security/src/components/cache/index.js +1 -1
- package/dist/esm/shared/logger/Logger.js +2 -0
- package/dist/esm/shared/logger/Logger.js.map +1 -1
- package/dist/esm/src/cluster/bun-cluster-manager.js +1565 -0
- package/dist/esm/src/cluster/bun-cluster-manager.js.map +1 -0
- package/dist/esm/src/cluster/cluster-manager.js +1 -1
- package/dist/esm/src/cluster/cluster-manager.js.map +1 -1
- package/dist/esm/src/cluster/index.js +25 -6
- package/dist/esm/src/cluster/index.js.map +1 -1
- package/dist/esm/src/cluster/memory-manager.js +484 -0
- package/dist/esm/src/cluster/memory-manager.js.map +1 -0
- package/dist/esm/src/cluster/modules/BunIPCManager.js +601 -0
- package/dist/esm/src/cluster/modules/BunIPCManager.js.map +1 -0
- package/dist/esm/src/cluster/modules/ClusterFactory.js +22 -1
- package/dist/esm/src/cluster/modules/ClusterFactory.js.map +1 -1
- package/dist/esm/src/cluster/modules/CpuMonitor.js +656 -0
- package/dist/esm/src/cluster/modules/CpuMonitor.js.map +1 -0
- package/dist/esm/src/cluster/modules/CrossPlatformMemory.js +255 -0
- package/dist/esm/src/cluster/modules/CrossPlatformMemory.js.map +1 -0
- package/dist/esm/src/cluster/modules/ProcessMonitor.js +511 -0
- package/dist/esm/src/cluster/modules/ProcessMonitor.js.map +1 -0
- package/dist/esm/src/plugins/server-maintenance-plugin.js +79 -14
- package/dist/esm/src/plugins/server-maintenance-plugin.js.map +1 -1
- package/dist/esm/src/server/FastServer.js +64 -43
- package/dist/esm/src/server/FastServer.js.map +1 -1
- package/dist/esm/src/server/components/fastapi/ClusterManagerComponent.js +226 -10
- package/dist/esm/src/server/components/fastapi/ClusterManagerComponent.js.map +1 -1
- package/dist/esm/src/server/const/Cluster.config.js +174 -31
- package/dist/esm/src/server/const/Cluster.config.js.map +1 -1
- package/dist/esm/src/server/const/default.js +11 -2
- package/dist/esm/src/server/const/default.js.map +1 -1
- package/dist/esm/src/server/utils/PortManager.js +26 -15
- package/dist/esm/src/server/utils/PortManager.js.map +1 -1
- package/dist/index.d.ts +90 -2
- package/package.json +6 -1
- package/dist/cjs/src/plugins/modules/network/index.js +0 -120
- package/dist/cjs/src/plugins/modules/network/index.js.map +0 -1
- package/dist/cjs/src/server/plugins/PluginEngine.js +0 -378
- package/dist/cjs/src/server/plugins/PluginEngine.js.map +0 -1
- package/dist/cjs/src/server/plugins/PluginRegistry.js +0 -339
- package/dist/cjs/src/server/plugins/PluginRegistry.js.map +0 -1
- package/dist/cjs/src/server/plugins/builtin/JWTAuthPlugin.js +0 -591
- package/dist/cjs/src/server/plugins/builtin/JWTAuthPlugin.js.map +0 -1
- package/dist/cjs/src/server/plugins/builtin/ResponseTimePlugin.js +0 -413
- package/dist/cjs/src/server/plugins/builtin/ResponseTimePlugin.js.map +0 -1
- package/dist/cjs/src/server/plugins/builtin/SmartCachePlugin.js +0 -843
- package/dist/cjs/src/server/plugins/builtin/SmartCachePlugin.js.map +0 -1
- package/dist/cjs/src/server/plugins/core/CachePlugin.js +0 -1975
- package/dist/cjs/src/server/plugins/core/CachePlugin.js.map +0 -1
- package/dist/cjs/src/server/plugins/core/PerformancePlugin.js +0 -894
- package/dist/cjs/src/server/plugins/core/PerformancePlugin.js.map +0 -1
- package/dist/cjs/src/server/plugins/core/SecurityPlugin.js +0 -799
- package/dist/cjs/src/server/plugins/core/SecurityPlugin.js.map +0 -1
- package/dist/cjs/src/server/plugins/types/PluginTypes.js +0 -47
- package/dist/cjs/src/server/plugins/types/PluginTypes.js.map +0 -1
- package/dist/esm/src/plugins/modules/network/index.js +0 -109
- package/dist/esm/src/plugins/modules/network/index.js.map +0 -1
- package/dist/esm/src/server/plugins/PluginEngine.js +0 -376
- package/dist/esm/src/server/plugins/PluginEngine.js.map +0 -1
- package/dist/esm/src/server/plugins/PluginRegistry.js +0 -337
- package/dist/esm/src/server/plugins/PluginRegistry.js.map +0 -1
- package/dist/esm/src/server/plugins/builtin/JWTAuthPlugin.js +0 -589
- package/dist/esm/src/server/plugins/builtin/JWTAuthPlugin.js.map +0 -1
- package/dist/esm/src/server/plugins/builtin/ResponseTimePlugin.js +0 -411
- package/dist/esm/src/server/plugins/builtin/ResponseTimePlugin.js.map +0 -1
- package/dist/esm/src/server/plugins/builtin/SmartCachePlugin.js +0 -841
- package/dist/esm/src/server/plugins/builtin/SmartCachePlugin.js.map +0 -1
- package/dist/esm/src/server/plugins/core/CachePlugin.js +0 -1973
- package/dist/esm/src/server/plugins/core/CachePlugin.js.map +0 -1
- package/dist/esm/src/server/plugins/core/PerformancePlugin.js +0 -872
- package/dist/esm/src/server/plugins/core/PerformancePlugin.js.map +0 -1
- package/dist/esm/src/server/plugins/core/SecurityPlugin.js +0 -797
- package/dist/esm/src/server/plugins/core/SecurityPlugin.js.map +0 -1
- package/dist/esm/src/server/plugins/types/PluginTypes.js +0 -47
- package/dist/esm/src/server/plugins/types/PluginTypes.js.map +0 -1
|
@@ -0,0 +1,511 @@
|
|
|
1
|
+
import { EventEmitter } from 'events';
|
|
2
|
+
import { logger } from '../../../shared/logger/Logger.js';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Advanced Process Monitoring Module
|
|
6
|
+
* Provides sophisticated CPU, memory, and system resource monitoring
|
|
7
|
+
* with accurate calculations and cross-platform support
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* Advanced process monitoring with accurate CPU calculations
|
|
11
|
+
*/
|
|
12
|
+
class ProcessMonitor extends EventEmitter {
|
|
13
|
+
constructor() {
|
|
14
|
+
super();
|
|
15
|
+
this.cpuSnapshots = new Map();
|
|
16
|
+
this.isMonitoring = false;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Start monitoring processes
|
|
20
|
+
*/
|
|
21
|
+
startMonitoring(interval = 5000) {
|
|
22
|
+
if (this.isMonitoring) {
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
this.isMonitoring = true;
|
|
26
|
+
this.monitoringInterval = setInterval(() => {
|
|
27
|
+
this.emit("monitoring_tick");
|
|
28
|
+
}, interval);
|
|
29
|
+
logger.info("cluster", `Process monitoring started (interval: ${interval}ms)`);
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Stop monitoring processes
|
|
33
|
+
*/
|
|
34
|
+
stopMonitoring() {
|
|
35
|
+
if (this.monitoringInterval) {
|
|
36
|
+
clearInterval(this.monitoringInterval);
|
|
37
|
+
this.monitoringInterval = undefined;
|
|
38
|
+
}
|
|
39
|
+
this.isMonitoring = false;
|
|
40
|
+
this.cpuSnapshots.clear();
|
|
41
|
+
logger.info("cluster", "Process monitoring stopped");
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Get comprehensive process statistics
|
|
45
|
+
*/
|
|
46
|
+
async getProcessStats(pid) {
|
|
47
|
+
try {
|
|
48
|
+
const [memory, cpu, uptime, threads, fds] = await Promise.all([
|
|
49
|
+
this._getProcessMemory(pid),
|
|
50
|
+
this._getProcessCPU(pid),
|
|
51
|
+
this._getProcessUptime(pid),
|
|
52
|
+
this._getProcessThreads(pid),
|
|
53
|
+
this._getProcessFileDescriptors(pid),
|
|
54
|
+
]);
|
|
55
|
+
return {
|
|
56
|
+
pid,
|
|
57
|
+
memory,
|
|
58
|
+
cpu,
|
|
59
|
+
uptime,
|
|
60
|
+
threads,
|
|
61
|
+
fileDescriptors: fds,
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
catch (error) {
|
|
65
|
+
logger.error("cluster", `Failed to get process stats for PID ${pid}:`, error);
|
|
66
|
+
throw error;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Get system-wide statistics
|
|
71
|
+
*/
|
|
72
|
+
async getSystemStats() {
|
|
73
|
+
try {
|
|
74
|
+
const [cpu, memory, swap, uptime] = await Promise.all([
|
|
75
|
+
this._getSystemCPU(),
|
|
76
|
+
this._getSystemMemory(),
|
|
77
|
+
this._getSystemSwap(),
|
|
78
|
+
this._getSystemUptime(),
|
|
79
|
+
]);
|
|
80
|
+
return {
|
|
81
|
+
cpu,
|
|
82
|
+
memory,
|
|
83
|
+
swap,
|
|
84
|
+
uptime,
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
catch (error) {
|
|
88
|
+
logger.error("cluster", "Failed to get system stats:", error);
|
|
89
|
+
throw error;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Get accurate CPU usage with proper time-based calculation
|
|
94
|
+
*/
|
|
95
|
+
async _getProcessCPU(pid) {
|
|
96
|
+
const currentSnapshot = await this._takeCPUSnapshot(pid);
|
|
97
|
+
const previousSnapshot = this.cpuSnapshots.get(pid);
|
|
98
|
+
let usage = 0;
|
|
99
|
+
if (previousSnapshot) {
|
|
100
|
+
const timeDelta = currentSnapshot.timestamp - previousSnapshot.timestamp;
|
|
101
|
+
const cpuDelta = currentSnapshot.totalTime - previousSnapshot.totalTime;
|
|
102
|
+
if (timeDelta > 0) {
|
|
103
|
+
// Calculate CPU usage as percentage of elapsed time
|
|
104
|
+
usage = Math.min(100, (cpuDelta / timeDelta) * 100);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
// Store current snapshot for next calculation
|
|
108
|
+
this.cpuSnapshots.set(pid, currentSnapshot);
|
|
109
|
+
return {
|
|
110
|
+
usage,
|
|
111
|
+
userTime: currentSnapshot.userTime,
|
|
112
|
+
systemTime: currentSnapshot.systemTime,
|
|
113
|
+
totalTime: currentSnapshot.totalTime,
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Take a CPU snapshot for accurate delta calculations
|
|
118
|
+
*/
|
|
119
|
+
async _takeCPUSnapshot(pid) {
|
|
120
|
+
const timestamp = Date.now();
|
|
121
|
+
if (process.platform === "linux") {
|
|
122
|
+
const fs = await import('fs');
|
|
123
|
+
const stat = await fs.promises.readFile(`/proc/${pid}/stat`, "utf8");
|
|
124
|
+
const fields = stat.split(" ");
|
|
125
|
+
const utime = parseInt(fields[13]) || 0; // User time in clock ticks
|
|
126
|
+
const stime = parseInt(fields[14]) || 0; // System time in clock ticks
|
|
127
|
+
const clockTicks = 100; // Standard Linux clock ticks per second
|
|
128
|
+
const userTime = (utime / clockTicks) * 1000; // Convert to milliseconds
|
|
129
|
+
const systemTime = (stime / clockTicks) * 1000; // Convert to milliseconds
|
|
130
|
+
const totalTime = userTime + systemTime;
|
|
131
|
+
return { timestamp, userTime, systemTime, totalTime };
|
|
132
|
+
}
|
|
133
|
+
else if (process.platform === "darwin") {
|
|
134
|
+
// macOS implementation using ps
|
|
135
|
+
const { spawn } = await import('child_process');
|
|
136
|
+
return new Promise((resolve, reject) => {
|
|
137
|
+
const ps = spawn("ps", ["-o", "time=", "-p", pid.toString()]);
|
|
138
|
+
let output = "";
|
|
139
|
+
ps.stdout.on("data", (data) => {
|
|
140
|
+
output += data.toString();
|
|
141
|
+
});
|
|
142
|
+
ps.on("close", (code) => {
|
|
143
|
+
if (code === 0) {
|
|
144
|
+
// Parse time format (MM:SS.ss or HH:MM:SS)
|
|
145
|
+
const timeStr = output.trim();
|
|
146
|
+
const totalTime = this._parseTimeString(timeStr);
|
|
147
|
+
resolve({
|
|
148
|
+
timestamp,
|
|
149
|
+
userTime: totalTime * 0.7, // Approximate split
|
|
150
|
+
systemTime: totalTime * 0.3,
|
|
151
|
+
totalTime,
|
|
152
|
+
});
|
|
153
|
+
}
|
|
154
|
+
else {
|
|
155
|
+
reject(new Error(`ps command failed with code ${code}`));
|
|
156
|
+
}
|
|
157
|
+
});
|
|
158
|
+
ps.on("error", reject);
|
|
159
|
+
});
|
|
160
|
+
}
|
|
161
|
+
else {
|
|
162
|
+
// Fallback for other platforms
|
|
163
|
+
return {
|
|
164
|
+
timestamp,
|
|
165
|
+
userTime: 0,
|
|
166
|
+
systemTime: 0,
|
|
167
|
+
totalTime: 0,
|
|
168
|
+
};
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* Parse time string from ps output
|
|
173
|
+
*/
|
|
174
|
+
_parseTimeString(timeStr) {
|
|
175
|
+
const parts = timeStr.split(":").map(Number);
|
|
176
|
+
if (parts.length === 2) {
|
|
177
|
+
// MM:SS format
|
|
178
|
+
return (parts[0] * 60 + parts[1]) * 1000;
|
|
179
|
+
}
|
|
180
|
+
else if (parts.length === 3) {
|
|
181
|
+
// HH:MM:SS format
|
|
182
|
+
return (parts[0] * 3600 + parts[1] * 60 + parts[2]) * 1000;
|
|
183
|
+
}
|
|
184
|
+
return 0;
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* Get detailed process memory information
|
|
188
|
+
*/
|
|
189
|
+
async _getProcessMemory(pid) {
|
|
190
|
+
if (process.platform === "linux") {
|
|
191
|
+
const fs = await import('fs');
|
|
192
|
+
const [statm, status] = await Promise.all([
|
|
193
|
+
fs.promises.readFile(`/proc/${pid}/statm`, "utf8"),
|
|
194
|
+
fs.promises.readFile(`/proc/${pid}/status`, "utf8"),
|
|
195
|
+
]);
|
|
196
|
+
const statmFields = statm.split(" ");
|
|
197
|
+
const pageSize = 4096;
|
|
198
|
+
const vms = parseInt(statmFields[0]) * pageSize; // Virtual memory size
|
|
199
|
+
const rss = parseInt(statmFields[1]) * pageSize; // Resident set size
|
|
200
|
+
// Extract additional memory info from status
|
|
201
|
+
const vmSizeMatch = status.match(/VmSize:\s+(\d+)\s+kB/);
|
|
202
|
+
const vmRSSMatch = status.match(/VmRSS:\s+(\d+)\s+kB/);
|
|
203
|
+
const vmDataMatch = status.match(/VmData:\s+(\d+)\s+kB/);
|
|
204
|
+
return {
|
|
205
|
+
rss: vmRSSMatch ? parseInt(vmRSSMatch[1]) * 1024 : rss,
|
|
206
|
+
vms: vmSizeMatch ? parseInt(vmSizeMatch[1]) * 1024 : vms,
|
|
207
|
+
heapTotal: vmDataMatch ? parseInt(vmDataMatch[1]) * 1024 : 0,
|
|
208
|
+
heapUsed: rss,
|
|
209
|
+
external: 0,
|
|
210
|
+
arrayBuffers: 0,
|
|
211
|
+
};
|
|
212
|
+
}
|
|
213
|
+
else if (process.platform === "darwin") {
|
|
214
|
+
// macOS implementation
|
|
215
|
+
const { spawn } = await import('child_process');
|
|
216
|
+
return new Promise((resolve, reject) => {
|
|
217
|
+
const ps = spawn("ps", [
|
|
218
|
+
"-o",
|
|
219
|
+
"rss=,vsz=",
|
|
220
|
+
"-p",
|
|
221
|
+
pid.toString(),
|
|
222
|
+
]);
|
|
223
|
+
let output = "";
|
|
224
|
+
ps.stdout.on("data", (data) => {
|
|
225
|
+
output += data.toString();
|
|
226
|
+
});
|
|
227
|
+
ps.on("close", (code) => {
|
|
228
|
+
if (code === 0) {
|
|
229
|
+
const [rssKB, vszKB] = output
|
|
230
|
+
.trim()
|
|
231
|
+
.split(/\s+/)
|
|
232
|
+
.map(Number);
|
|
233
|
+
const rss = (rssKB || 0) * 1024;
|
|
234
|
+
const vms = (vszKB || 0) * 1024;
|
|
235
|
+
resolve({
|
|
236
|
+
rss,
|
|
237
|
+
vms,
|
|
238
|
+
heapTotal: vms,
|
|
239
|
+
heapUsed: rss,
|
|
240
|
+
external: 0,
|
|
241
|
+
arrayBuffers: 0,
|
|
242
|
+
});
|
|
243
|
+
}
|
|
244
|
+
else {
|
|
245
|
+
reject(new Error(`ps command failed with code ${code}`));
|
|
246
|
+
}
|
|
247
|
+
});
|
|
248
|
+
ps.on("error", reject);
|
|
249
|
+
});
|
|
250
|
+
}
|
|
251
|
+
else {
|
|
252
|
+
// Fallback for other platforms
|
|
253
|
+
return {
|
|
254
|
+
rss: 0,
|
|
255
|
+
vms: 0,
|
|
256
|
+
heapTotal: 0,
|
|
257
|
+
heapUsed: 0,
|
|
258
|
+
external: 0,
|
|
259
|
+
arrayBuffers: 0,
|
|
260
|
+
};
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
/**
|
|
264
|
+
* Get process uptime in seconds
|
|
265
|
+
*/
|
|
266
|
+
async _getProcessUptime(pid) {
|
|
267
|
+
if (process.platform === "linux") {
|
|
268
|
+
const fs = await import('fs');
|
|
269
|
+
const stat = await fs.promises.readFile(`/proc/${pid}/stat`, "utf8");
|
|
270
|
+
const fields = stat.split(" ");
|
|
271
|
+
const starttime = parseInt(fields[21]) || 0; // Process start time in clock ticks
|
|
272
|
+
const uptimeFile = await fs.promises.readFile("/proc/uptime", "utf8");
|
|
273
|
+
const systemUptime = parseFloat(uptimeFile.split(" ")[0]);
|
|
274
|
+
const clockTicks = 100; // Standard Linux clock ticks per second
|
|
275
|
+
const processStartTime = starttime / clockTicks;
|
|
276
|
+
return Math.max(0, systemUptime - processStartTime);
|
|
277
|
+
}
|
|
278
|
+
else if (process.platform === "darwin") {
|
|
279
|
+
const { spawn } = await import('child_process');
|
|
280
|
+
return new Promise((resolve, reject) => {
|
|
281
|
+
const ps = spawn("ps", ["-o", "etime=", "-p", pid.toString()]);
|
|
282
|
+
let output = "";
|
|
283
|
+
ps.stdout.on("data", (data) => {
|
|
284
|
+
output += data.toString();
|
|
285
|
+
});
|
|
286
|
+
ps.on("close", (code) => {
|
|
287
|
+
if (code === 0) {
|
|
288
|
+
const etimeStr = output.trim();
|
|
289
|
+
resolve(this._parseEtimeString(etimeStr));
|
|
290
|
+
}
|
|
291
|
+
else {
|
|
292
|
+
reject(new Error(`ps command failed with code ${code}`));
|
|
293
|
+
}
|
|
294
|
+
});
|
|
295
|
+
ps.on("error", reject);
|
|
296
|
+
});
|
|
297
|
+
}
|
|
298
|
+
else {
|
|
299
|
+
return 0;
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
/**
|
|
303
|
+
* Parse etime string from ps output
|
|
304
|
+
*/
|
|
305
|
+
_parseEtimeString(etimeStr) {
|
|
306
|
+
const parts = etimeStr.split(":").map(Number);
|
|
307
|
+
if (parts.length === 3) {
|
|
308
|
+
return parts[0] * 3600 + parts[1] * 60 + parts[2];
|
|
309
|
+
}
|
|
310
|
+
else if (parts.length === 2) {
|
|
311
|
+
return parts[0] * 60 + parts[1];
|
|
312
|
+
}
|
|
313
|
+
else if (parts.length === 1) {
|
|
314
|
+
return parts[0];
|
|
315
|
+
}
|
|
316
|
+
return 0;
|
|
317
|
+
}
|
|
318
|
+
/**
|
|
319
|
+
* Get number of threads for a process
|
|
320
|
+
*/
|
|
321
|
+
async _getProcessThreads(pid) {
|
|
322
|
+
if (process.platform === "linux") {
|
|
323
|
+
try {
|
|
324
|
+
const fs = await import('fs');
|
|
325
|
+
const status = await fs.promises.readFile(`/proc/${pid}/status`, "utf8");
|
|
326
|
+
const threadsMatch = status.match(/Threads:\s+(\d+)/);
|
|
327
|
+
return threadsMatch ? parseInt(threadsMatch[1]) : 1;
|
|
328
|
+
}
|
|
329
|
+
catch {
|
|
330
|
+
return 1;
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
else {
|
|
334
|
+
return 1; // Default for other platforms
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
/**
|
|
338
|
+
* Get number of open file descriptors
|
|
339
|
+
*/
|
|
340
|
+
async _getProcessFileDescriptors(pid) {
|
|
341
|
+
if (process.platform === "linux") {
|
|
342
|
+
try {
|
|
343
|
+
const fs = await import('fs');
|
|
344
|
+
const fdDir = await fs.promises.readdir(`/proc/${pid}/fd`);
|
|
345
|
+
return fdDir.length;
|
|
346
|
+
}
|
|
347
|
+
catch {
|
|
348
|
+
return 0;
|
|
349
|
+
}
|
|
350
|
+
}
|
|
351
|
+
else {
|
|
352
|
+
return 0; // Default for other platforms
|
|
353
|
+
}
|
|
354
|
+
}
|
|
355
|
+
/**
|
|
356
|
+
* Get system CPU information
|
|
357
|
+
*/
|
|
358
|
+
async _getSystemCPU() {
|
|
359
|
+
const os = await import('os');
|
|
360
|
+
const cores = os.cpus().length;
|
|
361
|
+
const loadAverage = os.loadavg();
|
|
362
|
+
// Calculate system CPU usage
|
|
363
|
+
let usage = 0;
|
|
364
|
+
if (process.platform === "linux") {
|
|
365
|
+
try {
|
|
366
|
+
const fs = await import('fs');
|
|
367
|
+
const stat = await fs.promises.readFile("/proc/stat", "utf8");
|
|
368
|
+
const cpuLine = stat.split("\n")[0];
|
|
369
|
+
const cpuTimes = cpuLine.split(/\s+/).slice(1).map(Number);
|
|
370
|
+
const idle = cpuTimes[3] || 0;
|
|
371
|
+
const total = cpuTimes.reduce((sum, time) => sum + time, 0);
|
|
372
|
+
usage = total > 0 ? Math.max(0, 100 - (idle / total) * 100) : 0;
|
|
373
|
+
}
|
|
374
|
+
catch {
|
|
375
|
+
// Fallback to load average approximation
|
|
376
|
+
usage = Math.min(100, (loadAverage[0] / cores) * 100);
|
|
377
|
+
}
|
|
378
|
+
}
|
|
379
|
+
else {
|
|
380
|
+
// Approximate from load average
|
|
381
|
+
usage = Math.min(100, (loadAverage[0] / cores) * 100);
|
|
382
|
+
}
|
|
383
|
+
return {
|
|
384
|
+
cores,
|
|
385
|
+
usage,
|
|
386
|
+
loadAverage,
|
|
387
|
+
};
|
|
388
|
+
}
|
|
389
|
+
/**
|
|
390
|
+
* Get system memory information
|
|
391
|
+
*/
|
|
392
|
+
async _getSystemMemory() {
|
|
393
|
+
const os = await import('os');
|
|
394
|
+
const total = os.totalmem();
|
|
395
|
+
const free = os.freemem();
|
|
396
|
+
const used = total - free;
|
|
397
|
+
const usagePercentage = (used / total) * 100;
|
|
398
|
+
let buffers;
|
|
399
|
+
let cached;
|
|
400
|
+
let available = free;
|
|
401
|
+
if (process.platform === "linux") {
|
|
402
|
+
try {
|
|
403
|
+
const fs = await import('fs');
|
|
404
|
+
const meminfo = await fs.promises.readFile("/proc/meminfo", "utf8");
|
|
405
|
+
const buffersMatch = meminfo.match(/Buffers:\s+(\d+)\s+kB/);
|
|
406
|
+
const cachedMatch = meminfo.match(/Cached:\s+(\d+)\s+kB/);
|
|
407
|
+
const availableMatch = meminfo.match(/MemAvailable:\s+(\d+)\s+kB/);
|
|
408
|
+
buffers = buffersMatch
|
|
409
|
+
? parseInt(buffersMatch[1]) * 1024
|
|
410
|
+
: undefined;
|
|
411
|
+
cached = cachedMatch
|
|
412
|
+
? parseInt(cachedMatch[1]) * 1024
|
|
413
|
+
: undefined;
|
|
414
|
+
available = availableMatch
|
|
415
|
+
? parseInt(availableMatch[1]) * 1024
|
|
416
|
+
: free;
|
|
417
|
+
}
|
|
418
|
+
catch {
|
|
419
|
+
// Use OS defaults
|
|
420
|
+
}
|
|
421
|
+
}
|
|
422
|
+
return {
|
|
423
|
+
total,
|
|
424
|
+
free,
|
|
425
|
+
used,
|
|
426
|
+
available,
|
|
427
|
+
usagePercentage,
|
|
428
|
+
buffers,
|
|
429
|
+
cached,
|
|
430
|
+
};
|
|
431
|
+
}
|
|
432
|
+
/**
|
|
433
|
+
* Get system swap information
|
|
434
|
+
*/
|
|
435
|
+
async _getSystemSwap() {
|
|
436
|
+
if (process.platform === "linux") {
|
|
437
|
+
try {
|
|
438
|
+
const fs = await import('fs');
|
|
439
|
+
const meminfo = await fs.promises.readFile("/proc/meminfo", "utf8");
|
|
440
|
+
const swapTotalMatch = meminfo.match(/SwapTotal:\s+(\d+)\s+kB/);
|
|
441
|
+
const swapFreeMatch = meminfo.match(/SwapFree:\s+(\d+)\s+kB/);
|
|
442
|
+
const total = swapTotalMatch
|
|
443
|
+
? parseInt(swapTotalMatch[1]) * 1024
|
|
444
|
+
: 0;
|
|
445
|
+
const free = swapFreeMatch
|
|
446
|
+
? parseInt(swapFreeMatch[1]) * 1024
|
|
447
|
+
: 0;
|
|
448
|
+
const used = total - free;
|
|
449
|
+
const usagePercentage = total > 0 ? (used / total) * 100 : 0;
|
|
450
|
+
return { total, free, used, usagePercentage };
|
|
451
|
+
}
|
|
452
|
+
catch {
|
|
453
|
+
return { total: 0, free: 0, used: 0, usagePercentage: 0 };
|
|
454
|
+
}
|
|
455
|
+
}
|
|
456
|
+
else if (process.platform === "darwin") {
|
|
457
|
+
try {
|
|
458
|
+
const { execSync } = await import('child_process');
|
|
459
|
+
const swapUsage = execSync("sysctl vm.swapusage", {
|
|
460
|
+
encoding: "utf8",
|
|
461
|
+
});
|
|
462
|
+
const totalMatch = swapUsage.match(/total = ([\d.]+)([MG])/);
|
|
463
|
+
const usedMatch = swapUsage.match(/used = ([\d.]+)([MG])/);
|
|
464
|
+
let total = 0;
|
|
465
|
+
let used = 0;
|
|
466
|
+
if (totalMatch) {
|
|
467
|
+
const value = parseFloat(totalMatch[1]);
|
|
468
|
+
const unit = totalMatch[2];
|
|
469
|
+
total =
|
|
470
|
+
unit === "G"
|
|
471
|
+
? value * 1024 * 1024 * 1024
|
|
472
|
+
: value * 1024 * 1024;
|
|
473
|
+
}
|
|
474
|
+
if (usedMatch) {
|
|
475
|
+
const value = parseFloat(usedMatch[1]);
|
|
476
|
+
const unit = usedMatch[2];
|
|
477
|
+
used =
|
|
478
|
+
unit === "G"
|
|
479
|
+
? value * 1024 * 1024 * 1024
|
|
480
|
+
: value * 1024 * 1024;
|
|
481
|
+
}
|
|
482
|
+
const free = total - used;
|
|
483
|
+
const usagePercentage = total > 0 ? (used / total) * 100 : 0;
|
|
484
|
+
return { total, free, used, usagePercentage };
|
|
485
|
+
}
|
|
486
|
+
catch {
|
|
487
|
+
return { total: 0, free: 0, used: 0, usagePercentage: 0 };
|
|
488
|
+
}
|
|
489
|
+
}
|
|
490
|
+
else {
|
|
491
|
+
return { total: 0, free: 0, used: 0, usagePercentage: 0 };
|
|
492
|
+
}
|
|
493
|
+
}
|
|
494
|
+
/**
|
|
495
|
+
* Get system uptime in seconds
|
|
496
|
+
*/
|
|
497
|
+
async _getSystemUptime() {
|
|
498
|
+
const os = await import('os');
|
|
499
|
+
return os.uptime();
|
|
500
|
+
}
|
|
501
|
+
/**
|
|
502
|
+
* Clean up resources
|
|
503
|
+
*/
|
|
504
|
+
destroy() {
|
|
505
|
+
this.stopMonitoring();
|
|
506
|
+
this.removeAllListeners();
|
|
507
|
+
}
|
|
508
|
+
}
|
|
509
|
+
|
|
510
|
+
export { ProcessMonitor };
|
|
511
|
+
//# sourceMappingURL=ProcessMonitor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ProcessMonitor.js","sources":["../../../../../src/cluster/modules/ProcessMonitor.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
|