@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,650 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ManagedProcessInfo - Individual process information management
|
|
3
|
+
*
|
|
4
|
+
* This class manages the information and statistics for a single process,
|
|
5
|
+
* including uptime tracking, restart counting, and state change recording.
|
|
6
|
+
*/
|
|
7
|
+
import { EventEmitter } from 'events';
|
|
8
|
+
import { RESTART_BACKOFF_BASE_DELAY, RESTART_BACKOFF_MAX_DELAY, RESTART_BACKOFF_MULTIPLIER, RESTART_WINDOW_TIME, MAX_RESTART_COUNT, MAX_HISTORY_LENGTH, } from '../shared/constants.js';
|
|
9
|
+
// =============================================================================
|
|
10
|
+
// ManagedProcessInfo Class
|
|
11
|
+
// =============================================================================
|
|
12
|
+
/**
|
|
13
|
+
* Manages information and statistics for a single process
|
|
14
|
+
*/
|
|
15
|
+
export class ManagedProcessInfo extends EventEmitter {
|
|
16
|
+
config;
|
|
17
|
+
status = 'stopped';
|
|
18
|
+
pid = null;
|
|
19
|
+
statistics;
|
|
20
|
+
// New properties for detailed history tracking
|
|
21
|
+
stateHistory = [];
|
|
22
|
+
memoryHistoryDetailed = [];
|
|
23
|
+
cpuHistoryDetailed = [];
|
|
24
|
+
lastCrashTime = null;
|
|
25
|
+
constructor(config) {
|
|
26
|
+
super();
|
|
27
|
+
this.config = { ...config }; // Create a copy to avoid external mutations
|
|
28
|
+
// Initialize statistics
|
|
29
|
+
const now = Date.now();
|
|
30
|
+
this.statistics = {
|
|
31
|
+
startedAt: null,
|
|
32
|
+
lastStatusChange: now,
|
|
33
|
+
restarts: 0,
|
|
34
|
+
lastRestart: null,
|
|
35
|
+
memoryHistory: [],
|
|
36
|
+
cpuHistory: [],
|
|
37
|
+
currentMemory: 0,
|
|
38
|
+
currentCpu: 0,
|
|
39
|
+
consecutiveFailures: 0,
|
|
40
|
+
firstFailureTime: null,
|
|
41
|
+
autoRestartEnabled: true,
|
|
42
|
+
nextRestartDelay: RESTART_BACKOFF_BASE_DELAY,
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
// ---------------------------------------------------------------------------
|
|
46
|
+
// Configuration Management
|
|
47
|
+
// ---------------------------------------------------------------------------
|
|
48
|
+
/**
|
|
49
|
+
* Update process configuration
|
|
50
|
+
* @param newConfig New configuration
|
|
51
|
+
*/
|
|
52
|
+
updateConfig(newConfig) {
|
|
53
|
+
// Preserve certain fields that shouldn't change during runtime
|
|
54
|
+
const preservedFields = {
|
|
55
|
+
name: this.config.name,
|
|
56
|
+
};
|
|
57
|
+
Object.assign(this.config, newConfig, preservedFields);
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Get process name
|
|
61
|
+
* @returns Process name
|
|
62
|
+
*/
|
|
63
|
+
getName() {
|
|
64
|
+
return this.config.name;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Get process namespace
|
|
68
|
+
* @returns Process namespace
|
|
69
|
+
*/
|
|
70
|
+
getNamespace() {
|
|
71
|
+
return this.config.namespace || 'default';
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Get process configuration
|
|
75
|
+
* @returns Process configuration (read-only copy)
|
|
76
|
+
*/
|
|
77
|
+
getConfig() {
|
|
78
|
+
return { ...this.config };
|
|
79
|
+
}
|
|
80
|
+
// ---------------------------------------------------------------------------
|
|
81
|
+
// Process Information
|
|
82
|
+
// ---------------------------------------------------------------------------
|
|
83
|
+
/**
|
|
84
|
+
* Get current process information
|
|
85
|
+
* @returns Process information
|
|
86
|
+
*/
|
|
87
|
+
getProcessInfo() {
|
|
88
|
+
return {
|
|
89
|
+
name: this.config.name,
|
|
90
|
+
namespace: this.config.namespace,
|
|
91
|
+
status: this.status,
|
|
92
|
+
pid: this.pid,
|
|
93
|
+
uptime: this.calculateUptime(),
|
|
94
|
+
memory: this.statistics.currentMemory,
|
|
95
|
+
cpu: this.statistics.currentCpu,
|
|
96
|
+
restarts: this.statistics.restarts,
|
|
97
|
+
note: this.config.note,
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Get current process information (alias for getProcessInfo)
|
|
102
|
+
* @returns Process information
|
|
103
|
+
*/
|
|
104
|
+
toProcessInfo() {
|
|
105
|
+
return this.getProcessInfo();
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Get detailed process statistics
|
|
109
|
+
* @returns Process statistics
|
|
110
|
+
*/
|
|
111
|
+
getStatistics() {
|
|
112
|
+
return { ...this.statistics };
|
|
113
|
+
}
|
|
114
|
+
// ---------------------------------------------------------------------------
|
|
115
|
+
// Status Management
|
|
116
|
+
// ---------------------------------------------------------------------------
|
|
117
|
+
/**
|
|
118
|
+
* Get current status
|
|
119
|
+
* @returns Current process status
|
|
120
|
+
*/
|
|
121
|
+
getStatus() {
|
|
122
|
+
return this.status;
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Set process status
|
|
126
|
+
* @param newStatus New status
|
|
127
|
+
* @param emitEvent Whether to emit status change event (default: true)
|
|
128
|
+
* @param reason Optional reason for the status change
|
|
129
|
+
*/
|
|
130
|
+
setStatus(newStatus, emitEvent = true, reason) {
|
|
131
|
+
if (newStatus === this.status) {
|
|
132
|
+
return; // No change
|
|
133
|
+
}
|
|
134
|
+
const oldStatus = this.status;
|
|
135
|
+
this.status = newStatus;
|
|
136
|
+
const now = Date.now();
|
|
137
|
+
this.statistics.lastStatusChange = now;
|
|
138
|
+
// Record state change in history
|
|
139
|
+
this.addStateChange(oldStatus, newStatus, reason);
|
|
140
|
+
// Handle status-specific logic
|
|
141
|
+
switch (newStatus) {
|
|
142
|
+
case 'starting':
|
|
143
|
+
// Reset some statistics when starting
|
|
144
|
+
this.statistics.currentMemory = 0;
|
|
145
|
+
this.statistics.currentCpu = 0;
|
|
146
|
+
break;
|
|
147
|
+
case 'online':
|
|
148
|
+
// Mark start time when process goes online
|
|
149
|
+
if (!this.statistics.startedAt) {
|
|
150
|
+
this.statistics.startedAt = now;
|
|
151
|
+
}
|
|
152
|
+
break;
|
|
153
|
+
case 'stopped':
|
|
154
|
+
case 'errored':
|
|
155
|
+
// Clear runtime information when stopped
|
|
156
|
+
this.pid = null;
|
|
157
|
+
this.statistics.startedAt = null;
|
|
158
|
+
// Record crash time if errored
|
|
159
|
+
if (newStatus === 'errored') {
|
|
160
|
+
this.lastCrashTime = now;
|
|
161
|
+
}
|
|
162
|
+
break;
|
|
163
|
+
case 'max-memory':
|
|
164
|
+
// This status indicates memory limit was exceeded
|
|
165
|
+
this.lastCrashTime = now;
|
|
166
|
+
break;
|
|
167
|
+
}
|
|
168
|
+
if (emitEvent) {
|
|
169
|
+
this.emit('status-change', newStatus, oldStatus);
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* Get current PID
|
|
174
|
+
* @returns Process ID or null if not running
|
|
175
|
+
*/
|
|
176
|
+
getPid() {
|
|
177
|
+
return this.pid;
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* Set process PID
|
|
181
|
+
* @param pid Process ID
|
|
182
|
+
*/
|
|
183
|
+
setPid(pid) {
|
|
184
|
+
this.pid = pid;
|
|
185
|
+
}
|
|
186
|
+
// ---------------------------------------------------------------------------
|
|
187
|
+
// Statistics and Monitoring
|
|
188
|
+
// ---------------------------------------------------------------------------
|
|
189
|
+
/**
|
|
190
|
+
* Calculate process uptime in milliseconds
|
|
191
|
+
* @returns Uptime in milliseconds
|
|
192
|
+
*/
|
|
193
|
+
calculateUptime() {
|
|
194
|
+
if (!this.statistics.startedAt || this.status !== 'online') {
|
|
195
|
+
return 0;
|
|
196
|
+
}
|
|
197
|
+
return Date.now() - this.statistics.startedAt;
|
|
198
|
+
}
|
|
199
|
+
/**
|
|
200
|
+
* Update memory usage
|
|
201
|
+
* @param memoryUsage Memory usage in bytes
|
|
202
|
+
*/
|
|
203
|
+
updateMemoryUsage(memoryUsage) {
|
|
204
|
+
this.statistics.currentMemory = memoryUsage;
|
|
205
|
+
const now = Date.now();
|
|
206
|
+
// Add to simple history (keep for backward compatibility)
|
|
207
|
+
this.statistics.memoryHistory.push(memoryUsage);
|
|
208
|
+
if (this.statistics.memoryHistory.length > 10) {
|
|
209
|
+
this.statistics.memoryHistory.shift();
|
|
210
|
+
}
|
|
211
|
+
// Add to detailed history with timestamp
|
|
212
|
+
this.memoryHistoryDetailed.push({ timestamp: now, usage: memoryUsage });
|
|
213
|
+
if (this.memoryHistoryDetailed.length > MAX_HISTORY_LENGTH) {
|
|
214
|
+
this.memoryHistoryDetailed.shift();
|
|
215
|
+
}
|
|
216
|
+
// Check memory limit if configured
|
|
217
|
+
if (this.config.max_memory_restart &&
|
|
218
|
+
memoryUsage > this.config.max_memory_restart) {
|
|
219
|
+
this.emit('memory-limit', memoryUsage, this.config.max_memory_restart);
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
/**
|
|
223
|
+
* Update CPU usage
|
|
224
|
+
* @param cpuUsage CPU usage percentage
|
|
225
|
+
*/
|
|
226
|
+
updateCpuUsage(cpuUsage) {
|
|
227
|
+
this.statistics.currentCpu = cpuUsage;
|
|
228
|
+
const now = Date.now();
|
|
229
|
+
// Add to simple history (keep for backward compatibility)
|
|
230
|
+
this.statistics.cpuHistory.push(cpuUsage);
|
|
231
|
+
if (this.statistics.cpuHistory.length > 10) {
|
|
232
|
+
this.statistics.cpuHistory.shift();
|
|
233
|
+
}
|
|
234
|
+
// Add to detailed history with timestamp
|
|
235
|
+
this.cpuHistoryDetailed.push({ timestamp: now, usage: cpuUsage });
|
|
236
|
+
if (this.cpuHistoryDetailed.length > MAX_HISTORY_LENGTH) {
|
|
237
|
+
this.cpuHistoryDetailed.shift();
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
/**
|
|
241
|
+
* Get average memory usage from history
|
|
242
|
+
* @returns Average memory usage in bytes
|
|
243
|
+
*/
|
|
244
|
+
getAverageMemoryUsage() {
|
|
245
|
+
if (this.statistics.memoryHistory.length === 0) {
|
|
246
|
+
return 0;
|
|
247
|
+
}
|
|
248
|
+
const sum = this.statistics.memoryHistory.reduce((acc, val) => acc + val, 0);
|
|
249
|
+
return sum / this.statistics.memoryHistory.length;
|
|
250
|
+
}
|
|
251
|
+
/**
|
|
252
|
+
* Get average CPU usage from history
|
|
253
|
+
* @returns Average CPU usage percentage
|
|
254
|
+
*/
|
|
255
|
+
getAverageCpuUsage() {
|
|
256
|
+
if (this.statistics.cpuHistory.length === 0) {
|
|
257
|
+
return 0;
|
|
258
|
+
}
|
|
259
|
+
const sum = this.statistics.cpuHistory.reduce((acc, val) => acc + val, 0);
|
|
260
|
+
return sum / this.statistics.cpuHistory.length;
|
|
261
|
+
}
|
|
262
|
+
/**
|
|
263
|
+
* Get current memory usage
|
|
264
|
+
* @returns Current memory usage in bytes
|
|
265
|
+
*/
|
|
266
|
+
getMemoryUsage() {
|
|
267
|
+
return this.statistics.currentMemory;
|
|
268
|
+
}
|
|
269
|
+
// ---------------------------------------------------------------------------
|
|
270
|
+
// Restart Management
|
|
271
|
+
// ---------------------------------------------------------------------------
|
|
272
|
+
/**
|
|
273
|
+
* Record a restart
|
|
274
|
+
*/
|
|
275
|
+
recordRestart() {
|
|
276
|
+
this.statistics.restarts++;
|
|
277
|
+
this.statistics.lastRestart = Date.now();
|
|
278
|
+
this.emit('restart', this.statistics.restarts);
|
|
279
|
+
}
|
|
280
|
+
/**
|
|
281
|
+
* Increment restart count (alias for recordRestart)
|
|
282
|
+
*/
|
|
283
|
+
incrementRestarts() {
|
|
284
|
+
this.recordRestart();
|
|
285
|
+
}
|
|
286
|
+
/**
|
|
287
|
+
* Reset restart count
|
|
288
|
+
*/
|
|
289
|
+
resetRestartCount() {
|
|
290
|
+
this.statistics.restarts = 0;
|
|
291
|
+
this.statistics.lastRestart = null;
|
|
292
|
+
}
|
|
293
|
+
/**
|
|
294
|
+
* Get time since last restart
|
|
295
|
+
* @returns Time since last restart in milliseconds, or null if never restarted
|
|
296
|
+
*/
|
|
297
|
+
getTimeSinceLastRestart() {
|
|
298
|
+
if (!this.statistics.lastRestart) {
|
|
299
|
+
return null;
|
|
300
|
+
}
|
|
301
|
+
return Date.now() - this.statistics.lastRestart;
|
|
302
|
+
}
|
|
303
|
+
// ---------------------------------------------------------------------------
|
|
304
|
+
// Event Helpers
|
|
305
|
+
// ---------------------------------------------------------------------------
|
|
306
|
+
/**
|
|
307
|
+
* Emit start event
|
|
308
|
+
* @param pid Process ID
|
|
309
|
+
*/
|
|
310
|
+
emitStart(pid) {
|
|
311
|
+
this.setPid(pid);
|
|
312
|
+
this.emit('start', pid);
|
|
313
|
+
}
|
|
314
|
+
/**
|
|
315
|
+
* Emit stop event
|
|
316
|
+
* @param exitCode Exit code
|
|
317
|
+
*/
|
|
318
|
+
emitStop(exitCode) {
|
|
319
|
+
this.emit('stop', exitCode);
|
|
320
|
+
}
|
|
321
|
+
/**
|
|
322
|
+
* Emit error event
|
|
323
|
+
* @param error Error object
|
|
324
|
+
*/
|
|
325
|
+
emitError(error) {
|
|
326
|
+
this.emit('error', error);
|
|
327
|
+
}
|
|
328
|
+
// ---------------------------------------------------------------------------
|
|
329
|
+
// Utility Methods
|
|
330
|
+
// ---------------------------------------------------------------------------
|
|
331
|
+
/**
|
|
332
|
+
* Check if process should be monitored
|
|
333
|
+
* @returns True if process is in a monitorable state
|
|
334
|
+
*/
|
|
335
|
+
isMonitorable() {
|
|
336
|
+
return this.status === 'online' && this.pid !== null;
|
|
337
|
+
}
|
|
338
|
+
/**
|
|
339
|
+
* Check if process is running
|
|
340
|
+
* @returns True if process is running
|
|
341
|
+
*/
|
|
342
|
+
isRunning() {
|
|
343
|
+
return this.status === 'online' && this.pid !== null;
|
|
344
|
+
}
|
|
345
|
+
/**
|
|
346
|
+
* Check if process is stopped
|
|
347
|
+
* @returns True if process is stopped
|
|
348
|
+
*/
|
|
349
|
+
isStopped() {
|
|
350
|
+
return this.status === 'stopped';
|
|
351
|
+
}
|
|
352
|
+
/**
|
|
353
|
+
* Check if process has memory limit configured
|
|
354
|
+
* @returns True if memory limit is configured
|
|
355
|
+
*/
|
|
356
|
+
hasMemoryLimit() {
|
|
357
|
+
return this.config.max_memory_restart !== undefined;
|
|
358
|
+
}
|
|
359
|
+
/**
|
|
360
|
+
* Get memory limit in bytes
|
|
361
|
+
* @returns Memory limit in bytes or undefined if not configured
|
|
362
|
+
*/
|
|
363
|
+
getMemoryLimit() {
|
|
364
|
+
return this.config.max_memory_restart;
|
|
365
|
+
}
|
|
366
|
+
// ---------------------------------------------------------------------------
|
|
367
|
+
// Auto-restart Control
|
|
368
|
+
// ---------------------------------------------------------------------------
|
|
369
|
+
/**
|
|
370
|
+
* Check if auto-restart is enabled
|
|
371
|
+
* @returns True if auto-restart is enabled
|
|
372
|
+
*/
|
|
373
|
+
isAutoRestartEnabled() {
|
|
374
|
+
return this.statistics.autoRestartEnabled;
|
|
375
|
+
}
|
|
376
|
+
/**
|
|
377
|
+
* Enable or disable auto-restart
|
|
378
|
+
* @param enabled Auto-restart enabled flag
|
|
379
|
+
*/
|
|
380
|
+
setAutoRestartEnabled(enabled) {
|
|
381
|
+
this.statistics.autoRestartEnabled = enabled;
|
|
382
|
+
if (!enabled) {
|
|
383
|
+
// Reset failure counters when disabling auto-restart
|
|
384
|
+
this.resetRestartFailures();
|
|
385
|
+
}
|
|
386
|
+
}
|
|
387
|
+
/**
|
|
388
|
+
* Record a restart failure
|
|
389
|
+
*/
|
|
390
|
+
recordRestartFailure() {
|
|
391
|
+
const now = Date.now();
|
|
392
|
+
// Reset failure window if enough time has passed
|
|
393
|
+
if (this.statistics.firstFailureTime &&
|
|
394
|
+
now - this.statistics.firstFailureTime > RESTART_WINDOW_TIME) {
|
|
395
|
+
this.resetRestartFailures();
|
|
396
|
+
}
|
|
397
|
+
// Initialize failure window if this is the first failure
|
|
398
|
+
if (this.statistics.firstFailureTime === null) {
|
|
399
|
+
this.statistics.firstFailureTime = now;
|
|
400
|
+
}
|
|
401
|
+
this.statistics.consecutiveFailures++;
|
|
402
|
+
// Disable auto-restart if too many failures
|
|
403
|
+
if (this.statistics.consecutiveFailures >= MAX_RESTART_COUNT) {
|
|
404
|
+
this.statistics.autoRestartEnabled = false;
|
|
405
|
+
console.warn(`Process '${this.config.name}' auto-restart disabled after ${MAX_RESTART_COUNT} consecutive failures`);
|
|
406
|
+
}
|
|
407
|
+
// Calculate next restart delay with exponential backoff
|
|
408
|
+
this.calculateNextRestartDelay();
|
|
409
|
+
}
|
|
410
|
+
/**
|
|
411
|
+
* Record a successful restart (reset failure counters)
|
|
412
|
+
*/
|
|
413
|
+
recordRestartSuccess() {
|
|
414
|
+
this.resetRestartFailures();
|
|
415
|
+
}
|
|
416
|
+
/**
|
|
417
|
+
* Reset restart failure counters
|
|
418
|
+
*/
|
|
419
|
+
resetRestartFailures() {
|
|
420
|
+
this.statistics.consecutiveFailures = 0;
|
|
421
|
+
this.statistics.firstFailureTime = null;
|
|
422
|
+
this.statistics.nextRestartDelay = RESTART_BACKOFF_BASE_DELAY;
|
|
423
|
+
}
|
|
424
|
+
/**
|
|
425
|
+
* Get consecutive failure count
|
|
426
|
+
* @returns Number of consecutive failures
|
|
427
|
+
*/
|
|
428
|
+
getConsecutiveFailures() {
|
|
429
|
+
return this.statistics.consecutiveFailures;
|
|
430
|
+
}
|
|
431
|
+
/**
|
|
432
|
+
* Get next restart delay
|
|
433
|
+
* @returns Next restart delay in milliseconds
|
|
434
|
+
*/
|
|
435
|
+
getNextRestartDelay() {
|
|
436
|
+
return this.statistics.nextRestartDelay;
|
|
437
|
+
}
|
|
438
|
+
/**
|
|
439
|
+
* Calculate next restart delay using exponential backoff
|
|
440
|
+
*/
|
|
441
|
+
calculateNextRestartDelay() {
|
|
442
|
+
const baseDelay = RESTART_BACKOFF_BASE_DELAY;
|
|
443
|
+
const multiplier = Math.pow(RESTART_BACKOFF_MULTIPLIER, this.statistics.consecutiveFailures - 1);
|
|
444
|
+
const calculatedDelay = baseDelay * multiplier;
|
|
445
|
+
this.statistics.nextRestartDelay = Math.min(calculatedDelay, RESTART_BACKOFF_MAX_DELAY);
|
|
446
|
+
}
|
|
447
|
+
/**
|
|
448
|
+
* Check if restart should be attempted based on failure count
|
|
449
|
+
* @returns True if restart should be attempted
|
|
450
|
+
*/
|
|
451
|
+
shouldRestart() {
|
|
452
|
+
return (this.statistics.autoRestartEnabled &&
|
|
453
|
+
this.statistics.consecutiveFailures < MAX_RESTART_COUNT);
|
|
454
|
+
}
|
|
455
|
+
/**
|
|
456
|
+
* Check if this is an unexpected exit (crash detection)
|
|
457
|
+
* @param exitCode Process exit code
|
|
458
|
+
* @param signal Process exit signal
|
|
459
|
+
* @returns True if this is considered an unexpected exit
|
|
460
|
+
*/
|
|
461
|
+
isUnexpectedExit(exitCode, signal) {
|
|
462
|
+
// Expected exits:
|
|
463
|
+
// - Normal exit with code 0
|
|
464
|
+
// - Graceful shutdown via SIGTERM
|
|
465
|
+
// - Process was in stopping state (intentional shutdown)
|
|
466
|
+
if (this.status === 'stopping') {
|
|
467
|
+
return false; // Intentional shutdown
|
|
468
|
+
}
|
|
469
|
+
if (exitCode === 0) {
|
|
470
|
+
return false; // Normal exit
|
|
471
|
+
}
|
|
472
|
+
if (signal === 'SIGTERM') {
|
|
473
|
+
return false; // Graceful shutdown
|
|
474
|
+
}
|
|
475
|
+
// All other exits are considered unexpected
|
|
476
|
+
return true;
|
|
477
|
+
}
|
|
478
|
+
// ---------------------------------------------------------------------------
|
|
479
|
+
// Resource Management and Cleanup
|
|
480
|
+
// ---------------------------------------------------------------------------
|
|
481
|
+
/**
|
|
482
|
+
* Clean up resources (non-destructive, maintains data for persistence)
|
|
483
|
+
*/
|
|
484
|
+
cleanup() {
|
|
485
|
+
console.log(`[ManagedProcessInfo] Cleaning up resources for process '${this.config.name}'`);
|
|
486
|
+
// Remove all event listeners to prevent memory leaks
|
|
487
|
+
this.removeAllListeners();
|
|
488
|
+
// Clear process runtime data but preserve historical data
|
|
489
|
+
this.pid = null;
|
|
490
|
+
this.statistics.startedAt = null;
|
|
491
|
+
console.log(`[ManagedProcessInfo] Resources cleaned up for process '${this.config.name}'`);
|
|
492
|
+
}
|
|
493
|
+
/**
|
|
494
|
+
* Dispose of all resources (destructive, clears all data)
|
|
495
|
+
*/
|
|
496
|
+
dispose() {
|
|
497
|
+
console.log(`[ManagedProcessInfo] Disposing all resources for process '${this.config.name}'`);
|
|
498
|
+
// First perform standard cleanup
|
|
499
|
+
this.removeAllListeners();
|
|
500
|
+
// Clear all runtime data
|
|
501
|
+
this.pid = null;
|
|
502
|
+
this.status = 'stopped';
|
|
503
|
+
// Clear all statistics
|
|
504
|
+
this.statistics = {
|
|
505
|
+
startedAt: null,
|
|
506
|
+
lastStatusChange: Date.now(),
|
|
507
|
+
restarts: 0,
|
|
508
|
+
lastRestart: null,
|
|
509
|
+
memoryHistory: [],
|
|
510
|
+
cpuHistory: [],
|
|
511
|
+
currentMemory: 0,
|
|
512
|
+
currentCpu: 0,
|
|
513
|
+
consecutiveFailures: 0,
|
|
514
|
+
firstFailureTime: null,
|
|
515
|
+
autoRestartEnabled: true,
|
|
516
|
+
nextRestartDelay: RESTART_BACKOFF_BASE_DELAY,
|
|
517
|
+
};
|
|
518
|
+
// Clear all historical data for memory leak prevention
|
|
519
|
+
this.stateHistory.length = 0;
|
|
520
|
+
this.memoryHistoryDetailed.length = 0;
|
|
521
|
+
this.cpuHistoryDetailed.length = 0;
|
|
522
|
+
// Clear crash tracking
|
|
523
|
+
this.lastCrashTime = null;
|
|
524
|
+
console.log(`[ManagedProcessInfo] All resources disposed for process '${this.config.name}'`);
|
|
525
|
+
}
|
|
526
|
+
// ---------------------------------------------------------------------------
|
|
527
|
+
// State History Management
|
|
528
|
+
// ---------------------------------------------------------------------------
|
|
529
|
+
/**
|
|
530
|
+
* Add a state change to history
|
|
531
|
+
* @param from Previous status
|
|
532
|
+
* @param to New status
|
|
533
|
+
* @param reason Optional reason for change
|
|
534
|
+
*/
|
|
535
|
+
addStateChange(from, to, reason) {
|
|
536
|
+
const stateChange = {
|
|
537
|
+
timestamp: Date.now(),
|
|
538
|
+
from,
|
|
539
|
+
to,
|
|
540
|
+
reason,
|
|
541
|
+
};
|
|
542
|
+
this.stateHistory.push(stateChange);
|
|
543
|
+
// Keep only the most recent changes
|
|
544
|
+
if (this.stateHistory.length > MAX_HISTORY_LENGTH) {
|
|
545
|
+
this.stateHistory.shift();
|
|
546
|
+
}
|
|
547
|
+
}
|
|
548
|
+
/**
|
|
549
|
+
* Get state change history
|
|
550
|
+
* @returns Array of state changes
|
|
551
|
+
*/
|
|
552
|
+
getStateHistory() {
|
|
553
|
+
return [...this.stateHistory];
|
|
554
|
+
}
|
|
555
|
+
/**
|
|
556
|
+
* Get memory usage history with timestamps
|
|
557
|
+
* @returns Array of memory samples
|
|
558
|
+
*/
|
|
559
|
+
getMemoryHistory() {
|
|
560
|
+
return [...this.memoryHistoryDetailed];
|
|
561
|
+
}
|
|
562
|
+
/**
|
|
563
|
+
* Get CPU usage history with timestamps
|
|
564
|
+
* @returns Array of CPU samples
|
|
565
|
+
*/
|
|
566
|
+
getCpuHistory() {
|
|
567
|
+
return [...this.cpuHistoryDetailed];
|
|
568
|
+
}
|
|
569
|
+
/**
|
|
570
|
+
* Get last crash time
|
|
571
|
+
* @returns Last crash timestamp or null if never crashed
|
|
572
|
+
*/
|
|
573
|
+
getLastCrashTime() {
|
|
574
|
+
return this.lastCrashTime;
|
|
575
|
+
}
|
|
576
|
+
// ---------------------------------------------------------------------------
|
|
577
|
+
// Persistence Support
|
|
578
|
+
// ---------------------------------------------------------------------------
|
|
579
|
+
/**
|
|
580
|
+
* Serialize process information for persistence
|
|
581
|
+
* @returns Serializable process information
|
|
582
|
+
*/
|
|
583
|
+
toJSON() {
|
|
584
|
+
return {
|
|
585
|
+
name: this.config.name,
|
|
586
|
+
status: this.status,
|
|
587
|
+
pid: this.pid,
|
|
588
|
+
restartCount: this.statistics.restarts,
|
|
589
|
+
autoRestartEnabled: this.statistics.autoRestartEnabled,
|
|
590
|
+
lastStartTime: this.statistics.startedAt,
|
|
591
|
+
stateHistory: this.stateHistory,
|
|
592
|
+
memoryHistory: this.memoryHistoryDetailed,
|
|
593
|
+
cpuHistory: this.cpuHistoryDetailed,
|
|
594
|
+
consecutiveRestarts: this.statistics.consecutiveFailures,
|
|
595
|
+
lastRestartTime: this.statistics.lastRestart,
|
|
596
|
+
lastCrashTime: this.lastCrashTime,
|
|
597
|
+
};
|
|
598
|
+
}
|
|
599
|
+
/**
|
|
600
|
+
* Restore process state from persisted data
|
|
601
|
+
* @param persistedState Previously saved state
|
|
602
|
+
*/
|
|
603
|
+
restoreState(persistedState) {
|
|
604
|
+
// Restore status but ensure no transient states survive restart
|
|
605
|
+
const restoredStatus = [
|
|
606
|
+
'online',
|
|
607
|
+
'starting',
|
|
608
|
+
'stopping',
|
|
609
|
+
'max-memory',
|
|
610
|
+
].includes(persistedState.status)
|
|
611
|
+
? 'stopped'
|
|
612
|
+
: persistedState.status;
|
|
613
|
+
if (this.status !== restoredStatus) {
|
|
614
|
+
this.status = restoredStatus;
|
|
615
|
+
this.addStateChange(this.status, restoredStatus, 'State restored from persistence');
|
|
616
|
+
}
|
|
617
|
+
// PID is always invalid after manager restart
|
|
618
|
+
this.pid = null;
|
|
619
|
+
// Restore statistics
|
|
620
|
+
this.statistics.restarts = persistedState.restartCount || 0;
|
|
621
|
+
this.statistics.autoRestartEnabled =
|
|
622
|
+
persistedState.autoRestartEnabled !== false;
|
|
623
|
+
this.statistics.startedAt = null; // Always null after restart since process isn't running
|
|
624
|
+
this.statistics.lastRestart = persistedState.lastRestartTime || null;
|
|
625
|
+
this.statistics.consecutiveFailures =
|
|
626
|
+
persistedState.consecutiveRestarts || 0;
|
|
627
|
+
// Restore history data
|
|
628
|
+
this.stateHistory = persistedState.stateHistory || [];
|
|
629
|
+
this.memoryHistoryDetailed = persistedState.memoryHistory || [];
|
|
630
|
+
this.cpuHistoryDetailed = persistedState.cpuHistory || [];
|
|
631
|
+
this.lastCrashTime = persistedState.lastCrashTime || null;
|
|
632
|
+
// Trim history to max length if needed
|
|
633
|
+
if (this.stateHistory.length > MAX_HISTORY_LENGTH) {
|
|
634
|
+
this.stateHistory = this.stateHistory.slice(-MAX_HISTORY_LENGTH);
|
|
635
|
+
}
|
|
636
|
+
if (this.memoryHistoryDetailed.length > MAX_HISTORY_LENGTH) {
|
|
637
|
+
this.memoryHistoryDetailed =
|
|
638
|
+
this.memoryHistoryDetailed.slice(-MAX_HISTORY_LENGTH);
|
|
639
|
+
}
|
|
640
|
+
if (this.cpuHistoryDetailed.length > MAX_HISTORY_LENGTH) {
|
|
641
|
+
this.cpuHistoryDetailed =
|
|
642
|
+
this.cpuHistoryDetailed.slice(-MAX_HISTORY_LENGTH);
|
|
643
|
+
}
|
|
644
|
+
}
|
|
645
|
+
}
|
|
646
|
+
// =============================================================================
|
|
647
|
+
// Type Exports
|
|
648
|
+
// =============================================================================
|
|
649
|
+
// Note: EventEmitter type augmentation removed to avoid declaration merging conflicts
|
|
650
|
+
//# sourceMappingURL=managed-process-info.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"managed-process-info.js","sourceRoot":"","sources":["../../../src/process-manager/managed-process-info.ts"],"names":[],"mappings":"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"}
|