@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 @@
|
|
|
1
|
+
{"version":3,"file":"process-manager.d.ts","sourceRoot":"","sources":["../../../src/process-manager/process-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,659 @@
|
|
|
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 * as path from 'path';
|
|
16
|
+
import * as os from 'os';
|
|
17
|
+
import { ProcessLifecycleManagerImpl } from './process-lifecycle-manager.js';
|
|
18
|
+
import { ProcessMonitorImpl } from './process-monitor.js';
|
|
19
|
+
import { ProcessPersistenceImpl } from './process-persistence.js';
|
|
20
|
+
import { ProcessGroupManagerImpl } from './process-group-manager.js';
|
|
21
|
+
import { ManagedProcessInfo } from './managed-process-info.js';
|
|
22
|
+
import { parseMemorySize } from '../shared/config.js';
|
|
23
|
+
/**
|
|
24
|
+
* Type definition for batch operation results
|
|
25
|
+
*/
|
|
26
|
+
/**
|
|
27
|
+
* ProcessManager - Main facade class for process management
|
|
28
|
+
*
|
|
29
|
+
* This class coordinates all process management operations by delegating
|
|
30
|
+
* to specialized components while maintaining the existing public API.
|
|
31
|
+
*/
|
|
32
|
+
export class ProcessManager extends EventEmitter {
|
|
33
|
+
healthCheckInterval;
|
|
34
|
+
memoryCheckInterval;
|
|
35
|
+
// Core components
|
|
36
|
+
lifecycle;
|
|
37
|
+
monitor;
|
|
38
|
+
persistence;
|
|
39
|
+
groups;
|
|
40
|
+
// Process management state
|
|
41
|
+
processes = new Map();
|
|
42
|
+
processConfigs = new Map();
|
|
43
|
+
childProcesses = new Map();
|
|
44
|
+
isInitialized = false;
|
|
45
|
+
constructor(healthCheckInterval = 5000, memoryCheckInterval = 30000, persistenceFilePath) {
|
|
46
|
+
super();
|
|
47
|
+
this.healthCheckInterval = healthCheckInterval;
|
|
48
|
+
this.memoryCheckInterval = memoryCheckInterval;
|
|
49
|
+
// Initialize components with shared state
|
|
50
|
+
this.lifecycle = new ProcessLifecycleManagerImpl(this.processes, this.childProcesses);
|
|
51
|
+
this.monitor = new ProcessMonitorImpl(this.processes, this.childProcesses);
|
|
52
|
+
this.persistence = new ProcessPersistenceImpl(this.processes);
|
|
53
|
+
// Initialize persistence with default config
|
|
54
|
+
// Enhanced HOME detection: process.env.HOME || os.homedir()
|
|
55
|
+
const homeDir = process.env.HOME || os.homedir();
|
|
56
|
+
if (!homeDir && !persistenceFilePath) {
|
|
57
|
+
throw new Error('Unable to determine home directory for persistence path');
|
|
58
|
+
}
|
|
59
|
+
const defaultPersistencePath = persistenceFilePath ||
|
|
60
|
+
path.join(homeDir, '.masuidrive-procman', 'processes.json');
|
|
61
|
+
this.persistence.initialize({
|
|
62
|
+
filePath: defaultPersistencePath,
|
|
63
|
+
saveDelay: 1000,
|
|
64
|
+
enableBackup: true,
|
|
65
|
+
});
|
|
66
|
+
this.groups = new ProcessGroupManagerImpl(this.processes, {
|
|
67
|
+
startProcess: (name) => this.lifecycle.startProcess(name),
|
|
68
|
+
stopProcess: (name) => this.lifecycle.stopProcess(name),
|
|
69
|
+
restartProcess: (name) => this.lifecycle.restartProcess(name),
|
|
70
|
+
});
|
|
71
|
+
// Forward events from components
|
|
72
|
+
this.setupEventForwarding();
|
|
73
|
+
// Setup internal event handlers
|
|
74
|
+
this.setupInternalEventHandlers();
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Set up event forwarding from components to maintain compatibility
|
|
78
|
+
*/
|
|
79
|
+
setupEventForwarding() {
|
|
80
|
+
// Cast components to EventEmitter for event forwarding
|
|
81
|
+
const lifecycleEmitter = this.lifecycle;
|
|
82
|
+
const monitorEmitter = this.monitor;
|
|
83
|
+
const persistenceEmitter = this.persistence;
|
|
84
|
+
const groupsEmitter = this.groups;
|
|
85
|
+
// Forward lifecycle events
|
|
86
|
+
lifecycleEmitter.on('process:started', (name) => {
|
|
87
|
+
const processInfo = this.processes.get(name)?.getProcessInfo();
|
|
88
|
+
if (processInfo) {
|
|
89
|
+
this.emit('process:started', name, processInfo);
|
|
90
|
+
}
|
|
91
|
+
});
|
|
92
|
+
lifecycleEmitter.on('process:stopped', (name) => {
|
|
93
|
+
const processInfo = this.processes.get(name)?.getProcessInfo();
|
|
94
|
+
if (processInfo) {
|
|
95
|
+
this.emit('process:stopped', name, processInfo);
|
|
96
|
+
}
|
|
97
|
+
});
|
|
98
|
+
lifecycleEmitter.on('process:exit', (name, code, signal) => {
|
|
99
|
+
this.emit('process:exit', name, code, signal);
|
|
100
|
+
});
|
|
101
|
+
lifecycleEmitter.on('process:error', (name, error) => {
|
|
102
|
+
this.emit('process:error', name, error);
|
|
103
|
+
});
|
|
104
|
+
lifecycleEmitter.on('process:restart', (name) => {
|
|
105
|
+
this.emit('process:restart', name);
|
|
106
|
+
});
|
|
107
|
+
lifecycleEmitter.on('process:restarted', (name) => {
|
|
108
|
+
this.emit('process:restarted', name);
|
|
109
|
+
});
|
|
110
|
+
// Forward monitor events
|
|
111
|
+
monitorEmitter.on('process:memory-limit', (data) => {
|
|
112
|
+
this.emit('process:memory-limit', data.name, data.usage, data.limit);
|
|
113
|
+
});
|
|
114
|
+
monitorEmitter.on('process:unhealthy', (data) => {
|
|
115
|
+
this.emit('process:unhealthy', data.name, data.consecutiveFailures);
|
|
116
|
+
});
|
|
117
|
+
monitorEmitter.on('process:died', (data) => {
|
|
118
|
+
this.emit('process:died', data.name);
|
|
119
|
+
});
|
|
120
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
121
|
+
monitorEmitter.on('process:stats', (data) => {
|
|
122
|
+
this.emit('process:stats', data.name, data.stats);
|
|
123
|
+
});
|
|
124
|
+
// Forward persistence events
|
|
125
|
+
persistenceEmitter.on('persistence:saved', (filePath) => {
|
|
126
|
+
this.emit('persistence:saved', filePath);
|
|
127
|
+
});
|
|
128
|
+
persistenceEmitter.on('persistence:save-error', (error) => {
|
|
129
|
+
this.emit('persistence:save-error', error);
|
|
130
|
+
});
|
|
131
|
+
persistenceEmitter.on('persistence:loaded', (filePath, processCount) => {
|
|
132
|
+
this.emit('persistence:loaded', filePath, processCount);
|
|
133
|
+
});
|
|
134
|
+
persistenceEmitter.on('persistence:load-error', (error) => {
|
|
135
|
+
this.emit('persistence:load-error', error);
|
|
136
|
+
});
|
|
137
|
+
// Forward group events
|
|
138
|
+
groupsEmitter.on('namespace:operation-start', (namespace, operation) => {
|
|
139
|
+
this.emit('namespace:operation-start', namespace, operation);
|
|
140
|
+
});
|
|
141
|
+
groupsEmitter.on('namespace:operation-complete',
|
|
142
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
143
|
+
(namespace, operation, results) => {
|
|
144
|
+
this.emit('namespace:operation-complete', namespace, operation, results);
|
|
145
|
+
});
|
|
146
|
+
groupsEmitter.on('batch:operation-start', (processNames, operation) => {
|
|
147
|
+
this.emit('batch:operation-start', processNames, operation);
|
|
148
|
+
});
|
|
149
|
+
groupsEmitter.on('batch:operation-complete',
|
|
150
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
151
|
+
(operation, results) => {
|
|
152
|
+
this.emit('batch:operation-complete', operation, results);
|
|
153
|
+
});
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Set up internal event handlers for process management
|
|
157
|
+
*/
|
|
158
|
+
setupInternalEventHandlers() {
|
|
159
|
+
// Handle memory limit exceeded - trigger restart
|
|
160
|
+
this.on('process:memory-limit', async (name, usage, limit) => {
|
|
161
|
+
console.log(`Process '${name}' exceeded memory limit: ${Math.round(usage / 1024 / 1024)}MB > ${Math.round(limit / 1024 / 1024)}MB`);
|
|
162
|
+
const managedProcess = this.processes.get(name);
|
|
163
|
+
if (managedProcess && managedProcess.isAutoRestartEnabled()) {
|
|
164
|
+
console.log(`Auto-restarting process '${name}' due to memory limit`);
|
|
165
|
+
try {
|
|
166
|
+
await this.restartProcess(name);
|
|
167
|
+
}
|
|
168
|
+
catch (error) {
|
|
169
|
+
console.error(`Failed to restart process '${name}' after memory limit:`, error);
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
});
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* Static factory method to create ProcessManager with default components
|
|
176
|
+
*/
|
|
177
|
+
static create(healthCheckInterval = 5000, memoryCheckInterval = 30000, persistenceFilePath) {
|
|
178
|
+
return new ProcessManager(healthCheckInterval, memoryCheckInterval, persistenceFilePath);
|
|
179
|
+
}
|
|
180
|
+
// ===== CONFIGURATION MANAGEMENT =====
|
|
181
|
+
/**
|
|
182
|
+
* Configure a process from app configuration
|
|
183
|
+
*/
|
|
184
|
+
configureProcess(appConfig) {
|
|
185
|
+
// t_wada boundary principle: validate inputs at boundaries
|
|
186
|
+
if (appConfig == null) {
|
|
187
|
+
throw new Error('App configuration cannot be null or undefined');
|
|
188
|
+
}
|
|
189
|
+
if (typeof appConfig !== 'object') {
|
|
190
|
+
throw new Error('App configuration must be an object');
|
|
191
|
+
}
|
|
192
|
+
if (!appConfig.name || typeof appConfig.name !== 'string') {
|
|
193
|
+
throw new Error('App configuration must have a valid name');
|
|
194
|
+
}
|
|
195
|
+
// Validate process name contains only safe characters
|
|
196
|
+
const namePattern = /^[a-zA-Z0-9_-]+$/;
|
|
197
|
+
if (!namePattern.test(appConfig.name.trim())) {
|
|
198
|
+
throw new Error(`Invalid process name: "${appConfig.name}". Name must contain only alphanumeric characters, hyphens, and underscores`);
|
|
199
|
+
}
|
|
200
|
+
const processConfig = this.convertAppConfigToProcessConfig(appConfig);
|
|
201
|
+
this.processConfigs.set(appConfig.name, processConfig);
|
|
202
|
+
// Initialize process info if not exists
|
|
203
|
+
if (!this.processes.has(appConfig.name)) {
|
|
204
|
+
this.initializeProcess(appConfig.name);
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
/**
|
|
208
|
+
* Remove process configuration
|
|
209
|
+
*/
|
|
210
|
+
removeProcessConfig(name) {
|
|
211
|
+
this.processConfigs.delete(name);
|
|
212
|
+
}
|
|
213
|
+
/**
|
|
214
|
+
* Get process configuration
|
|
215
|
+
*/
|
|
216
|
+
getProcessConfig(name) {
|
|
217
|
+
return this.processConfigs.get(name);
|
|
218
|
+
}
|
|
219
|
+
// ===== PROCESS INFO ACCESS =====
|
|
220
|
+
/**
|
|
221
|
+
* Get process information
|
|
222
|
+
*/
|
|
223
|
+
getProcessInfo(name) {
|
|
224
|
+
const processInfo = this.processes.get(name);
|
|
225
|
+
return processInfo?.getProcessInfo();
|
|
226
|
+
}
|
|
227
|
+
/**
|
|
228
|
+
* Get all process information
|
|
229
|
+
*/
|
|
230
|
+
getAllProcessInfo() {
|
|
231
|
+
return Array.from(this.processes.values()).map((p) => p.getProcessInfo());
|
|
232
|
+
}
|
|
233
|
+
/**
|
|
234
|
+
* Get processes by namespace
|
|
235
|
+
*/
|
|
236
|
+
getProcessesByNamespace(namespace) {
|
|
237
|
+
return Array.from(this.processes.values())
|
|
238
|
+
.filter((p) => p.getProcessInfo().namespace === namespace)
|
|
239
|
+
.map((p) => p.getProcessInfo());
|
|
240
|
+
}
|
|
241
|
+
/**
|
|
242
|
+
* Get process names by namespace
|
|
243
|
+
*/
|
|
244
|
+
getProcessNamesByNamespace(namespace) {
|
|
245
|
+
return Array.from(this.processes.values())
|
|
246
|
+
.filter((p) => p.getProcessInfo().namespace === namespace)
|
|
247
|
+
.map((p) => p.getProcessInfo().name);
|
|
248
|
+
}
|
|
249
|
+
/**
|
|
250
|
+
* Get all namespaces
|
|
251
|
+
*/
|
|
252
|
+
getNamespaces() {
|
|
253
|
+
const namespaces = new Set();
|
|
254
|
+
for (const processInfo of this.processes.values()) {
|
|
255
|
+
namespaces.add(processInfo.getProcessInfo().namespace || 'default');
|
|
256
|
+
}
|
|
257
|
+
return Array.from(namespaces).sort();
|
|
258
|
+
}
|
|
259
|
+
/**
|
|
260
|
+
* Get namespace status
|
|
261
|
+
*/
|
|
262
|
+
getNamespaceStatus(namespace) {
|
|
263
|
+
const processes = this.getProcessesByNamespace(namespace);
|
|
264
|
+
const status = {
|
|
265
|
+
total: processes.length,
|
|
266
|
+
online: 0,
|
|
267
|
+
stopped: 0,
|
|
268
|
+
errored: 0,
|
|
269
|
+
starting: 0,
|
|
270
|
+
stopping: 0,
|
|
271
|
+
};
|
|
272
|
+
for (const process of processes) {
|
|
273
|
+
switch (process.status) {
|
|
274
|
+
case 'online':
|
|
275
|
+
status.online++;
|
|
276
|
+
break;
|
|
277
|
+
case 'stopped':
|
|
278
|
+
status.stopped++;
|
|
279
|
+
break;
|
|
280
|
+
case 'errored':
|
|
281
|
+
status.errored++;
|
|
282
|
+
break;
|
|
283
|
+
case 'starting':
|
|
284
|
+
status.starting++;
|
|
285
|
+
break;
|
|
286
|
+
case 'stopping':
|
|
287
|
+
status.stopping++;
|
|
288
|
+
break;
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
return status;
|
|
292
|
+
}
|
|
293
|
+
/**
|
|
294
|
+
* Get all process names
|
|
295
|
+
*/
|
|
296
|
+
getProcessNames() {
|
|
297
|
+
return Array.from(this.processes.keys()).sort();
|
|
298
|
+
}
|
|
299
|
+
/**
|
|
300
|
+
* Check if process exists
|
|
301
|
+
*/
|
|
302
|
+
hasProcess(name) {
|
|
303
|
+
return this.processes.has(name);
|
|
304
|
+
}
|
|
305
|
+
// ===== PROCESS LIFECYCLE MANAGEMENT =====
|
|
306
|
+
/**
|
|
307
|
+
* Initialize a process (create ManagedProcessInfo)
|
|
308
|
+
*/
|
|
309
|
+
initializeProcess(name) {
|
|
310
|
+
if (this.processes.has(name)) {
|
|
311
|
+
return false;
|
|
312
|
+
}
|
|
313
|
+
const config = this.processConfigs.get(name);
|
|
314
|
+
if (!config) {
|
|
315
|
+
return false;
|
|
316
|
+
}
|
|
317
|
+
const processInfo = new ManagedProcessInfo(config);
|
|
318
|
+
this.processes.set(name, processInfo);
|
|
319
|
+
// Forward ManagedProcessInfo events
|
|
320
|
+
processInfo.on('start', () => {
|
|
321
|
+
this.emit('process:started', name, processInfo.getProcessInfo());
|
|
322
|
+
});
|
|
323
|
+
processInfo.on('stop', () => {
|
|
324
|
+
this.emit('process:stopped', name, processInfo.getProcessInfo());
|
|
325
|
+
});
|
|
326
|
+
processInfo.on('error', (error) => {
|
|
327
|
+
this.emit('process:error', name, error);
|
|
328
|
+
});
|
|
329
|
+
return true;
|
|
330
|
+
}
|
|
331
|
+
/**
|
|
332
|
+
* Remove a process
|
|
333
|
+
*/
|
|
334
|
+
removeProcess(name) {
|
|
335
|
+
const processInfo = this.processes.get(name);
|
|
336
|
+
if (!processInfo) {
|
|
337
|
+
return false;
|
|
338
|
+
}
|
|
339
|
+
// Clean up and remove
|
|
340
|
+
processInfo.dispose();
|
|
341
|
+
this.processes.delete(name);
|
|
342
|
+
this.processConfigs.delete(name);
|
|
343
|
+
return true;
|
|
344
|
+
}
|
|
345
|
+
/**
|
|
346
|
+
* Start a process
|
|
347
|
+
*/
|
|
348
|
+
async startProcess(name) {
|
|
349
|
+
// t_wada boundary principle: validate inputs at boundaries
|
|
350
|
+
if (name == null) {
|
|
351
|
+
throw new Error('Process name cannot be null or undefined');
|
|
352
|
+
}
|
|
353
|
+
if (typeof name !== 'string') {
|
|
354
|
+
throw new Error('Process name must be a string');
|
|
355
|
+
}
|
|
356
|
+
if (name.trim() === '') {
|
|
357
|
+
throw new Error('Process name cannot be empty');
|
|
358
|
+
}
|
|
359
|
+
const result = await this.lifecycle.startProcess(name);
|
|
360
|
+
if (!result.success) {
|
|
361
|
+
throw new Error(result.error || `Failed to start process: ${name}`);
|
|
362
|
+
}
|
|
363
|
+
}
|
|
364
|
+
/**
|
|
365
|
+
* Stop a process
|
|
366
|
+
*/
|
|
367
|
+
async stopProcess(name) {
|
|
368
|
+
const result = await this.lifecycle.stopProcess(name);
|
|
369
|
+
if (!result.success) {
|
|
370
|
+
throw new Error(result.error || `Failed to stop process: ${name}`);
|
|
371
|
+
}
|
|
372
|
+
}
|
|
373
|
+
/**
|
|
374
|
+
* Restart a process
|
|
375
|
+
*/
|
|
376
|
+
async restartProcess(name) {
|
|
377
|
+
const result = await this.lifecycle.restartProcess(name);
|
|
378
|
+
if (!result.success) {
|
|
379
|
+
throw new Error(result.error || `Failed to restart process: ${name}`);
|
|
380
|
+
}
|
|
381
|
+
}
|
|
382
|
+
// ===== BATCH OPERATIONS =====
|
|
383
|
+
/**
|
|
384
|
+
* Start multiple processes
|
|
385
|
+
*/
|
|
386
|
+
async startProcesses(names) {
|
|
387
|
+
const result = await this.groups.startProcesses(names);
|
|
388
|
+
return result.results;
|
|
389
|
+
}
|
|
390
|
+
/**
|
|
391
|
+
* Stop multiple processes
|
|
392
|
+
*/
|
|
393
|
+
async stopProcesses(names) {
|
|
394
|
+
const result = await this.groups.stopProcesses(names);
|
|
395
|
+
return result.results;
|
|
396
|
+
}
|
|
397
|
+
/**
|
|
398
|
+
* Restart multiple processes
|
|
399
|
+
*/
|
|
400
|
+
async restartProcesses(names) {
|
|
401
|
+
const result = await this.groups.restartProcesses(names);
|
|
402
|
+
return result.results;
|
|
403
|
+
}
|
|
404
|
+
/**
|
|
405
|
+
* Start all processes in a namespace
|
|
406
|
+
*/
|
|
407
|
+
async startNamespace(namespace) {
|
|
408
|
+
const result = await this.groups.startNamespace(namespace);
|
|
409
|
+
return result.results;
|
|
410
|
+
}
|
|
411
|
+
/**
|
|
412
|
+
* Stop all processes in a namespace
|
|
413
|
+
*/
|
|
414
|
+
async stopNamespace(namespace) {
|
|
415
|
+
const result = await this.groups.stopNamespace(namespace);
|
|
416
|
+
return result.results;
|
|
417
|
+
}
|
|
418
|
+
/**
|
|
419
|
+
* Restart all processes in a namespace
|
|
420
|
+
*/
|
|
421
|
+
async restartNamespace(namespace) {
|
|
422
|
+
const result = await this.groups.restartNamespace(namespace);
|
|
423
|
+
return result.results;
|
|
424
|
+
}
|
|
425
|
+
// ===== MONITORING MANAGEMENT =====
|
|
426
|
+
/**
|
|
427
|
+
* Start monitoring all processes
|
|
428
|
+
*/
|
|
429
|
+
startMonitoring() {
|
|
430
|
+
this.monitor.startMonitoring({
|
|
431
|
+
healthCheckInterval: this.healthCheckInterval,
|
|
432
|
+
memoryCheckInterval: this.memoryCheckInterval,
|
|
433
|
+
});
|
|
434
|
+
}
|
|
435
|
+
/**
|
|
436
|
+
* Stop monitoring all processes
|
|
437
|
+
*/
|
|
438
|
+
stopMonitoring() {
|
|
439
|
+
this.monitor.stopMonitoring();
|
|
440
|
+
}
|
|
441
|
+
// ===== AUTO-RESTART MANAGEMENT =====
|
|
442
|
+
/**
|
|
443
|
+
* Enable auto-restart for a process
|
|
444
|
+
*/
|
|
445
|
+
enableAutoRestart(name) {
|
|
446
|
+
const processInfo = this.processes.get(name);
|
|
447
|
+
if (processInfo && 'enableAutoRestart' in processInfo) {
|
|
448
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
449
|
+
processInfo.enableAutoRestart();
|
|
450
|
+
}
|
|
451
|
+
}
|
|
452
|
+
/**
|
|
453
|
+
* Disable auto-restart for a process
|
|
454
|
+
*/
|
|
455
|
+
disableAutoRestart(name) {
|
|
456
|
+
const processInfo = this.processes.get(name);
|
|
457
|
+
if (processInfo && 'disableAutoRestart' in processInfo) {
|
|
458
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
459
|
+
processInfo.disableAutoRestart();
|
|
460
|
+
}
|
|
461
|
+
}
|
|
462
|
+
/**
|
|
463
|
+
* Reset restart failures for a process
|
|
464
|
+
*/
|
|
465
|
+
resetRestartFailures(name) {
|
|
466
|
+
const processInfo = this.processes.get(name);
|
|
467
|
+
if (processInfo && 'resetRestartFailures' in processInfo) {
|
|
468
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
469
|
+
processInfo.resetRestartFailures();
|
|
470
|
+
}
|
|
471
|
+
}
|
|
472
|
+
/**
|
|
473
|
+
* Get auto-restart status for a process
|
|
474
|
+
*/
|
|
475
|
+
getAutoRestartStatus(name) {
|
|
476
|
+
const processInfo = this.processes.get(name);
|
|
477
|
+
if (!processInfo || !('getAutoRestartStatus' in processInfo)) {
|
|
478
|
+
return {
|
|
479
|
+
enabled: false,
|
|
480
|
+
consecutiveFailures: 0,
|
|
481
|
+
};
|
|
482
|
+
}
|
|
483
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
484
|
+
return processInfo.getAutoRestartStatus();
|
|
485
|
+
}
|
|
486
|
+
// ===== DEPENDENCY MANAGEMENT =====
|
|
487
|
+
/**
|
|
488
|
+
* Configure a process dependency
|
|
489
|
+
*/
|
|
490
|
+
configureDependency(dependency) {
|
|
491
|
+
this.groups.configureDependency(dependency);
|
|
492
|
+
}
|
|
493
|
+
/**
|
|
494
|
+
* Remove a process dependency
|
|
495
|
+
*/
|
|
496
|
+
removeDependency(name) {
|
|
497
|
+
this.groups.removeDependency(name);
|
|
498
|
+
}
|
|
499
|
+
/**
|
|
500
|
+
* Get process dependency
|
|
501
|
+
*/
|
|
502
|
+
getDependency(name) {
|
|
503
|
+
return this.groups.getDependency(name);
|
|
504
|
+
}
|
|
505
|
+
/**
|
|
506
|
+
* Get all dependencies
|
|
507
|
+
*/
|
|
508
|
+
getAllDependencies() {
|
|
509
|
+
return this.groups.getAllDependencies();
|
|
510
|
+
}
|
|
511
|
+
/**
|
|
512
|
+
* Resolve dependencies for a set of processes
|
|
513
|
+
*/
|
|
514
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
515
|
+
resolveDependencies(names) {
|
|
516
|
+
return this.groups.resolveDependencies(names);
|
|
517
|
+
}
|
|
518
|
+
/**
|
|
519
|
+
* Start processes with dependencies
|
|
520
|
+
*/
|
|
521
|
+
async startProcessesWithDependencies(processNames) {
|
|
522
|
+
// This is a placeholder for future implementation
|
|
523
|
+
// For now, just start processes in order
|
|
524
|
+
return this.startProcesses(processNames);
|
|
525
|
+
}
|
|
526
|
+
/**
|
|
527
|
+
* Start dependency monitoring
|
|
528
|
+
*/
|
|
529
|
+
startDependencyMonitoring() {
|
|
530
|
+
// Placeholder for future implementation
|
|
531
|
+
}
|
|
532
|
+
/**
|
|
533
|
+
* Stop dependency monitoring
|
|
534
|
+
*/
|
|
535
|
+
stopDependencyMonitoring() {
|
|
536
|
+
// Placeholder for future implementation
|
|
537
|
+
}
|
|
538
|
+
// ===== PERSISTENCE MANAGEMENT =====
|
|
539
|
+
/**
|
|
540
|
+
* Initialize the process manager
|
|
541
|
+
*/
|
|
542
|
+
async initialize() {
|
|
543
|
+
if (this.isInitialized) {
|
|
544
|
+
return;
|
|
545
|
+
}
|
|
546
|
+
// Load persisted state
|
|
547
|
+
const persistedProcesses = await this.persistence.loadState();
|
|
548
|
+
// Restore process states
|
|
549
|
+
for (const persistedProcess of persistedProcesses) {
|
|
550
|
+
// Check if we have a configuration for this process
|
|
551
|
+
const processInfo = this.processes.get(persistedProcess.name);
|
|
552
|
+
if (processInfo) {
|
|
553
|
+
// Restore the state
|
|
554
|
+
processInfo.restoreState(persistedProcess);
|
|
555
|
+
}
|
|
556
|
+
}
|
|
557
|
+
this.isInitialized = true;
|
|
558
|
+
}
|
|
559
|
+
/**
|
|
560
|
+
* Save current state
|
|
561
|
+
*/
|
|
562
|
+
async saveState() {
|
|
563
|
+
const processData = Array.from(this.processes.values()).map((p) => p.toJSON());
|
|
564
|
+
await this.persistence.saveState(processData);
|
|
565
|
+
}
|
|
566
|
+
/**
|
|
567
|
+
* Force save state immediately
|
|
568
|
+
*/
|
|
569
|
+
async forceSaveState() {
|
|
570
|
+
const processData = Array.from(this.processes.values()).map((p) => p.toJSON());
|
|
571
|
+
await this.persistence.forceSaveState(processData);
|
|
572
|
+
}
|
|
573
|
+
/**
|
|
574
|
+
* Get persistence file path
|
|
575
|
+
*/
|
|
576
|
+
getPersistenceFilePath() {
|
|
577
|
+
return this.persistence.getFilePath();
|
|
578
|
+
}
|
|
579
|
+
// ===== CLEANUP =====
|
|
580
|
+
/**
|
|
581
|
+
* Clean up all resources
|
|
582
|
+
*/
|
|
583
|
+
async cleanup() {
|
|
584
|
+
// Stop monitoring
|
|
585
|
+
this.stopMonitoring();
|
|
586
|
+
// Save final state
|
|
587
|
+
await this.forceSaveState();
|
|
588
|
+
// Cleanup components
|
|
589
|
+
const cleanupPromises = [];
|
|
590
|
+
if ('cleanup' in this.lifecycle) {
|
|
591
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
592
|
+
cleanupPromises.push(this.lifecycle.cleanup());
|
|
593
|
+
}
|
|
594
|
+
if ('cleanup' in this.monitor) {
|
|
595
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
596
|
+
cleanupPromises.push(this.monitor.cleanup());
|
|
597
|
+
}
|
|
598
|
+
if ('cleanup' in this.persistence) {
|
|
599
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
600
|
+
cleanupPromises.push(this.persistence.cleanup());
|
|
601
|
+
}
|
|
602
|
+
if ('cleanup' in this.groups) {
|
|
603
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
604
|
+
cleanupPromises.push(this.groups.cleanup());
|
|
605
|
+
}
|
|
606
|
+
await Promise.all(cleanupPromises);
|
|
607
|
+
// Clean up processes
|
|
608
|
+
for (const processInfo of this.processes.values()) {
|
|
609
|
+
processInfo.dispose();
|
|
610
|
+
}
|
|
611
|
+
this.processes.clear();
|
|
612
|
+
this.processConfigs.clear();
|
|
613
|
+
this.isInitialized = false;
|
|
614
|
+
}
|
|
615
|
+
// ===== HELPER METHODS =====
|
|
616
|
+
/**
|
|
617
|
+
* Convert AppConfig to ProcessConfig
|
|
618
|
+
*/
|
|
619
|
+
convertAppConfigToProcessConfig(appConfig) {
|
|
620
|
+
// Parse memory limit if specified
|
|
621
|
+
let max_memory_restart;
|
|
622
|
+
if (appConfig.max_memory_restart) {
|
|
623
|
+
const result = parseMemorySize(appConfig.max_memory_restart);
|
|
624
|
+
if (result.success && result.value) {
|
|
625
|
+
max_memory_restart = result.value;
|
|
626
|
+
}
|
|
627
|
+
}
|
|
628
|
+
const processConfig = {
|
|
629
|
+
name: appConfig.name,
|
|
630
|
+
script: appConfig.script,
|
|
631
|
+
cwd: appConfig.cwd || process.cwd(),
|
|
632
|
+
args: appConfig.args
|
|
633
|
+
? appConfig.args.split(' ').filter((arg) => arg.length > 0)
|
|
634
|
+
: [],
|
|
635
|
+
namespace: appConfig.namespace || 'default',
|
|
636
|
+
instances: 1, // AppConfig doesn't have instances
|
|
637
|
+
autorestart: true, // Default to true for auto-restart
|
|
638
|
+
watch: false, // AppConfig doesn't have watch
|
|
639
|
+
max_memory_restart,
|
|
640
|
+
max_restarts: 10, // Default max restarts
|
|
641
|
+
min_uptime: 1000, // Default min uptime
|
|
642
|
+
restart_delay: 1000, // Default restart delay
|
|
643
|
+
note: appConfig.note,
|
|
644
|
+
env: {},
|
|
645
|
+
};
|
|
646
|
+
// Process environment variables (remove undefined values)
|
|
647
|
+
if (appConfig.env) {
|
|
648
|
+
for (const [key, value] of Object.entries(appConfig.env)) {
|
|
649
|
+
if (value !== undefined) {
|
|
650
|
+
processConfig.env[key] = value;
|
|
651
|
+
}
|
|
652
|
+
}
|
|
653
|
+
}
|
|
654
|
+
return processConfig;
|
|
655
|
+
}
|
|
656
|
+
}
|
|
657
|
+
// Re-export types for backward compatibility
|
|
658
|
+
export { ManagedProcessInfo, };
|
|
659
|
+
//# sourceMappingURL=process-manager.js.map
|