@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,372 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ProcessLifecycleManager - Handles process lifecycle operations
|
|
3
|
+
*
|
|
4
|
+
* This class is responsible for:
|
|
5
|
+
* - Starting and stopping processes
|
|
6
|
+
* - Signal handling and graceful shutdown
|
|
7
|
+
* - Child process management
|
|
8
|
+
* - Process state transitions
|
|
9
|
+
* - Mutex-based concurrency control
|
|
10
|
+
*/
|
|
11
|
+
import { EventEmitter } from 'events';
|
|
12
|
+
import { spawn } from 'child_process';
|
|
13
|
+
import { GRACEFUL_SHUTDOWN_TIMEOUT, FORCE_KILL_TIMEOUT, GRACEFUL_SHUTDOWN_SIGNAL, FORCE_KILL_SIGNAL, } from '../shared/constants.js';
|
|
14
|
+
import { KeyedMutex, withKeyedLock } from './utils/mutex.js';
|
|
15
|
+
/**
|
|
16
|
+
* ProcessLifecycleManager implementation
|
|
17
|
+
*/
|
|
18
|
+
export class ProcessLifecycleManagerImpl extends EventEmitter {
|
|
19
|
+
processes;
|
|
20
|
+
childProcesses;
|
|
21
|
+
operationMutex;
|
|
22
|
+
constructor(processes, childProcesses) {
|
|
23
|
+
super();
|
|
24
|
+
this.processes = processes;
|
|
25
|
+
this.childProcesses = childProcesses;
|
|
26
|
+
this.operationMutex = new KeyedMutex();
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Start a process with the given configuration
|
|
30
|
+
*/
|
|
31
|
+
async startProcess(name) {
|
|
32
|
+
return withKeyedLock(this.operationMutex, name, async () => {
|
|
33
|
+
return this.startProcessInternal(name);
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Internal start process implementation (no mutex)
|
|
38
|
+
*/
|
|
39
|
+
async startProcessInternal(name) {
|
|
40
|
+
const managedProcess = this.processes.get(name);
|
|
41
|
+
if (!managedProcess) {
|
|
42
|
+
return {
|
|
43
|
+
success: false,
|
|
44
|
+
error: `Process '${name}' not found. Use initializeProcess() first.`,
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
const config = managedProcess.getConfig();
|
|
48
|
+
const currentStatus = managedProcess.getStatus();
|
|
49
|
+
// Check if process is already running or starting
|
|
50
|
+
if (currentStatus === 'online' || currentStatus === 'starting') {
|
|
51
|
+
return {
|
|
52
|
+
success: false,
|
|
53
|
+
error: `Process '${name}' is already ${currentStatus}`,
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
return new Promise((resolve) => {
|
|
57
|
+
try {
|
|
58
|
+
// Set status to starting
|
|
59
|
+
managedProcess.setStatus('starting');
|
|
60
|
+
// Determine the command and arguments
|
|
61
|
+
let command;
|
|
62
|
+
let commandArgs;
|
|
63
|
+
// If script ends with .js, .mjs, or .cjs, run it with node
|
|
64
|
+
if (config.script.match(/\.(js|mjs|cjs)$/i)) {
|
|
65
|
+
command = process.execPath; // Use the same node binary that's running this process
|
|
66
|
+
commandArgs = [config.script, ...config.args];
|
|
67
|
+
}
|
|
68
|
+
else {
|
|
69
|
+
command = config.script;
|
|
70
|
+
commandArgs = config.args;
|
|
71
|
+
}
|
|
72
|
+
// Spawn the child process
|
|
73
|
+
const childProcess = spawn(command, commandArgs, {
|
|
74
|
+
cwd: config.cwd,
|
|
75
|
+
env: config.env,
|
|
76
|
+
detached: false,
|
|
77
|
+
stdio: ['ignore', 'pipe', 'pipe'], // stdin ignored, stdout/stderr captured
|
|
78
|
+
});
|
|
79
|
+
// Store the child process reference
|
|
80
|
+
this.childProcesses.set(name, childProcess);
|
|
81
|
+
// Handle spawn errors
|
|
82
|
+
childProcess.on('error', (error) => {
|
|
83
|
+
managedProcess.setStatus('errored');
|
|
84
|
+
managedProcess.emitError(error);
|
|
85
|
+
this.childProcesses.delete(name);
|
|
86
|
+
this.emit('process:error', name, error);
|
|
87
|
+
resolve({
|
|
88
|
+
success: false,
|
|
89
|
+
error: error.message,
|
|
90
|
+
});
|
|
91
|
+
});
|
|
92
|
+
// Handle successful spawn
|
|
93
|
+
childProcess.on('spawn', () => {
|
|
94
|
+
// Set up remaining event handlers
|
|
95
|
+
this.setupChildProcessEventHandlers(name, childProcess, managedProcess);
|
|
96
|
+
// Handle process startup
|
|
97
|
+
const pid = childProcess.pid;
|
|
98
|
+
if (!pid) {
|
|
99
|
+
const error = new Error(`Failed to get PID for process '${name}'`);
|
|
100
|
+
managedProcess.setStatus('errored');
|
|
101
|
+
managedProcess.emitError(error);
|
|
102
|
+
this.childProcesses.delete(name);
|
|
103
|
+
this.emit('process:error', name, error);
|
|
104
|
+
resolve({
|
|
105
|
+
success: false,
|
|
106
|
+
error: error.message,
|
|
107
|
+
});
|
|
108
|
+
return;
|
|
109
|
+
}
|
|
110
|
+
// Set process info
|
|
111
|
+
managedProcess.emitStart(pid);
|
|
112
|
+
managedProcess.setStatus('online');
|
|
113
|
+
this.emit('process:started', name, pid);
|
|
114
|
+
resolve({
|
|
115
|
+
success: true,
|
|
116
|
+
pid,
|
|
117
|
+
});
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
catch (error) {
|
|
121
|
+
// Handle synchronous startup error
|
|
122
|
+
managedProcess.setStatus('errored');
|
|
123
|
+
const errorInstance = error instanceof Error ? error : new Error(String(error));
|
|
124
|
+
managedProcess.emitError(errorInstance);
|
|
125
|
+
this.childProcesses.delete(name);
|
|
126
|
+
this.emit('process:error', name, errorInstance);
|
|
127
|
+
resolve({
|
|
128
|
+
success: false,
|
|
129
|
+
error: errorInstance.message,
|
|
130
|
+
});
|
|
131
|
+
}
|
|
132
|
+
});
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Stop a running process gracefully
|
|
136
|
+
*/
|
|
137
|
+
async stopProcess(name) {
|
|
138
|
+
return withKeyedLock(this.operationMutex, name, async () => {
|
|
139
|
+
return this.stopProcessInternal(name);
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Internal stop process implementation (no mutex)
|
|
144
|
+
*/
|
|
145
|
+
async stopProcessInternal(name) {
|
|
146
|
+
const managedProcess = this.processes.get(name);
|
|
147
|
+
if (!managedProcess) {
|
|
148
|
+
return {
|
|
149
|
+
success: false,
|
|
150
|
+
error: `Process '${name}' not found`,
|
|
151
|
+
};
|
|
152
|
+
}
|
|
153
|
+
const currentStatus = managedProcess.getStatus();
|
|
154
|
+
if (currentStatus === 'stopped' || currentStatus === 'errored') {
|
|
155
|
+
return {
|
|
156
|
+
success: true,
|
|
157
|
+
metadata: { wasAlreadyStopped: true },
|
|
158
|
+
};
|
|
159
|
+
}
|
|
160
|
+
const childProcess = this.childProcesses.get(name);
|
|
161
|
+
if (!childProcess) {
|
|
162
|
+
managedProcess.setStatus('stopped');
|
|
163
|
+
return {
|
|
164
|
+
success: true,
|
|
165
|
+
metadata: { wasAlreadyStopped: true },
|
|
166
|
+
};
|
|
167
|
+
}
|
|
168
|
+
return new Promise((resolve) => {
|
|
169
|
+
let resolved = false;
|
|
170
|
+
let forceKillTimeout = null;
|
|
171
|
+
// Handle process exit
|
|
172
|
+
const handleExit = (code, signal) => {
|
|
173
|
+
if (resolved)
|
|
174
|
+
return;
|
|
175
|
+
resolved = true;
|
|
176
|
+
if (forceKillTimeout) {
|
|
177
|
+
clearTimeout(forceKillTimeout);
|
|
178
|
+
}
|
|
179
|
+
managedProcess.setStatus('stopped');
|
|
180
|
+
managedProcess.emitStop(code);
|
|
181
|
+
this.childProcesses.delete(name);
|
|
182
|
+
this.emit('process:stopped', name, code, signal);
|
|
183
|
+
resolve({
|
|
184
|
+
success: true,
|
|
185
|
+
metadata: { exitCode: code, signal },
|
|
186
|
+
});
|
|
187
|
+
};
|
|
188
|
+
// Set status to stopping
|
|
189
|
+
managedProcess.setStatus('stopping');
|
|
190
|
+
// Remove existing exit handler and add our own
|
|
191
|
+
childProcess.removeAllListeners('exit');
|
|
192
|
+
childProcess.once('exit', handleExit);
|
|
193
|
+
// Try graceful shutdown first
|
|
194
|
+
const killed = childProcess.kill(GRACEFUL_SHUTDOWN_SIGNAL);
|
|
195
|
+
if (!killed) {
|
|
196
|
+
// Process already died
|
|
197
|
+
handleExit(null, null);
|
|
198
|
+
return;
|
|
199
|
+
}
|
|
200
|
+
// Set timeout for force kill
|
|
201
|
+
forceKillTimeout = setTimeout(() => {
|
|
202
|
+
if (!resolved) {
|
|
203
|
+
console.warn(`Process '${name}' did not exit gracefully, sending SIGKILL`);
|
|
204
|
+
childProcess.kill(FORCE_KILL_SIGNAL);
|
|
205
|
+
// Set another timeout in case SIGKILL doesn't work
|
|
206
|
+
setTimeout(() => {
|
|
207
|
+
if (!resolved) {
|
|
208
|
+
resolved = true;
|
|
209
|
+
console.error(`Failed to kill process '${name}'`);
|
|
210
|
+
managedProcess.setStatus('errored');
|
|
211
|
+
this.emit('process:error', name, new Error('Failed to kill process'));
|
|
212
|
+
resolve({
|
|
213
|
+
success: false,
|
|
214
|
+
error: 'Failed to kill process after timeout',
|
|
215
|
+
});
|
|
216
|
+
}
|
|
217
|
+
}, FORCE_KILL_TIMEOUT);
|
|
218
|
+
}
|
|
219
|
+
}, GRACEFUL_SHUTDOWN_TIMEOUT);
|
|
220
|
+
});
|
|
221
|
+
}
|
|
222
|
+
/**
|
|
223
|
+
* Restart a process (stop then start)
|
|
224
|
+
*/
|
|
225
|
+
async restartProcess(name) {
|
|
226
|
+
// We acquire the lock for the entire restart operation
|
|
227
|
+
return withKeyedLock(this.operationMutex, name, async () => {
|
|
228
|
+
// Call the internal methods that don't acquire locks again
|
|
229
|
+
const stopResult = await this.stopProcessInternal(name);
|
|
230
|
+
if (!stopResult.success) {
|
|
231
|
+
return stopResult;
|
|
232
|
+
}
|
|
233
|
+
// Wait a bit before starting again
|
|
234
|
+
await new Promise((resolve) => setTimeout(resolve, 100));
|
|
235
|
+
const startResult = await this.startProcessInternal(name);
|
|
236
|
+
if (startResult.success) {
|
|
237
|
+
const managedProcess = this.processes.get(name);
|
|
238
|
+
if (managedProcess) {
|
|
239
|
+
managedProcess.recordRestart();
|
|
240
|
+
this.emit('process:restart', name);
|
|
241
|
+
this.emit('process:restarted', name);
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
return startResult;
|
|
245
|
+
});
|
|
246
|
+
}
|
|
247
|
+
/**
|
|
248
|
+
* Send a signal to a process
|
|
249
|
+
*/
|
|
250
|
+
async sendSignalToProcess(name, signal) {
|
|
251
|
+
return withKeyedLock(this.operationMutex, name, async () => {
|
|
252
|
+
const managedProcess = this.processes.get(name);
|
|
253
|
+
if (!managedProcess) {
|
|
254
|
+
return {
|
|
255
|
+
success: false,
|
|
256
|
+
error: `Process '${name}' not found`,
|
|
257
|
+
};
|
|
258
|
+
}
|
|
259
|
+
const childProcess = this.childProcesses.get(name);
|
|
260
|
+
if (!childProcess) {
|
|
261
|
+
return {
|
|
262
|
+
success: false,
|
|
263
|
+
error: `Process '${name}' is not running`,
|
|
264
|
+
};
|
|
265
|
+
}
|
|
266
|
+
try {
|
|
267
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
268
|
+
const killed = childProcess.kill(signal);
|
|
269
|
+
if (!killed) {
|
|
270
|
+
return {
|
|
271
|
+
success: false,
|
|
272
|
+
error: `Failed to send signal ${signal} to process '${name}'`,
|
|
273
|
+
};
|
|
274
|
+
}
|
|
275
|
+
this.emit('process:signal-sent', name, signal);
|
|
276
|
+
return {
|
|
277
|
+
success: true,
|
|
278
|
+
metadata: { signal },
|
|
279
|
+
};
|
|
280
|
+
}
|
|
281
|
+
catch (error) {
|
|
282
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
283
|
+
return {
|
|
284
|
+
success: false,
|
|
285
|
+
error: `Error sending signal: ${errorMessage}`,
|
|
286
|
+
};
|
|
287
|
+
}
|
|
288
|
+
});
|
|
289
|
+
}
|
|
290
|
+
/**
|
|
291
|
+
* Get the child process instance
|
|
292
|
+
*/
|
|
293
|
+
getChildProcess(name) {
|
|
294
|
+
return this.childProcesses.get(name);
|
|
295
|
+
}
|
|
296
|
+
/**
|
|
297
|
+
* Check if a process is running
|
|
298
|
+
*/
|
|
299
|
+
isProcessRunning(name) {
|
|
300
|
+
const managedProcess = this.processes.get(name);
|
|
301
|
+
if (!managedProcess) {
|
|
302
|
+
return false;
|
|
303
|
+
}
|
|
304
|
+
const status = managedProcess.getStatus();
|
|
305
|
+
return status === 'online' || status === 'starting';
|
|
306
|
+
}
|
|
307
|
+
/**
|
|
308
|
+
* Check if any operations are currently locked
|
|
309
|
+
*/
|
|
310
|
+
getLockedProcesses() {
|
|
311
|
+
return this.operationMutex.getLockedKeys();
|
|
312
|
+
}
|
|
313
|
+
/**
|
|
314
|
+
* Clean up resources
|
|
315
|
+
*/
|
|
316
|
+
async cleanup() {
|
|
317
|
+
// Stop all running processes
|
|
318
|
+
const runningProcesses = Array.from(this.processes.entries())
|
|
319
|
+
.filter(([, process]) => {
|
|
320
|
+
const status = process.getStatus();
|
|
321
|
+
return status === 'online' || status === 'starting';
|
|
322
|
+
})
|
|
323
|
+
.map(([name]) => name);
|
|
324
|
+
await Promise.all(runningProcesses.map((name) => this.stopProcess(name)));
|
|
325
|
+
// Clear all references
|
|
326
|
+
this.childProcesses.clear();
|
|
327
|
+
this.removeAllListeners();
|
|
328
|
+
}
|
|
329
|
+
/**
|
|
330
|
+
* Set up event handlers for child process
|
|
331
|
+
*/
|
|
332
|
+
setupChildProcessEventHandlers(name, childProcess, managedProcess) {
|
|
333
|
+
// Handle process exit
|
|
334
|
+
childProcess.on('exit', (code, signal) => {
|
|
335
|
+
const wasUnexpected = managedProcess.isUnexpectedExit(code, signal);
|
|
336
|
+
if (wasUnexpected) {
|
|
337
|
+
managedProcess.setStatus('errored', true, 'Unexpected exit');
|
|
338
|
+
managedProcess.recordRestartFailure();
|
|
339
|
+
}
|
|
340
|
+
else {
|
|
341
|
+
managedProcess.setStatus('stopped', true, 'Normal exit');
|
|
342
|
+
managedProcess.recordRestartSuccess();
|
|
343
|
+
}
|
|
344
|
+
managedProcess.emitStop(code);
|
|
345
|
+
this.childProcesses.delete(name);
|
|
346
|
+
this.emit('process:exit', name, code, signal, wasUnexpected);
|
|
347
|
+
// Check if auto-restart should happen
|
|
348
|
+
if (wasUnexpected && managedProcess.shouldRestart()) {
|
|
349
|
+
const delay = managedProcess.getNextRestartDelay();
|
|
350
|
+
console.log(`Process '${name}' will be restarted after ${delay}ms delay`);
|
|
351
|
+
setTimeout(() => {
|
|
352
|
+
this.startProcess(name).catch((error) => {
|
|
353
|
+
console.error(`Failed to auto-restart process '${name}':`, error);
|
|
354
|
+
});
|
|
355
|
+
}, delay);
|
|
356
|
+
}
|
|
357
|
+
});
|
|
358
|
+
// Handle stdout
|
|
359
|
+
if (childProcess.stdout) {
|
|
360
|
+
childProcess.stdout.on('data', (data) => {
|
|
361
|
+
this.emit('process:stdout', name, data.toString());
|
|
362
|
+
});
|
|
363
|
+
}
|
|
364
|
+
// Handle stderr
|
|
365
|
+
if (childProcess.stderr) {
|
|
366
|
+
childProcess.stderr.on('data', (data) => {
|
|
367
|
+
this.emit('process:stderr', name, data.toString());
|
|
368
|
+
});
|
|
369
|
+
}
|
|
370
|
+
}
|
|
371
|
+
}
|
|
372
|
+
//# sourceMappingURL=process-lifecycle-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"process-lifecycle-manager.js","sourceRoot":"","sources":["../../../src/process-manager/process-lifecycle-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,296 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ProcessManager - Main process management facade
|
|
3
|
+
*
|
|
4
|
+
* This class provides a unified interface for process management,
|
|
5
|
+
* delegating operations to specialized components while maintaining
|
|
6
|
+
* backward compatibility with the existing API.
|
|
7
|
+
*
|
|
8
|
+
* ARCHITECTURE:
|
|
9
|
+
* - Uses composition pattern with specialized components
|
|
10
|
+
* - Maintains existing public interface for backward compatibility
|
|
11
|
+
* - Delegates operations to appropriate components
|
|
12
|
+
* - Acts as a facade for the underlying system
|
|
13
|
+
*/
|
|
14
|
+
import { EventEmitter } from 'events';
|
|
15
|
+
import { ManagedProcessInfo } from './managed-process-info.js';
|
|
16
|
+
import { ProcessLifecycleManager, ProcessMonitor, ProcessPersistence, ProcessGroupManager, MainProcessManager } from './interfaces';
|
|
17
|
+
import { AppConfig } from '../shared/config.js';
|
|
18
|
+
import { ProcessInfo, ProcessStatus } from '../shared/process.js';
|
|
19
|
+
import { ProcessDependency } from './interfaces/process-group.js';
|
|
20
|
+
/**
|
|
21
|
+
* Process configuration interface
|
|
22
|
+
*/
|
|
23
|
+
export interface ProcessConfig {
|
|
24
|
+
/** Process name */
|
|
25
|
+
name: string;
|
|
26
|
+
/** Script path to execute */
|
|
27
|
+
script: string;
|
|
28
|
+
/** Namespace for grouping */
|
|
29
|
+
namespace: string;
|
|
30
|
+
/** Command line arguments */
|
|
31
|
+
args: string[];
|
|
32
|
+
/** Working directory */
|
|
33
|
+
cwd: string;
|
|
34
|
+
/** Environment variables */
|
|
35
|
+
env: Record<string, string>;
|
|
36
|
+
/** Number of instances to start */
|
|
37
|
+
instances: number;
|
|
38
|
+
/** Enable automatic restart */
|
|
39
|
+
autorestart: boolean;
|
|
40
|
+
/** Enable file watching */
|
|
41
|
+
watch: boolean;
|
|
42
|
+
/** Memory limit in bytes for auto-restart */
|
|
43
|
+
max_memory_restart?: number;
|
|
44
|
+
/** Maximum number of restarts */
|
|
45
|
+
max_restarts: number;
|
|
46
|
+
/** Minimum uptime before considering restart */
|
|
47
|
+
min_uptime: number;
|
|
48
|
+
/** Delay between restarts */
|
|
49
|
+
restart_delay: number;
|
|
50
|
+
/** Optional note or description */
|
|
51
|
+
note?: string;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Type definition for batch operation results
|
|
55
|
+
*/
|
|
56
|
+
/**
|
|
57
|
+
* ProcessManager - Main facade class for process management
|
|
58
|
+
*
|
|
59
|
+
* This class coordinates all process management operations by delegating
|
|
60
|
+
* to specialized components while maintaining the existing public API.
|
|
61
|
+
*/
|
|
62
|
+
export declare class ProcessManager extends EventEmitter implements MainProcessManager {
|
|
63
|
+
private healthCheckInterval;
|
|
64
|
+
private memoryCheckInterval;
|
|
65
|
+
readonly lifecycle: ProcessLifecycleManager;
|
|
66
|
+
readonly monitor: ProcessMonitor;
|
|
67
|
+
readonly persistence: ProcessPersistence;
|
|
68
|
+
readonly groups: ProcessGroupManager;
|
|
69
|
+
private readonly processes;
|
|
70
|
+
private readonly processConfigs;
|
|
71
|
+
private readonly childProcesses;
|
|
72
|
+
private isInitialized;
|
|
73
|
+
constructor(healthCheckInterval?: number, memoryCheckInterval?: number, persistenceFilePath?: string);
|
|
74
|
+
/**
|
|
75
|
+
* Set up event forwarding from components to maintain compatibility
|
|
76
|
+
*/
|
|
77
|
+
private setupEventForwarding;
|
|
78
|
+
/**
|
|
79
|
+
* Set up internal event handlers for process management
|
|
80
|
+
*/
|
|
81
|
+
private setupInternalEventHandlers;
|
|
82
|
+
/**
|
|
83
|
+
* Static factory method to create ProcessManager with default components
|
|
84
|
+
*/
|
|
85
|
+
static create(healthCheckInterval?: number, memoryCheckInterval?: number, persistenceFilePath?: string): ProcessManager;
|
|
86
|
+
/**
|
|
87
|
+
* Configure a process from app configuration
|
|
88
|
+
*/
|
|
89
|
+
configureProcess(appConfig: AppConfig): void;
|
|
90
|
+
/**
|
|
91
|
+
* Remove process configuration
|
|
92
|
+
*/
|
|
93
|
+
removeProcessConfig(name: string): void;
|
|
94
|
+
/**
|
|
95
|
+
* Get process configuration
|
|
96
|
+
*/
|
|
97
|
+
getProcessConfig(name: string): ProcessConfig | undefined;
|
|
98
|
+
/**
|
|
99
|
+
* Get process information
|
|
100
|
+
*/
|
|
101
|
+
getProcessInfo(name: string): ProcessInfo | undefined;
|
|
102
|
+
/**
|
|
103
|
+
* Get all process information
|
|
104
|
+
*/
|
|
105
|
+
getAllProcessInfo(): ProcessInfo[];
|
|
106
|
+
/**
|
|
107
|
+
* Get processes by namespace
|
|
108
|
+
*/
|
|
109
|
+
getProcessesByNamespace(namespace: string): ProcessInfo[];
|
|
110
|
+
/**
|
|
111
|
+
* Get process names by namespace
|
|
112
|
+
*/
|
|
113
|
+
getProcessNamesByNamespace(namespace: string): string[];
|
|
114
|
+
/**
|
|
115
|
+
* Get all namespaces
|
|
116
|
+
*/
|
|
117
|
+
getNamespaces(): string[];
|
|
118
|
+
/**
|
|
119
|
+
* Get namespace status
|
|
120
|
+
*/
|
|
121
|
+
getNamespaceStatus(namespace: string): {
|
|
122
|
+
total: number;
|
|
123
|
+
online: number;
|
|
124
|
+
stopped: number;
|
|
125
|
+
errored: number;
|
|
126
|
+
starting: number;
|
|
127
|
+
stopping: number;
|
|
128
|
+
};
|
|
129
|
+
/**
|
|
130
|
+
* Get all process names
|
|
131
|
+
*/
|
|
132
|
+
getProcessNames(): string[];
|
|
133
|
+
/**
|
|
134
|
+
* Check if process exists
|
|
135
|
+
*/
|
|
136
|
+
hasProcess(name: string): boolean;
|
|
137
|
+
/**
|
|
138
|
+
* Initialize a process (create ManagedProcessInfo)
|
|
139
|
+
*/
|
|
140
|
+
initializeProcess(name: string): boolean;
|
|
141
|
+
/**
|
|
142
|
+
* Remove a process
|
|
143
|
+
*/
|
|
144
|
+
removeProcess(name: string): boolean;
|
|
145
|
+
/**
|
|
146
|
+
* Start a process
|
|
147
|
+
*/
|
|
148
|
+
startProcess(name: string): Promise<void>;
|
|
149
|
+
/**
|
|
150
|
+
* Stop a process
|
|
151
|
+
*/
|
|
152
|
+
stopProcess(name: string): Promise<void>;
|
|
153
|
+
/**
|
|
154
|
+
* Restart a process
|
|
155
|
+
*/
|
|
156
|
+
restartProcess(name: string): Promise<void>;
|
|
157
|
+
/**
|
|
158
|
+
* Start multiple processes
|
|
159
|
+
*/
|
|
160
|
+
startProcesses(names: string[]): Promise<{
|
|
161
|
+
name: string;
|
|
162
|
+
success: boolean;
|
|
163
|
+
error?: string;
|
|
164
|
+
}[]>;
|
|
165
|
+
/**
|
|
166
|
+
* Stop multiple processes
|
|
167
|
+
*/
|
|
168
|
+
stopProcesses(names: string[]): Promise<{
|
|
169
|
+
name: string;
|
|
170
|
+
success: boolean;
|
|
171
|
+
error?: string;
|
|
172
|
+
}[]>;
|
|
173
|
+
/**
|
|
174
|
+
* Restart multiple processes
|
|
175
|
+
*/
|
|
176
|
+
restartProcesses(names: string[]): Promise<{
|
|
177
|
+
name: string;
|
|
178
|
+
success: boolean;
|
|
179
|
+
error?: string;
|
|
180
|
+
}[]>;
|
|
181
|
+
/**
|
|
182
|
+
* Start all processes in a namespace
|
|
183
|
+
*/
|
|
184
|
+
startNamespace(namespace: string): Promise<{
|
|
185
|
+
name: string;
|
|
186
|
+
success: boolean;
|
|
187
|
+
error?: string;
|
|
188
|
+
}[]>;
|
|
189
|
+
/**
|
|
190
|
+
* Stop all processes in a namespace
|
|
191
|
+
*/
|
|
192
|
+
stopNamespace(namespace: string): Promise<{
|
|
193
|
+
name: string;
|
|
194
|
+
success: boolean;
|
|
195
|
+
error?: string;
|
|
196
|
+
}[]>;
|
|
197
|
+
/**
|
|
198
|
+
* Restart all processes in a namespace
|
|
199
|
+
*/
|
|
200
|
+
restartNamespace(namespace: string): Promise<{
|
|
201
|
+
name: string;
|
|
202
|
+
success: boolean;
|
|
203
|
+
error?: string;
|
|
204
|
+
}[]>;
|
|
205
|
+
/**
|
|
206
|
+
* Start monitoring all processes
|
|
207
|
+
*/
|
|
208
|
+
startMonitoring(): void;
|
|
209
|
+
/**
|
|
210
|
+
* Stop monitoring all processes
|
|
211
|
+
*/
|
|
212
|
+
stopMonitoring(): void;
|
|
213
|
+
/**
|
|
214
|
+
* Enable auto-restart for a process
|
|
215
|
+
*/
|
|
216
|
+
enableAutoRestart(name: string): void;
|
|
217
|
+
/**
|
|
218
|
+
* Disable auto-restart for a process
|
|
219
|
+
*/
|
|
220
|
+
disableAutoRestart(name: string): void;
|
|
221
|
+
/**
|
|
222
|
+
* Reset restart failures for a process
|
|
223
|
+
*/
|
|
224
|
+
resetRestartFailures(name: string): void;
|
|
225
|
+
/**
|
|
226
|
+
* Get auto-restart status for a process
|
|
227
|
+
*/
|
|
228
|
+
getAutoRestartStatus(name: string): {
|
|
229
|
+
enabled: boolean;
|
|
230
|
+
consecutiveFailures: number;
|
|
231
|
+
lastFailureTime?: Date;
|
|
232
|
+
nextRestartDelay?: number;
|
|
233
|
+
};
|
|
234
|
+
/**
|
|
235
|
+
* Configure a process dependency
|
|
236
|
+
*/
|
|
237
|
+
configureDependency(dependency: ProcessDependency): void;
|
|
238
|
+
/**
|
|
239
|
+
* Remove a process dependency
|
|
240
|
+
*/
|
|
241
|
+
removeDependency(name: string): void;
|
|
242
|
+
/**
|
|
243
|
+
* Get process dependency
|
|
244
|
+
*/
|
|
245
|
+
getDependency(name: string): ProcessDependency | undefined;
|
|
246
|
+
/**
|
|
247
|
+
* Get all dependencies
|
|
248
|
+
*/
|
|
249
|
+
getAllDependencies(): ProcessDependency[];
|
|
250
|
+
/**
|
|
251
|
+
* Resolve dependencies for a set of processes
|
|
252
|
+
*/
|
|
253
|
+
resolveDependencies(names: string[]): any;
|
|
254
|
+
/**
|
|
255
|
+
* Start processes with dependencies
|
|
256
|
+
*/
|
|
257
|
+
startProcessesWithDependencies(processNames: string[]): Promise<{
|
|
258
|
+
name: string;
|
|
259
|
+
success: boolean;
|
|
260
|
+
error?: string;
|
|
261
|
+
}[]>;
|
|
262
|
+
/**
|
|
263
|
+
* Start dependency monitoring
|
|
264
|
+
*/
|
|
265
|
+
startDependencyMonitoring(): void;
|
|
266
|
+
/**
|
|
267
|
+
* Stop dependency monitoring
|
|
268
|
+
*/
|
|
269
|
+
stopDependencyMonitoring(): void;
|
|
270
|
+
/**
|
|
271
|
+
* Initialize the process manager
|
|
272
|
+
*/
|
|
273
|
+
initialize(): Promise<void>;
|
|
274
|
+
/**
|
|
275
|
+
* Save current state
|
|
276
|
+
*/
|
|
277
|
+
saveState(): Promise<void>;
|
|
278
|
+
/**
|
|
279
|
+
* Force save state immediately
|
|
280
|
+
*/
|
|
281
|
+
forceSaveState(): Promise<void>;
|
|
282
|
+
/**
|
|
283
|
+
* Get persistence file path
|
|
284
|
+
*/
|
|
285
|
+
getPersistenceFilePath(): string;
|
|
286
|
+
/**
|
|
287
|
+
* Clean up all resources
|
|
288
|
+
*/
|
|
289
|
+
cleanup(): Promise<void>;
|
|
290
|
+
/**
|
|
291
|
+
* Convert AppConfig to ProcessConfig
|
|
292
|
+
*/
|
|
293
|
+
private convertAppConfigToProcessConfig;
|
|
294
|
+
}
|
|
295
|
+
export { ProcessInfo, ProcessStatus, AppConfig, ProcessDependency, ManagedProcessInfo, };
|
|
296
|
+
//# sourceMappingURL=process-manager.d.ts.map
|