@masuidrive/procman 0.1.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.
- package/LICENSE +21 -0
- package/README.md +149 -0
- package/dist/src/cli/commands/clear-log.d.ts +10 -0
- package/dist/src/cli/commands/clear-log.d.ts.map +1 -0
- package/dist/src/cli/commands/clear-log.js +77 -0
- package/dist/src/cli/commands/clear-log.js.map +1 -0
- package/dist/src/cli/commands/exit.d.ts +10 -0
- package/dist/src/cli/commands/exit.d.ts.map +1 -0
- package/dist/src/cli/commands/exit.js +65 -0
- package/dist/src/cli/commands/exit.js.map +1 -0
- package/dist/src/cli/commands/help.d.ts +10 -0
- package/dist/src/cli/commands/help.d.ts.map +1 -0
- package/dist/src/cli/commands/help.js +340 -0
- package/dist/src/cli/commands/help.js.map +1 -0
- package/dist/src/cli/commands/list.d.ts +11 -0
- package/dist/src/cli/commands/list.d.ts.map +1 -0
- package/dist/src/cli/commands/list.js +130 -0
- package/dist/src/cli/commands/list.js.map +1 -0
- package/dist/src/cli/commands/load.d.ts +11 -0
- package/dist/src/cli/commands/load.d.ts.map +1 -0
- package/dist/src/cli/commands/load.js +250 -0
- package/dist/src/cli/commands/load.js.map +1 -0
- package/dist/src/cli/commands/log.d.ts +18 -0
- package/dist/src/cli/commands/log.d.ts.map +1 -0
- package/dist/src/cli/commands/log.js +282 -0
- package/dist/src/cli/commands/log.js.map +1 -0
- package/dist/src/cli/commands/restart.d.ts +11 -0
- package/dist/src/cli/commands/restart.d.ts.map +1 -0
- package/dist/src/cli/commands/restart.js +99 -0
- package/dist/src/cli/commands/restart.js.map +1 -0
- package/dist/src/cli/commands/start.d.ts +11 -0
- package/dist/src/cli/commands/start.d.ts.map +1 -0
- package/dist/src/cli/commands/start.js +105 -0
- package/dist/src/cli/commands/start.js.map +1 -0
- package/dist/src/cli/commands/stop.d.ts +12 -0
- package/dist/src/cli/commands/stop.d.ts.map +1 -0
- package/dist/src/cli/commands/stop.js +105 -0
- package/dist/src/cli/commands/stop.js.map +1 -0
- package/dist/src/cli/index.d.ts +3 -0
- package/dist/src/cli/index.d.ts.map +1 -0
- package/dist/src/cli/index.js +28 -0
- package/dist/src/cli/index.js.map +1 -0
- package/dist/src/cli/parser.d.ts +14 -0
- package/dist/src/cli/parser.d.ts.map +1 -0
- package/dist/src/cli/parser.js +131 -0
- package/dist/src/cli/parser.js.map +1 -0
- package/dist/src/cli/signal-handler.d.ts +51 -0
- package/dist/src/cli/signal-handler.d.ts.map +1 -0
- package/dist/src/cli/signal-handler.js +129 -0
- package/dist/src/cli/signal-handler.js.map +1 -0
- package/dist/src/cli/utils/error-handler.d.ts +39 -0
- package/dist/src/cli/utils/error-handler.d.ts.map +1 -0
- package/dist/src/cli/utils/error-handler.js +200 -0
- package/dist/src/cli/utils/error-handler.js.map +1 -0
- package/dist/src/cli/utils/error-utils.d.ts +16 -0
- package/dist/src/cli/utils/error-utils.d.ts.map +1 -0
- package/dist/src/cli/utils/error-utils.js +48 -0
- package/dist/src/cli/utils/error-utils.js.map +1 -0
- package/dist/src/cli/utils/ipc-client.d.ts +80 -0
- package/dist/src/cli/utils/ipc-client.d.ts.map +1 -0
- package/dist/src/cli/utils/ipc-client.js +275 -0
- package/dist/src/cli/utils/ipc-client.js.map +1 -0
- package/dist/src/config/config-loader.d.ts +74 -0
- package/dist/src/config/config-loader.d.ts.map +1 -0
- package/dist/src/config/config-loader.js +229 -0
- package/dist/src/config/config-loader.js.map +1 -0
- package/dist/src/config/config-normalizer.d.ts +135 -0
- package/dist/src/config/config-normalizer.d.ts.map +1 -0
- package/dist/src/config/config-normalizer.js +309 -0
- package/dist/src/config/config-normalizer.js.map +1 -0
- package/dist/src/config/config-reporter.d.ts +183 -0
- package/dist/src/config/config-reporter.d.ts.map +1 -0
- package/dist/src/config/config-reporter.js +311 -0
- package/dist/src/config/config-reporter.js.map +1 -0
- package/dist/src/config/config-validator.d.ts +163 -0
- package/dist/src/config/config-validator.d.ts.map +1 -0
- package/dist/src/config/config-validator.js +489 -0
- package/dist/src/config/config-validator.js.map +1 -0
- package/dist/src/config/config-watcher.d.ts +161 -0
- package/dist/src/config/config-watcher.d.ts.map +1 -0
- package/dist/src/config/config-watcher.js +245 -0
- package/dist/src/config/config-watcher.js.map +1 -0
- package/dist/src/config/index.d.ts +36 -0
- package/dist/src/config/index.d.ts.map +1 -0
- package/dist/src/config/index.js +41 -0
- package/dist/src/config/index.js.map +1 -0
- package/dist/src/config/secure-config-loader.d.ts +77 -0
- package/dist/src/config/secure-config-loader.d.ts.map +1 -0
- package/dist/src/config/secure-config-loader.js +326 -0
- package/dist/src/config/secure-config-loader.js.map +1 -0
- package/dist/src/daemon/base-socket-connection.d.ts +66 -0
- package/dist/src/daemon/base-socket-connection.d.ts.map +1 -0
- package/dist/src/daemon/base-socket-connection.js +192 -0
- package/dist/src/daemon/base-socket-connection.js.map +1 -0
- package/dist/src/daemon/component-manager.d.ts +180 -0
- package/dist/src/daemon/component-manager.d.ts.map +1 -0
- package/dist/src/daemon/component-manager.js +794 -0
- package/dist/src/daemon/component-manager.js.map +1 -0
- package/dist/src/daemon/crash-recovery.d.ts +71 -0
- package/dist/src/daemon/crash-recovery.d.ts.map +1 -0
- package/dist/src/daemon/crash-recovery.js +282 -0
- package/dist/src/daemon/crash-recovery.js.map +1 -0
- package/dist/src/daemon/daemon-main.d.ts +18 -0
- package/dist/src/daemon/daemon-main.d.ts.map +1 -0
- package/dist/src/daemon/daemon-main.js +160 -0
- package/dist/src/daemon/daemon-main.js.map +1 -0
- package/dist/src/daemon/daemon-state-manager.d.ts +111 -0
- package/dist/src/daemon/daemon-state-manager.d.ts.map +1 -0
- package/dist/src/daemon/daemon-state-manager.js +194 -0
- package/dist/src/daemon/daemon-state-manager.js.map +1 -0
- package/dist/src/daemon/data-directory.d.ts +51 -0
- package/dist/src/daemon/data-directory.d.ts.map +1 -0
- package/dist/src/daemon/data-directory.js +136 -0
- package/dist/src/daemon/data-directory.js.map +1 -0
- package/dist/src/daemon/index.d.ts +20 -0
- package/dist/src/daemon/index.d.ts.map +1 -0
- package/dist/src/daemon/index.js +24 -0
- package/dist/src/daemon/index.js.map +1 -0
- package/dist/src/daemon/ipc-client-base.d.ts +153 -0
- package/dist/src/daemon/ipc-client-base.d.ts.map +1 -0
- package/dist/src/daemon/ipc-client-base.js +476 -0
- package/dist/src/daemon/ipc-client-base.js.map +1 -0
- package/dist/src/daemon/ipc-command-handler.d.ts +107 -0
- package/dist/src/daemon/ipc-command-handler.d.ts.map +1 -0
- package/dist/src/daemon/ipc-command-handler.js +483 -0
- package/dist/src/daemon/ipc-command-handler.js.map +1 -0
- package/dist/src/daemon/ipc-factory.d.ts +92 -0
- package/dist/src/daemon/ipc-factory.d.ts.map +1 -0
- package/dist/src/daemon/ipc-factory.js +210 -0
- package/dist/src/daemon/ipc-factory.js.map +1 -0
- package/dist/src/daemon/ipc-server-base.d.ts +158 -0
- package/dist/src/daemon/ipc-server-base.d.ts.map +1 -0
- package/dist/src/daemon/ipc-server-base.js +491 -0
- package/dist/src/daemon/ipc-server-base.js.map +1 -0
- package/dist/src/daemon/message-protocol.d.ts +132 -0
- package/dist/src/daemon/message-protocol.d.ts.map +1 -0
- package/dist/src/daemon/message-protocol.js +252 -0
- package/dist/src/daemon/message-protocol.js.map +1 -0
- package/dist/src/daemon/named-pipe-client.d.ts +61 -0
- package/dist/src/daemon/named-pipe-client.d.ts.map +1 -0
- package/dist/src/daemon/named-pipe-client.js +221 -0
- package/dist/src/daemon/named-pipe-client.js.map +1 -0
- package/dist/src/daemon/named-pipe-server.d.ts +40 -0
- package/dist/src/daemon/named-pipe-server.d.ts.map +1 -0
- package/dist/src/daemon/named-pipe-server.js +102 -0
- package/dist/src/daemon/named-pipe-server.js.map +1 -0
- package/dist/src/daemon/orphan-detector.d.ts +66 -0
- package/dist/src/daemon/orphan-detector.d.ts.map +1 -0
- package/dist/src/daemon/orphan-detector.js +208 -0
- package/dist/src/daemon/orphan-detector.js.map +1 -0
- package/dist/src/daemon/pid-manager.d.ts +49 -0
- package/dist/src/daemon/pid-manager.d.ts.map +1 -0
- package/dist/src/daemon/pid-manager.js +110 -0
- package/dist/src/daemon/pid-manager.js.map +1 -0
- package/dist/src/daemon/procman-daemon.d.ts +188 -0
- package/dist/src/daemon/procman-daemon.d.ts.map +1 -0
- package/dist/src/daemon/procman-daemon.js +802 -0
- package/dist/src/daemon/procman-daemon.js.map +1 -0
- package/dist/src/daemon/reconnection-system.d.ts +113 -0
- package/dist/src/daemon/reconnection-system.d.ts.map +1 -0
- package/dist/src/daemon/reconnection-system.js +223 -0
- package/dist/src/daemon/reconnection-system.js.map +1 -0
- package/dist/src/daemon/resource-manager.d.ts +204 -0
- package/dist/src/daemon/resource-manager.d.ts.map +1 -0
- package/dist/src/daemon/resource-manager.js +423 -0
- package/dist/src/daemon/resource-manager.js.map +1 -0
- package/dist/src/daemon/signal-handler.d.ts +58 -0
- package/dist/src/daemon/signal-handler.d.ts.map +1 -0
- package/dist/src/daemon/signal-handler.js +142 -0
- package/dist/src/daemon/signal-handler.js.map +1 -0
- package/dist/src/daemon/simple-resource-manager.d.ts +95 -0
- package/dist/src/daemon/simple-resource-manager.d.ts.map +1 -0
- package/dist/src/daemon/simple-resource-manager.js +180 -0
- package/dist/src/daemon/simple-resource-manager.js.map +1 -0
- package/dist/src/daemon/unix-socket-client.d.ts +69 -0
- package/dist/src/daemon/unix-socket-client.d.ts.map +1 -0
- package/dist/src/daemon/unix-socket-client.js +313 -0
- package/dist/src/daemon/unix-socket-client.js.map +1 -0
- package/dist/src/daemon/unix-socket-server.d.ts +61 -0
- package/dist/src/daemon/unix-socket-server.d.ts.map +1 -0
- package/dist/src/daemon/unix-socket-server.js +262 -0
- package/dist/src/daemon/unix-socket-server.js.map +1 -0
- package/dist/src/daemon/zombie-reaper.d.ts +83 -0
- package/dist/src/daemon/zombie-reaper.d.ts.map +1 -0
- package/dist/src/daemon/zombie-reaper.js +278 -0
- package/dist/src/daemon/zombie-reaper.js.map +1 -0
- package/dist/src/process-manager/index.d.ts +13 -0
- package/dist/src/process-manager/index.d.ts.map +1 -0
- package/dist/src/process-manager/index.js +11 -0
- package/dist/src/process-manager/index.js.map +1 -0
- package/dist/src/process-manager/interfaces/index.d.ts +31 -0
- package/dist/src/process-manager/interfaces/index.d.ts.map +1 -0
- package/dist/src/process-manager/interfaces/index.js +14 -0
- package/dist/src/process-manager/interfaces/index.js.map +1 -0
- package/dist/src/process-manager/interfaces/process-group.d.ts +200 -0
- package/dist/src/process-manager/interfaces/process-group.d.ts.map +1 -0
- package/dist/src/process-manager/interfaces/process-group.js +10 -0
- package/dist/src/process-manager/interfaces/process-group.js.map +1 -0
- package/dist/src/process-manager/interfaces/process-lifecycle.d.ts +97 -0
- package/dist/src/process-manager/interfaces/process-lifecycle.d.ts.map +1 -0
- package/dist/src/process-manager/interfaces/process-lifecycle.js +10 -0
- package/dist/src/process-manager/interfaces/process-lifecycle.js.map +1 -0
- package/dist/src/process-manager/interfaces/process-monitor.d.ts +118 -0
- package/dist/src/process-manager/interfaces/process-monitor.d.ts.map +1 -0
- package/dist/src/process-manager/interfaces/process-monitor.js +10 -0
- package/dist/src/process-manager/interfaces/process-monitor.js.map +1 -0
- package/dist/src/process-manager/interfaces/process-persistence.d.ts +125 -0
- package/dist/src/process-manager/interfaces/process-persistence.d.ts.map +1 -0
- package/dist/src/process-manager/interfaces/process-persistence.js +10 -0
- package/dist/src/process-manager/interfaces/process-persistence.js.map +1 -0
- package/dist/src/process-manager/managed-process-info.d.ts +307 -0
- package/dist/src/process-manager/managed-process-info.d.ts.map +1 -0
- package/dist/src/process-manager/managed-process-info.js +650 -0
- package/dist/src/process-manager/managed-process-info.js.map +1 -0
- package/dist/src/process-manager/process-group-manager.d.ts +103 -0
- package/dist/src/process-manager/process-group-manager.d.ts.map +1 -0
- package/dist/src/process-manager/process-group-manager.js +400 -0
- package/dist/src/process-manager/process-group-manager.js.map +1 -0
- package/dist/src/process-manager/process-lifecycle-manager.d.ts +68 -0
- package/dist/src/process-manager/process-lifecycle-manager.d.ts.map +1 -0
- package/dist/src/process-manager/process-lifecycle-manager.js +372 -0
- package/dist/src/process-manager/process-lifecycle-manager.js.map +1 -0
- package/dist/src/process-manager/process-manager.d.ts +296 -0
- package/dist/src/process-manager/process-manager.d.ts.map +1 -0
- package/dist/src/process-manager/process-manager.js +659 -0
- package/dist/src/process-manager/process-manager.js.map +1 -0
- package/dist/src/process-manager/process-monitor.d.ts +95 -0
- package/dist/src/process-manager/process-monitor.d.ts.map +1 -0
- package/dist/src/process-manager/process-monitor.js +357 -0
- package/dist/src/process-manager/process-monitor.js.map +1 -0
- package/dist/src/process-manager/process-persistence.d.ts +68 -0
- package/dist/src/process-manager/process-persistence.d.ts.map +1 -0
- package/dist/src/process-manager/process-persistence.js +364 -0
- package/dist/src/process-manager/process-persistence.js.map +1 -0
- package/dist/src/process-manager/utils/mutex.d.ts +82 -0
- package/dist/src/process-manager/utils/mutex.d.ts.map +1 -0
- package/dist/src/process-manager/utils/mutex.js +172 -0
- package/dist/src/process-manager/utils/mutex.js.map +1 -0
- package/dist/src/services/index.d.ts +8 -0
- package/dist/src/services/index.d.ts.map +1 -0
- package/dist/src/services/index.js +8 -0
- package/dist/src/services/index.js.map +1 -0
- package/dist/src/services/log-manager-config.d.ts +65 -0
- package/dist/src/services/log-manager-config.d.ts.map +1 -0
- package/dist/src/services/log-manager-config.js +145 -0
- package/dist/src/services/log-manager-config.js.map +1 -0
- package/dist/src/services/log-manager-factory.d.ts +134 -0
- package/dist/src/services/log-manager-factory.d.ts.map +1 -0
- package/dist/src/services/log-manager-factory.js +203 -0
- package/dist/src/services/log-manager-factory.js.map +1 -0
- package/dist/src/services/log-manager.d.ts +170 -0
- package/dist/src/services/log-manager.d.ts.map +1 -0
- package/dist/src/services/log-manager.js +1199 -0
- package/dist/src/services/log-manager.js.map +1 -0
- package/dist/src/services/log-path-validator.d.ts +121 -0
- package/dist/src/services/log-path-validator.d.ts.map +1 -0
- package/dist/src/services/log-path-validator.js +302 -0
- package/dist/src/services/log-path-validator.js.map +1 -0
- package/dist/src/services/process-log-integration.d.ts +62 -0
- package/dist/src/services/process-log-integration.d.ts.map +1 -0
- package/dist/src/services/process-log-integration.js +157 -0
- package/dist/src/services/process-log-integration.js.map +1 -0
- package/dist/src/shared/config.d.ts +67 -0
- package/dist/src/shared/config.d.ts.map +1 -0
- package/dist/src/shared/config.js +92 -0
- package/dist/src/shared/config.js.map +1 -0
- package/dist/src/shared/constants-streaming.d.ts +39 -0
- package/dist/src/shared/constants-streaming.d.ts.map +1 -0
- package/dist/src/shared/constants-streaming.js +39 -0
- package/dist/src/shared/constants-streaming.js.map +1 -0
- package/dist/src/shared/constants.d.ts +60 -0
- package/dist/src/shared/constants.d.ts.map +1 -0
- package/dist/src/shared/constants.js +71 -0
- package/dist/src/shared/constants.js.map +1 -0
- package/dist/src/shared/errors.d.ts +70 -0
- package/dist/src/shared/errors.d.ts.map +1 -0
- package/dist/src/shared/errors.js +101 -0
- package/dist/src/shared/errors.js.map +1 -0
- package/dist/src/shared/index.d.ts +14 -0
- package/dist/src/shared/index.d.ts.map +1 -0
- package/dist/src/shared/index.js +22 -0
- package/dist/src/shared/index.js.map +1 -0
- package/dist/src/shared/ipc.d.ts +402 -0
- package/dist/src/shared/ipc.d.ts.map +1 -0
- package/dist/src/shared/ipc.js +85 -0
- package/dist/src/shared/ipc.js.map +1 -0
- package/dist/src/shared/logger.d.ts +38 -0
- package/dist/src/shared/logger.d.ts.map +1 -0
- package/dist/src/shared/logger.js +139 -0
- package/dist/src/shared/logger.js.map +1 -0
- package/dist/src/shared/logs.d.ts +53 -0
- package/dist/src/shared/logs.d.ts.map +1 -0
- package/dist/src/shared/logs.js +26 -0
- package/dist/src/shared/logs.js.map +1 -0
- package/dist/src/shared/process.d.ts +102 -0
- package/dist/src/shared/process.d.ts.map +1 -0
- package/dist/src/shared/process.js +55 -0
- package/dist/src/shared/process.js.map +1 -0
- package/dist/src/shared/types.d.ts +15 -0
- package/dist/src/shared/types.d.ts.map +1 -0
- package/dist/src/shared/types.js +8 -0
- package/dist/src/shared/types.js.map +1 -0
- package/dist/src/types/index.d.ts +19 -0
- package/dist/src/types/index.d.ts.map +1 -0
- package/dist/src/types/index.js +5 -0
- package/dist/src/types/index.js.map +1 -0
- package/dist/src/utils/event-cleanup.d.ts +30 -0
- package/dist/src/utils/event-cleanup.d.ts.map +1 -0
- package/dist/src/utils/event-cleanup.js +32 -0
- package/dist/src/utils/event-cleanup.js.map +1 -0
- package/dist/src/utils/memory/memory-monitor.d.ts +126 -0
- package/dist/src/utils/memory/memory-monitor.d.ts.map +1 -0
- package/dist/src/utils/memory/memory-monitor.js +246 -0
- package/dist/src/utils/memory/memory-monitor.js.map +1 -0
- package/package.json +74 -0
|
@@ -0,0 +1,278 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ZombieReaper - Handles zombie process cleanup
|
|
3
|
+
*
|
|
4
|
+
* This class is responsible for:
|
|
5
|
+
* - Detecting zombie processes in the system
|
|
6
|
+
* - Reaping zombie child processes
|
|
7
|
+
* - Preventing zombie accumulation
|
|
8
|
+
*
|
|
9
|
+
* Following SOLID principles:
|
|
10
|
+
* - Single Responsibility: Only handles zombie process cleanup
|
|
11
|
+
* - Interface Segregation: Clean, focused interface
|
|
12
|
+
* - Dependency Inversion: Can be injected as a dependency
|
|
13
|
+
*/
|
|
14
|
+
import { EventEmitter } from 'events';
|
|
15
|
+
import { exec } from 'child_process';
|
|
16
|
+
import { promisify } from 'util';
|
|
17
|
+
const execAsync = promisify(exec);
|
|
18
|
+
export class ZombieReaper extends EventEmitter {
|
|
19
|
+
reapInterval = null;
|
|
20
|
+
isReaping = false;
|
|
21
|
+
maxReapAttempts = 3;
|
|
22
|
+
sigchldHandler = null;
|
|
23
|
+
constructor() {
|
|
24
|
+
super();
|
|
25
|
+
// Don't automatically set up signal handlers in test environment
|
|
26
|
+
if (process.env.NODE_ENV !== 'test') {
|
|
27
|
+
this.setupSignalHandlers();
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Set up SIGCHLD handler to automatically reap children
|
|
32
|
+
*/
|
|
33
|
+
setupSignalHandlers() {
|
|
34
|
+
// Store handler reference for cleanup
|
|
35
|
+
this.sigchldHandler = () => {
|
|
36
|
+
this.handleSigchld();
|
|
37
|
+
};
|
|
38
|
+
// Handle SIGCHLD to reap zombie children
|
|
39
|
+
process.on('SIGCHLD', this.sigchldHandler);
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Clean up signal handlers
|
|
43
|
+
*/
|
|
44
|
+
cleanupSignalHandlers() {
|
|
45
|
+
if (this.sigchldHandler) {
|
|
46
|
+
process.removeListener('SIGCHLD', this.sigchldHandler);
|
|
47
|
+
this.sigchldHandler = null;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Handle SIGCHLD signal - called when a child process dies
|
|
52
|
+
*/
|
|
53
|
+
handleSigchld() {
|
|
54
|
+
// In Node.js, we need to use waitpid through a native binding
|
|
55
|
+
// or rely on child_process events for proper reaping
|
|
56
|
+
// For now, trigger a reap cycle
|
|
57
|
+
this.reapZombies().catch((error) => {
|
|
58
|
+
console.error('[ZombieReaper] Error handling SIGCHLD:', error);
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Start automatic zombie reaping
|
|
63
|
+
*/
|
|
64
|
+
startReaping(intervalMs = 30000) {
|
|
65
|
+
if (this.isReaping) {
|
|
66
|
+
console.log('[ZombieReaper] Already reaping zombies');
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
this.isReaping = true;
|
|
70
|
+
console.log(`[ZombieReaper] Starting zombie reaper (interval: ${intervalMs}ms)`);
|
|
71
|
+
// Initial reap
|
|
72
|
+
this.reapZombies().catch((error) => {
|
|
73
|
+
console.error('[ZombieReaper] Initial reap failed:', error);
|
|
74
|
+
});
|
|
75
|
+
// Set up periodic reaping
|
|
76
|
+
this.reapInterval = setInterval(async () => {
|
|
77
|
+
try {
|
|
78
|
+
const reapedCount = await this.reapZombies();
|
|
79
|
+
if (reapedCount > 0) {
|
|
80
|
+
console.log(`[ZombieReaper] Reaped ${reapedCount} zombie processes`);
|
|
81
|
+
this.emit('zombies-reaped', reapedCount);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
catch (error) {
|
|
85
|
+
console.error('[ZombieReaper] Reap cycle failed:', error);
|
|
86
|
+
this.emit('reap-error', error);
|
|
87
|
+
}
|
|
88
|
+
}, intervalMs);
|
|
89
|
+
this.emit('reaper-started');
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Stop automatic zombie reaping
|
|
93
|
+
*/
|
|
94
|
+
stopReaping() {
|
|
95
|
+
if (!this.isReaping) {
|
|
96
|
+
// Still clean up signal handlers even if not actively reaping
|
|
97
|
+
this.cleanupSignalHandlers();
|
|
98
|
+
return;
|
|
99
|
+
}
|
|
100
|
+
this.isReaping = false;
|
|
101
|
+
if (this.reapInterval) {
|
|
102
|
+
clearInterval(this.reapInterval);
|
|
103
|
+
this.reapInterval = null;
|
|
104
|
+
}
|
|
105
|
+
// Clean up signal handlers
|
|
106
|
+
this.cleanupSignalHandlers();
|
|
107
|
+
console.log('[ZombieReaper] Stopped zombie reaper');
|
|
108
|
+
this.emit('reaper-stopped');
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Detect zombie processes in the system
|
|
112
|
+
*/
|
|
113
|
+
async detectZombies() {
|
|
114
|
+
try {
|
|
115
|
+
// Use ps to find zombie processes
|
|
116
|
+
// Format: PID PPID STATE COMMAND
|
|
117
|
+
const { stdout } = await execAsync('ps axo pid,ppid,state,command | grep -E "Z|<defunct>"');
|
|
118
|
+
const zombies = [];
|
|
119
|
+
const lines = stdout.trim().split('\n');
|
|
120
|
+
const seenPids = new Set();
|
|
121
|
+
for (const line of lines) {
|
|
122
|
+
// Skip grep process itself
|
|
123
|
+
if (line.includes('grep -E'))
|
|
124
|
+
continue;
|
|
125
|
+
const match = line.match(/^\s*(\d+)\s+(\d+)\s+([ZT])\S*\s+(.+)$/);
|
|
126
|
+
if (match) {
|
|
127
|
+
const pid = parseInt(match[1], 10);
|
|
128
|
+
const ppid = parseInt(match[2], 10);
|
|
129
|
+
const state = match[3];
|
|
130
|
+
const command = match[4];
|
|
131
|
+
// Avoid duplicates
|
|
132
|
+
if (seenPids.has(pid))
|
|
133
|
+
continue;
|
|
134
|
+
seenPids.add(pid);
|
|
135
|
+
// Check if it's truly a zombie
|
|
136
|
+
if (state === 'Z' || command.includes('<defunct>')) {
|
|
137
|
+
zombies.push({
|
|
138
|
+
pid,
|
|
139
|
+
ppid,
|
|
140
|
+
command: command.replace('<defunct>', '').trim(),
|
|
141
|
+
state: 'Z',
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
return zombies;
|
|
147
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
148
|
+
}
|
|
149
|
+
catch (error) {
|
|
150
|
+
// grep returns exit code 1 if no matches found
|
|
151
|
+
if (error.code === 1 &&
|
|
152
|
+
(error.stdout === '' || error.stdout === undefined)) {
|
|
153
|
+
return []; // No zombies found
|
|
154
|
+
}
|
|
155
|
+
throw error;
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* Check if a specific process is a zombie
|
|
160
|
+
*/
|
|
161
|
+
async isZombie(pid) {
|
|
162
|
+
try {
|
|
163
|
+
const { stdout } = await execAsync(`ps -p ${pid} -o state=`);
|
|
164
|
+
const state = stdout.trim();
|
|
165
|
+
return state === 'Z' || state.startsWith('Z');
|
|
166
|
+
}
|
|
167
|
+
catch {
|
|
168
|
+
// Process doesn't exist or error checking
|
|
169
|
+
return false;
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* Reap zombie processes
|
|
174
|
+
*/
|
|
175
|
+
async reapZombies() {
|
|
176
|
+
const zombies = await this.detectZombies();
|
|
177
|
+
let reapedCount = 0;
|
|
178
|
+
for (const zombie of zombies) {
|
|
179
|
+
try {
|
|
180
|
+
// Check if we're the parent of this zombie
|
|
181
|
+
if (zombie.ppid === process.pid) {
|
|
182
|
+
// We're the parent, we can reap it directly
|
|
183
|
+
// In Node.js, this typically happens automatically when using child_process
|
|
184
|
+
console.log(`[ZombieReaper] Reaping our zombie child: PID ${zombie.pid}`);
|
|
185
|
+
// Try to reap using waitpid equivalent
|
|
186
|
+
await this.reapChild(zombie.pid);
|
|
187
|
+
reapedCount++;
|
|
188
|
+
}
|
|
189
|
+
else if (zombie.ppid === 1) {
|
|
190
|
+
// Init is the parent, it should handle it
|
|
191
|
+
console.log(`[ZombieReaper] Zombie PID ${zombie.pid} is owned by init, skipping`);
|
|
192
|
+
}
|
|
193
|
+
else {
|
|
194
|
+
// Try to notify the parent to reap its child
|
|
195
|
+
try {
|
|
196
|
+
process.kill(zombie.ppid, 'SIGCHLD');
|
|
197
|
+
console.log(`[ZombieReaper] Sent SIGCHLD to parent PID ${zombie.ppid} for zombie ${zombie.pid}`);
|
|
198
|
+
}
|
|
199
|
+
catch {
|
|
200
|
+
console.log(`[ZombieReaper] Parent PID ${zombie.ppid} not accessible for zombie ${zombie.pid}`);
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
catch (error) {
|
|
205
|
+
console.error(`[ZombieReaper] Failed to reap zombie PID ${zombie.pid}:`, error);
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
// Also check for any terminated children we haven't reaped
|
|
209
|
+
reapedCount += await this.reapTerminatedChildren();
|
|
210
|
+
return reapedCount;
|
|
211
|
+
}
|
|
212
|
+
/**
|
|
213
|
+
* Reap a specific child process
|
|
214
|
+
*/
|
|
215
|
+
async reapChild(pid) {
|
|
216
|
+
// In a real implementation, we would use waitpid() system call
|
|
217
|
+
// For Node.js, we rely on automatic reaping when child_process objects are handled
|
|
218
|
+
// This is a placeholder for demonstration
|
|
219
|
+
try {
|
|
220
|
+
// Try to send signal 0 to check if process exists
|
|
221
|
+
process.kill(pid, 0);
|
|
222
|
+
// If we get here, process still exists as zombie
|
|
223
|
+
// In production, would use native binding to call waitpid()
|
|
224
|
+
console.log(`[ZombieReaper] Would reap zombie PID ${pid} with waitpid()`);
|
|
225
|
+
// For testing, we can try to force cleanup
|
|
226
|
+
await execAsync(`kill -9 ${pid} 2>/dev/null || true`);
|
|
227
|
+
}
|
|
228
|
+
catch {
|
|
229
|
+
// Process doesn't exist or already reaped
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
/**
|
|
233
|
+
* Reap any terminated children that haven't been reaped yet
|
|
234
|
+
*/
|
|
235
|
+
async reapTerminatedChildren() {
|
|
236
|
+
let reapedCount = 0;
|
|
237
|
+
// In Node.js, we don't have direct access to waitpid
|
|
238
|
+
// This would require a native addon in production
|
|
239
|
+
// For now, we'll use a workaround
|
|
240
|
+
try {
|
|
241
|
+
// Check if any of our children are zombies
|
|
242
|
+
const { stdout } = await execAsync(`ps --ppid ${process.pid} -o pid,state | grep Z`);
|
|
243
|
+
const lines = stdout.trim().split('\n');
|
|
244
|
+
for (const line of lines) {
|
|
245
|
+
const match = line.match(/^\s*(\d+)\s+Z/);
|
|
246
|
+
if (match) {
|
|
247
|
+
const childPid = parseInt(match[1], 10);
|
|
248
|
+
await this.reapChild(childPid);
|
|
249
|
+
reapedCount++;
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
catch {
|
|
254
|
+
// No zombie children or error checking
|
|
255
|
+
}
|
|
256
|
+
return reapedCount;
|
|
257
|
+
}
|
|
258
|
+
/**
|
|
259
|
+
* Monitor system for zombie accumulation
|
|
260
|
+
*/
|
|
261
|
+
async monitorZombieCount() {
|
|
262
|
+
const zombies = await this.detectZombies();
|
|
263
|
+
const count = zombies.length;
|
|
264
|
+
if (count > 10) {
|
|
265
|
+
console.warn(`[ZombieReaper] WARNING: High zombie count detected: ${count}`);
|
|
266
|
+
this.emit('high-zombie-count', count);
|
|
267
|
+
}
|
|
268
|
+
return count;
|
|
269
|
+
}
|
|
270
|
+
/**
|
|
271
|
+
* Clean up resources on shutdown
|
|
272
|
+
*/
|
|
273
|
+
cleanup() {
|
|
274
|
+
this.stopReaping();
|
|
275
|
+
this.removeAllListeners();
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
//# sourceMappingURL=zombie-reaper.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"zombie-reaper.js","sourceRoot":"","sources":["../../../src/daemon/zombie-reaper.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Process Manager Module
|
|
3
|
+
*
|
|
4
|
+
* This module provides process management functionality for the procman system.
|
|
5
|
+
* It includes classes for managing individual processes and orchestrating
|
|
6
|
+
* multiple processes with lifecycle management, monitoring, and statistics.
|
|
7
|
+
*/
|
|
8
|
+
export { ProcessManager } from './process-manager.js';
|
|
9
|
+
export { ManagedProcessInfo } from './managed-process-info.js';
|
|
10
|
+
export type { ProcessConfig } from './process-manager.js';
|
|
11
|
+
export type { ProcessStatistics, ManagedProcessEvents, } from './managed-process-info.js';
|
|
12
|
+
export type { ProcessInfo, ProcessStatus } from '../shared/process.js';
|
|
13
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/process-manager/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAG/D,YAAY,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAE1D,YAAY,EACV,iBAAiB,EACjB,oBAAoB,GACrB,MAAM,2BAA2B,CAAC;AAGnC,YAAY,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Process Manager Module
|
|
3
|
+
*
|
|
4
|
+
* This module provides process management functionality for the procman system.
|
|
5
|
+
* It includes classes for managing individual processes and orchestrating
|
|
6
|
+
* multiple processes with lifecycle management, monitoring, and statistics.
|
|
7
|
+
*/
|
|
8
|
+
// Main exports
|
|
9
|
+
export { ProcessManager } from './process-manager.js';
|
|
10
|
+
export { ManagedProcessInfo } from './managed-process-info.js';
|
|
11
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/process-manager/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,eAAe;AACf,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Process Manager Interface Exports
|
|
3
|
+
*
|
|
4
|
+
* This module exports all interfaces for the process manager components.
|
|
5
|
+
*/
|
|
6
|
+
export * from './process-lifecycle.js';
|
|
7
|
+
export * from './process-monitor.js';
|
|
8
|
+
export * from './process-persistence.js';
|
|
9
|
+
export * from './process-group.js';
|
|
10
|
+
/**
|
|
11
|
+
* Main process manager interface that coordinates all components
|
|
12
|
+
*/
|
|
13
|
+
export interface MainProcessManager {
|
|
14
|
+
/** Lifecycle management component */
|
|
15
|
+
lifecycle: import('./process-lifecycle').ProcessLifecycleManager;
|
|
16
|
+
/** Monitoring component */
|
|
17
|
+
monitor: import('./process-monitor').ProcessMonitor;
|
|
18
|
+
/** Persistence component */
|
|
19
|
+
persistence: import('./process-persistence').ProcessPersistence;
|
|
20
|
+
/** Group management component */
|
|
21
|
+
groups: import('./process-group').ProcessGroupManager;
|
|
22
|
+
/**
|
|
23
|
+
* Initialize all components
|
|
24
|
+
*/
|
|
25
|
+
initialize(): Promise<void>;
|
|
26
|
+
/**
|
|
27
|
+
* Cleanup all components
|
|
28
|
+
*/
|
|
29
|
+
cleanup(): Promise<void>;
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/process-manager/interfaces/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,cAAc,wBAAwB,CAAC;AAGvC,cAAc,sBAAsB,CAAC;AAGrC,cAAc,0BAA0B,CAAC;AAGzC,cAAc,oBAAoB,CAAC;AAEnC;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,qCAAqC;IACrC,SAAS,EAAE,OAAO,qBAAqB,EAAE,uBAAuB,CAAC;IAEjE,2BAA2B;IAC3B,OAAO,EAAE,OAAO,mBAAmB,EAAE,cAAc,CAAC;IAEpD,4BAA4B;IAC5B,WAAW,EAAE,OAAO,uBAAuB,EAAE,kBAAkB,CAAC;IAEhE,iCAAiC;IACjC,MAAM,EAAE,OAAO,iBAAiB,EAAE,mBAAmB,CAAC;IAEtD;;OAEG;IACH,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAE5B;;OAEG;IACH,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1B"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Process Manager Interface Exports
|
|
3
|
+
*
|
|
4
|
+
* This module exports all interfaces for the process manager components.
|
|
5
|
+
*/
|
|
6
|
+
// Lifecycle management
|
|
7
|
+
export * from './process-lifecycle.js';
|
|
8
|
+
// Process monitoring
|
|
9
|
+
export * from './process-monitor.js';
|
|
10
|
+
// Persistence management
|
|
11
|
+
export * from './process-persistence.js';
|
|
12
|
+
// Group management
|
|
13
|
+
export * from './process-group.js';
|
|
14
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/process-manager/interfaces/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,uBAAuB;AACvB,cAAc,wBAAwB,CAAC;AAEvC,qBAAqB;AACrB,cAAc,sBAAsB,CAAC;AAErC,yBAAyB;AACzB,cAAc,0BAA0B,CAAC;AAEzC,mBAAmB;AACnB,cAAc,oBAAoB,CAAC"}
|
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Process Group Management Interface
|
|
3
|
+
*
|
|
4
|
+
* Handles namespace-based grouping and batch operations:
|
|
5
|
+
* - Group management by namespace
|
|
6
|
+
* - Batch operations on process groups
|
|
7
|
+
* - Dependency management foundation
|
|
8
|
+
*/
|
|
9
|
+
import { ProcessInfo } from '../../shared/process.js';
|
|
10
|
+
/**
|
|
11
|
+
* Namespace status summary
|
|
12
|
+
*/
|
|
13
|
+
export interface NamespaceStatus {
|
|
14
|
+
/** Namespace name */
|
|
15
|
+
namespace: string;
|
|
16
|
+
/** Total number of processes */
|
|
17
|
+
total: number;
|
|
18
|
+
/** Number of online processes */
|
|
19
|
+
online: number;
|
|
20
|
+
/** Number of stopped processes */
|
|
21
|
+
stopped: number;
|
|
22
|
+
/** Number of errored processes */
|
|
23
|
+
errored: number;
|
|
24
|
+
/** Number of processes in other states */
|
|
25
|
+
other: number;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Result of a batch operation
|
|
29
|
+
*/
|
|
30
|
+
export interface BatchOperationResult {
|
|
31
|
+
/** Overall success status */
|
|
32
|
+
success: boolean;
|
|
33
|
+
/** Results for individual processes */
|
|
34
|
+
results: Array<{
|
|
35
|
+
/** Process name */
|
|
36
|
+
name: string;
|
|
37
|
+
/** Whether this specific operation succeeded */
|
|
38
|
+
success: boolean;
|
|
39
|
+
/** Error message if this operation failed */
|
|
40
|
+
error?: string;
|
|
41
|
+
}>;
|
|
42
|
+
/** Summary of successful operations */
|
|
43
|
+
successCount: number;
|
|
44
|
+
/** Summary of failed operations */
|
|
45
|
+
failureCount: number;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Process dependency configuration
|
|
49
|
+
*/
|
|
50
|
+
export interface ProcessDependency {
|
|
51
|
+
/** Process name that depends on others */
|
|
52
|
+
name: string;
|
|
53
|
+
/** Array of process names this process depends on */
|
|
54
|
+
dependsOn: string[];
|
|
55
|
+
/** Maximum wait time in milliseconds for dependencies to start */
|
|
56
|
+
waitTimeout?: number;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Dependency resolution result
|
|
60
|
+
*/
|
|
61
|
+
export interface DependencyResolutionResult {
|
|
62
|
+
/** Processes that can be started immediately (no dependencies) */
|
|
63
|
+
independent: string[];
|
|
64
|
+
/** Processes with dependencies, in order of dependency levels */
|
|
65
|
+
dependent: string[][];
|
|
66
|
+
/** Processes with circular dependencies */
|
|
67
|
+
circular: string[];
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Interface for process group management
|
|
71
|
+
*/
|
|
72
|
+
export interface ProcessGroupManager {
|
|
73
|
+
/**
|
|
74
|
+
* Get all available namespaces
|
|
75
|
+
* @returns Array of namespace names
|
|
76
|
+
*/
|
|
77
|
+
getNamespaces(): string[];
|
|
78
|
+
/**
|
|
79
|
+
* Get status summary for a namespace
|
|
80
|
+
* @param namespace Namespace name
|
|
81
|
+
* @returns Status summary
|
|
82
|
+
*/
|
|
83
|
+
getNamespaceStatus(namespace: string): NamespaceStatus;
|
|
84
|
+
/**
|
|
85
|
+
* Get all processes in a namespace
|
|
86
|
+
* @param namespace Namespace name
|
|
87
|
+
* @returns Array of process information
|
|
88
|
+
*/
|
|
89
|
+
getProcessesByNamespace(namespace: string): ProcessInfo[];
|
|
90
|
+
/**
|
|
91
|
+
* Get process names in a namespace
|
|
92
|
+
* @param namespace Namespace name
|
|
93
|
+
* @returns Array of process names
|
|
94
|
+
*/
|
|
95
|
+
getProcessNamesByNamespace(namespace: string): string[];
|
|
96
|
+
/**
|
|
97
|
+
* Start all processes in a namespace
|
|
98
|
+
* @param namespace Namespace name
|
|
99
|
+
* @returns Promise resolving to batch operation result
|
|
100
|
+
*/
|
|
101
|
+
startNamespace(namespace: string): Promise<BatchOperationResult>;
|
|
102
|
+
/**
|
|
103
|
+
* Stop all processes in a namespace
|
|
104
|
+
* @param namespace Namespace name
|
|
105
|
+
* @returns Promise resolving to batch operation result
|
|
106
|
+
*/
|
|
107
|
+
stopNamespace(namespace: string): Promise<BatchOperationResult>;
|
|
108
|
+
/**
|
|
109
|
+
* Restart all processes in a namespace
|
|
110
|
+
* @param namespace Namespace name
|
|
111
|
+
* @returns Promise resolving to batch operation result
|
|
112
|
+
*/
|
|
113
|
+
restartNamespace(namespace: string): Promise<BatchOperationResult>;
|
|
114
|
+
/**
|
|
115
|
+
* Start multiple processes
|
|
116
|
+
* @param names Array of process names
|
|
117
|
+
* @returns Promise resolving to batch operation result
|
|
118
|
+
*/
|
|
119
|
+
startProcesses(names: string[]): Promise<BatchOperationResult>;
|
|
120
|
+
/**
|
|
121
|
+
* Stop multiple processes
|
|
122
|
+
* @param names Array of process names
|
|
123
|
+
* @returns Promise resolving to batch operation result
|
|
124
|
+
*/
|
|
125
|
+
stopProcesses(names: string[]): Promise<BatchOperationResult>;
|
|
126
|
+
/**
|
|
127
|
+
* Restart multiple processes
|
|
128
|
+
* @param names Array of process names
|
|
129
|
+
* @returns Promise resolving to batch operation result
|
|
130
|
+
*/
|
|
131
|
+
restartProcesses(names: string[]): Promise<BatchOperationResult>;
|
|
132
|
+
/**
|
|
133
|
+
* Configure a process dependency
|
|
134
|
+
* @param dependency Dependency configuration
|
|
135
|
+
*/
|
|
136
|
+
configureDependency(dependency: ProcessDependency): void;
|
|
137
|
+
/**
|
|
138
|
+
* Remove a process dependency
|
|
139
|
+
* @param name Process name
|
|
140
|
+
*/
|
|
141
|
+
removeDependency(name: string): void;
|
|
142
|
+
/**
|
|
143
|
+
* Get dependency configuration for a process
|
|
144
|
+
* @param name Process name
|
|
145
|
+
* @returns Dependency configuration or undefined
|
|
146
|
+
*/
|
|
147
|
+
getDependency(name: string): ProcessDependency | undefined;
|
|
148
|
+
/**
|
|
149
|
+
* Get all dependency configurations
|
|
150
|
+
* @returns Array of dependency configurations
|
|
151
|
+
*/
|
|
152
|
+
getAllDependencies(): ProcessDependency[];
|
|
153
|
+
/**
|
|
154
|
+
* Resolve dependencies for a set of processes
|
|
155
|
+
* @param names Array of process names
|
|
156
|
+
* @returns Dependency resolution result
|
|
157
|
+
*/
|
|
158
|
+
resolveDependencies(names: string[]): DependencyResolutionResult;
|
|
159
|
+
/**
|
|
160
|
+
* Start processes with dependency resolution
|
|
161
|
+
* @param names Array of process names
|
|
162
|
+
* @returns Promise resolving to batch operation result
|
|
163
|
+
*/
|
|
164
|
+
startProcessesWithDependencies(names: string[]): Promise<BatchOperationResult>;
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Event types emitted by ProcessGroupManager
|
|
168
|
+
*/
|
|
169
|
+
export interface ProcessGroupEvents {
|
|
170
|
+
/** Namespace operation started */
|
|
171
|
+
'namespace:operation-start': {
|
|
172
|
+
namespace: string;
|
|
173
|
+
operation: 'start' | 'stop' | 'restart';
|
|
174
|
+
};
|
|
175
|
+
/** Namespace operation completed */
|
|
176
|
+
'namespace:operation-complete': {
|
|
177
|
+
namespace: string;
|
|
178
|
+
operation: 'start' | 'stop' | 'restart';
|
|
179
|
+
result: BatchOperationResult;
|
|
180
|
+
};
|
|
181
|
+
/** Batch operation started */
|
|
182
|
+
'batch:operation-start': {
|
|
183
|
+
operation: 'start' | 'stop' | 'restart';
|
|
184
|
+
processCount: number;
|
|
185
|
+
};
|
|
186
|
+
/** Batch operation completed */
|
|
187
|
+
'batch:operation-complete': {
|
|
188
|
+
operation: 'start' | 'stop' | 'restart';
|
|
189
|
+
result: BatchOperationResult;
|
|
190
|
+
};
|
|
191
|
+
/** Dependency configured */
|
|
192
|
+
'dependency:configured': {
|
|
193
|
+
dependency: ProcessDependency;
|
|
194
|
+
};
|
|
195
|
+
/** Dependency removed */
|
|
196
|
+
'dependency:removed': {
|
|
197
|
+
name: string;
|
|
198
|
+
};
|
|
199
|
+
}
|
|
200
|
+
//# sourceMappingURL=process-group.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"process-group.d.ts","sourceRoot":"","sources":["../../../../src/process-manager/interfaces/process-group.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Process Group Management Interface
|
|
3
|
+
*
|
|
4
|
+
* Handles namespace-based grouping and batch operations:
|
|
5
|
+
* - Group management by namespace
|
|
6
|
+
* - Batch operations on process groups
|
|
7
|
+
* - Dependency management foundation
|
|
8
|
+
*/
|
|
9
|
+
export {};
|
|
10
|
+
//# sourceMappingURL=process-group.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"process-group.js","sourceRoot":"","sources":["../../../../src/process-manager/interfaces/process-group.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG"}
|