@masuidrive/procman 0.1.1 → 0.2.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/dist/src/cli/commands/help.d.ts.map +1 -1
- package/dist/src/cli/commands/help.js +3 -1
- package/dist/src/cli/commands/help.js.map +1 -1
- package/dist/src/cli/index.js +6 -2
- package/dist/src/cli/index.js.map +1 -1
- package/dist/src/cli/parser.d.ts.map +1 -1
- package/dist/src/cli/parser.js +20 -0
- package/dist/src/cli/parser.js.map +1 -1
- package/dist/src/cli/utils/find-package-json.d.ts +4 -0
- package/dist/src/cli/utils/find-package-json.d.ts.map +1 -0
- package/dist/src/cli/utils/find-package-json.js +15 -0
- package/dist/src/cli/utils/find-package-json.js.map +1 -0
- package/dist/src/config/config-loader.d.ts +1 -0
- package/dist/src/config/config-loader.d.ts.map +1 -1
- package/dist/src/config/config-loader.js +16 -6
- package/dist/src/config/config-loader.js.map +1 -1
- package/dist/src/config/config-validator.d.ts +18 -49
- package/dist/src/config/config-validator.d.ts.map +1 -1
- package/dist/src/config/config-validator.js +64 -172
- package/dist/src/config/config-validator.js.map +1 -1
- package/dist/src/config/path-security-validator.d.ts +39 -0
- package/dist/src/config/path-security-validator.d.ts.map +1 -0
- package/dist/src/config/path-security-validator.js +134 -0
- package/dist/src/config/path-security-validator.js.map +1 -0
- package/dist/src/config/secure-config-loader.d.ts.map +1 -1
- package/dist/src/config/secure-config-loader.js +10 -2
- package/dist/src/config/secure-config-loader.js.map +1 -1
- package/dist/src/config/validation-suggestions.d.ts +13 -0
- package/dist/src/config/validation-suggestions.d.ts.map +1 -0
- package/dist/src/config/validation-suggestions.js +40 -0
- package/dist/src/config/validation-suggestions.js.map +1 -0
- package/dist/src/config/validation-types.d.ts +38 -0
- package/dist/src/config/validation-types.d.ts.map +1 -0
- package/dist/src/config/validation-types.js +7 -0
- package/dist/src/config/validation-types.js.map +1 -0
- package/dist/src/daemon/component-command-wiring.d.ts +19 -0
- package/dist/src/daemon/component-command-wiring.d.ts.map +1 -0
- package/dist/src/daemon/component-command-wiring.js +27 -0
- package/dist/src/daemon/component-command-wiring.js.map +1 -0
- package/dist/src/daemon/component-daemon-interface.d.ts +38 -0
- package/dist/src/daemon/component-daemon-interface.d.ts.map +1 -0
- package/dist/src/daemon/component-daemon-interface.js +72 -0
- package/dist/src/daemon/component-daemon-interface.js.map +1 -0
- package/dist/src/daemon/component-health.d.ts +38 -0
- package/dist/src/daemon/component-health.d.ts.map +1 -0
- package/dist/src/daemon/component-health.js +146 -0
- package/dist/src/daemon/component-health.js.map +1 -0
- package/dist/src/daemon/component-manager-errors.d.ts +20 -0
- package/dist/src/daemon/component-manager-errors.d.ts.map +1 -0
- package/dist/src/daemon/component-manager-errors.js +30 -0
- package/dist/src/daemon/component-manager-errors.js.map +1 -0
- package/dist/src/daemon/component-manager-types.d.ts +23 -0
- package/dist/src/daemon/component-manager-types.d.ts.map +1 -0
- package/dist/src/daemon/component-manager-types.js +5 -0
- package/dist/src/daemon/component-manager-types.js.map +1 -0
- package/dist/src/daemon/component-manager.d.ts +16 -64
- package/dist/src/daemon/component-manager.d.ts.map +1 -1
- package/dist/src/daemon/component-manager.js +72 -509
- package/dist/src/daemon/component-manager.js.map +1 -1
- package/dist/src/daemon/component-registration.d.ts +14 -0
- package/dist/src/daemon/component-registration.d.ts.map +1 -0
- package/dist/src/daemon/component-registration.js +92 -0
- package/dist/src/daemon/component-registration.js.map +1 -0
- package/dist/src/daemon/component-streaming.d.ts +36 -0
- package/dist/src/daemon/component-streaming.d.ts.map +1 -0
- package/dist/src/daemon/component-streaming.js +112 -0
- package/dist/src/daemon/component-streaming.js.map +1 -0
- package/dist/src/daemon/daemon-lifecycle.d.ts +37 -0
- package/dist/src/daemon/daemon-lifecycle.d.ts.map +1 -0
- package/dist/src/daemon/daemon-lifecycle.js +362 -0
- package/dist/src/daemon/daemon-lifecycle.js.map +1 -0
- package/dist/src/daemon/daemon-queries.d.ts +53 -0
- package/dist/src/daemon/daemon-queries.d.ts.map +1 -0
- package/dist/src/daemon/daemon-queries.js +113 -0
- package/dist/src/daemon/daemon-queries.js.map +1 -0
- package/dist/src/daemon/daemon-types.d.ts +30 -0
- package/dist/src/daemon/daemon-types.d.ts.map +1 -0
- package/dist/src/daemon/daemon-types.js +8 -0
- package/dist/src/daemon/daemon-types.js.map +1 -0
- package/dist/src/daemon/disposable-base.d.ts +49 -0
- package/dist/src/daemon/disposable-base.d.ts.map +1 -0
- package/dist/src/daemon/disposable-base.js +70 -0
- package/dist/src/daemon/disposable-base.js.map +1 -0
- package/dist/src/daemon/disposal-guard.d.ts +27 -0
- package/dist/src/daemon/disposal-guard.d.ts.map +1 -0
- package/dist/src/daemon/disposal-guard.js +58 -0
- package/dist/src/daemon/disposal-guard.js.map +1 -0
- package/dist/src/daemon/ipc-command-handler.d.ts +8 -34
- package/dist/src/daemon/ipc-command-handler.d.ts.map +1 -1
- package/dist/src/daemon/ipc-command-handler.js +14 -362
- package/dist/src/daemon/ipc-command-handler.js.map +1 -1
- package/dist/src/daemon/log-command-handlers.d.ts +19 -0
- package/dist/src/daemon/log-command-handlers.d.ts.map +1 -0
- package/dist/src/daemon/log-command-handlers.js +114 -0
- package/dist/src/daemon/log-command-handlers.js.map +1 -0
- package/dist/src/daemon/process-command-handlers.d.ts +32 -0
- package/dist/src/daemon/process-command-handlers.d.ts.map +1 -0
- package/dist/src/daemon/process-command-handlers.js +223 -0
- package/dist/src/daemon/process-command-handlers.js.map +1 -0
- package/dist/src/daemon/procman-daemon.d.ts +22 -98
- package/dist/src/daemon/procman-daemon.d.ts.map +1 -1
- package/dist/src/daemon/procman-daemon.js +107 -604
- package/dist/src/daemon/procman-daemon.js.map +1 -1
- package/dist/src/daemon/resource-manager.d.ts +6 -124
- package/dist/src/daemon/resource-manager.d.ts.map +1 -1
- package/dist/src/daemon/resource-manager.js +5 -231
- package/dist/src/daemon/resource-manager.js.map +1 -1
- package/dist/src/daemon/resource-types.d.ts +23 -0
- package/dist/src/daemon/resource-types.d.ts.map +1 -0
- package/dist/src/daemon/resource-types.js +7 -0
- package/dist/src/daemon/resource-types.js.map +1 -0
- package/dist/src/daemon/shutdown-orchestrator.d.ts +32 -0
- package/dist/src/daemon/shutdown-orchestrator.d.ts.map +1 -0
- package/dist/src/daemon/shutdown-orchestrator.js +123 -0
- package/dist/src/daemon/shutdown-orchestrator.js.map +1 -0
- package/dist/src/daemon/tracked-resources.d.ts +60 -0
- package/dist/src/daemon/tracked-resources.d.ts.map +1 -0
- package/dist/src/daemon/tracked-resources.js +124 -0
- package/dist/src/daemon/tracked-resources.js.map +1 -0
- package/dist/src/process-manager/index.d.ts +5 -1
- package/dist/src/process-manager/index.d.ts.map +1 -1
- package/dist/src/process-manager/index.js +3 -0
- package/dist/src/process-manager/index.js.map +1 -1
- package/dist/src/process-manager/interfaces/process-group.d.ts +6 -0
- package/dist/src/process-manager/interfaces/process-group.d.ts.map +1 -1
- package/dist/src/process-manager/managed-process-events.d.ts +22 -0
- package/dist/src/process-manager/managed-process-events.d.ts.map +1 -0
- package/dist/src/process-manager/managed-process-events.js +5 -0
- package/dist/src/process-manager/managed-process-events.js.map +1 -0
- package/dist/src/process-manager/managed-process-info.d.ts +11 -53
- package/dist/src/process-manager/managed-process-info.d.ts.map +1 -1
- package/dist/src/process-manager/managed-process-info.js +46 -133
- package/dist/src/process-manager/managed-process-info.js.map +1 -1
- package/dist/src/process-manager/process-batch-operations.d.ts +62 -0
- package/dist/src/process-manager/process-batch-operations.d.ts.map +1 -0
- package/dist/src/process-manager/process-batch-operations.js +80 -0
- package/dist/src/process-manager/process-batch-operations.js.map +1 -0
- package/dist/src/process-manager/process-config.d.ts +49 -0
- package/dist/src/process-manager/process-config.d.ts.map +1 -0
- package/dist/src/process-manager/process-config.js +68 -0
- package/dist/src/process-manager/process-config.js.map +1 -0
- package/dist/src/process-manager/process-event-forwarding.d.ts +18 -0
- package/dist/src/process-manager/process-event-forwarding.d.ts.map +1 -0
- package/dist/src/process-manager/process-event-forwarding.js +105 -0
- package/dist/src/process-manager/process-event-forwarding.js.map +1 -0
- package/dist/src/process-manager/process-group-manager.d.ts.map +1 -1
- package/dist/src/process-manager/process-group-manager.js +0 -1
- package/dist/src/process-manager/process-group-manager.js.map +1 -1
- package/dist/src/process-manager/process-info-queries.d.ts +48 -0
- package/dist/src/process-manager/process-info-queries.d.ts.map +1 -0
- package/dist/src/process-manager/process-info-queries.js +92 -0
- package/dist/src/process-manager/process-info-queries.js.map +1 -0
- package/dist/src/process-manager/process-manager.d.ts +5 -174
- package/dist/src/process-manager/process-manager.d.ts.map +1 -1
- package/dist/src/process-manager/process-manager.js +58 -398
- package/dist/src/process-manager/process-manager.js.map +1 -1
- package/dist/src/process-manager/process-monitoring.d.ts +80 -0
- package/dist/src/process-manager/process-monitoring.d.ts.map +1 -0
- package/dist/src/process-manager/process-monitoring.js +142 -0
- package/dist/src/process-manager/process-monitoring.js.map +1 -0
- package/dist/src/process-manager/process-statistics.d.ts +37 -0
- package/dist/src/process-manager/process-statistics.d.ts.map +1 -0
- package/dist/src/process-manager/process-statistics.js +24 -0
- package/dist/src/process-manager/process-statistics.js.map +1 -0
- package/dist/src/process-manager/restart-manager.d.ts +82 -0
- package/dist/src/process-manager/restart-manager.d.ts.map +1 -0
- package/dist/src/process-manager/restart-manager.js +150 -0
- package/dist/src/process-manager/restart-manager.js.map +1 -0
- package/dist/src/services/app-logger.d.ts +144 -0
- package/dist/src/services/app-logger.d.ts.map +1 -0
- package/dist/src/services/app-logger.js +489 -0
- package/dist/src/services/app-logger.js.map +1 -0
- package/dist/src/services/log-buffer.d.ts +35 -0
- package/dist/src/services/log-buffer.d.ts.map +1 -0
- package/dist/src/services/log-buffer.js +87 -0
- package/dist/src/services/log-buffer.js.map +1 -0
- package/dist/src/services/log-event-manager.d.ts +32 -0
- package/dist/src/services/log-event-manager.d.ts.map +1 -0
- package/dist/src/services/log-event-manager.js +31 -0
- package/dist/src/services/log-event-manager.js.map +1 -0
- package/dist/src/services/log-file-manager.d.ts +46 -0
- package/dist/src/services/log-file-manager.d.ts.map +1 -0
- package/dist/src/services/log-file-manager.js +156 -0
- package/dist/src/services/log-file-manager.js.map +1 -0
- package/dist/src/services/log-level-strategy.d.ts +19 -0
- package/dist/src/services/log-level-strategy.d.ts.map +1 -0
- package/dist/src/services/log-level-strategy.js +40 -0
- package/dist/src/services/log-level-strategy.js.map +1 -0
- package/dist/src/services/log-manager-types.d.ts +117 -0
- package/dist/src/services/log-manager-types.d.ts.map +1 -0
- package/dist/src/services/log-manager-types.js +12 -0
- package/dist/src/services/log-manager-types.js.map +1 -0
- package/dist/src/services/log-manager.d.ts +8 -35
- package/dist/src/services/log-manager.d.ts.map +1 -1
- package/dist/src/services/log-manager.js +10 -870
- package/dist/src/services/log-manager.js.map +1 -1
- package/dist/src/services/log-preprocessor.d.ts +30 -0
- package/dist/src/services/log-preprocessor.d.ts.map +1 -0
- package/dist/src/services/log-preprocessor.js +65 -0
- package/dist/src/services/log-preprocessor.js.map +1 -0
- package/dist/src/services/process-log-integration.d.ts +7 -2
- package/dist/src/services/process-log-integration.d.ts.map +1 -1
- package/dist/src/services/process-log-integration.js.map +1 -1
- package/package.json +5 -7
|
@@ -0,0 +1,362 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Daemon lifecycle management - startup, shutdown, restart, and recovery
|
|
3
|
+
*
|
|
4
|
+
* Contains the implementation of lifecycle methods for ProcmanDaemon.
|
|
5
|
+
* These functions accept a daemon context object to access internal state.
|
|
6
|
+
*/
|
|
7
|
+
import { DaemonState } from './daemon-state-manager.js';
|
|
8
|
+
const debugLog = process.env.DEBUG_PROCMAN
|
|
9
|
+
? (...args) => console.error(...args)
|
|
10
|
+
: () => { };
|
|
11
|
+
/**
|
|
12
|
+
* Recovery constants
|
|
13
|
+
*/
|
|
14
|
+
const RECOVERY_CONSTANTS = {
|
|
15
|
+
MAX_RECOVERY_ATTEMPTS: 3,
|
|
16
|
+
RECOVERY_DELAY_MS: 5000,
|
|
17
|
+
};
|
|
18
|
+
export { RECOVERY_CONSTANTS };
|
|
19
|
+
/**
|
|
20
|
+
* Start the daemon - performs environment checks, initializes components,
|
|
21
|
+
* and transitions to RUNNING state.
|
|
22
|
+
*/
|
|
23
|
+
export async function performStart(ctx) {
|
|
24
|
+
const startTime = Date.now();
|
|
25
|
+
debugLog('[DEBUG-PROCMAN-DAEMON] Starting daemon initialization...');
|
|
26
|
+
debugLog('[DEBUG-PROCMAN-DAEMON] Current state check:', JSON.stringify({
|
|
27
|
+
currentState: ctx.stateManager.getCurrentState(),
|
|
28
|
+
canStart: ctx.stateManager.canStart(),
|
|
29
|
+
processId: process.pid,
|
|
30
|
+
timestamp: new Date().toISOString(),
|
|
31
|
+
}, null, 2));
|
|
32
|
+
if (!ctx.stateManager.canStart()) {
|
|
33
|
+
throw new Error(`Cannot start daemon: current state is ${ctx.stateManager.getCurrentState()}`);
|
|
34
|
+
}
|
|
35
|
+
debugLog('[DEBUG-PROCMAN-DAEMON] Transitioning to STARTING state...');
|
|
36
|
+
ctx.stateManager.transitionTo(DaemonState.STARTING);
|
|
37
|
+
try {
|
|
38
|
+
debugLog('[DEBUG-PROCMAN-DAEMON] Step 1: Performing environment checks...');
|
|
39
|
+
await performEnvironmentChecks(ctx);
|
|
40
|
+
debugLog('[DEBUG-PROCMAN-DAEMON] ✓ Environment checks completed');
|
|
41
|
+
debugLog('[DEBUG-PROCMAN-DAEMON] Step 2: Ensuring no daemon running...');
|
|
42
|
+
await ctx.pidManager.ensureNoDaemonRunning();
|
|
43
|
+
debugLog('[DEBUG-PROCMAN-DAEMON] ✓ Daemon uniqueness verified');
|
|
44
|
+
debugLog('[DEBUG-PROCMAN-DAEMON] Step 3: Initializing data directory...');
|
|
45
|
+
await ctx.dataDirectory.ensureDataDirectory();
|
|
46
|
+
debugLog('[DEBUG-PROCMAN-DAEMON] ✓ Data directory ready');
|
|
47
|
+
debugLog('[DEBUG-PROCMAN-DAEMON] Step 4: Writing PID file...');
|
|
48
|
+
await ctx.pidManager.writePIDFile();
|
|
49
|
+
debugLog('[DEBUG-PROCMAN-DAEMON] ✓ PID file written');
|
|
50
|
+
debugLog('[DEBUG-PROCMAN-DAEMON] Step 5: Setting up signal handlers...');
|
|
51
|
+
ctx.signalHandler.setupHandlers();
|
|
52
|
+
debugLog('[DEBUG-PROCMAN-DAEMON] ✓ Signal handlers configured');
|
|
53
|
+
debugLog('[DEBUG-PROCMAN-DAEMON] Step 6: Initializing all components...');
|
|
54
|
+
await ctx.componentManager.initializeAll();
|
|
55
|
+
debugLog('[DEBUG-PROCMAN-DAEMON] ✓ All components initialized');
|
|
56
|
+
// Perform final readiness check with retries
|
|
57
|
+
debugLog('[DEBUG-PROCMAN-DAEMON] Step 7: Performing final readiness verification...');
|
|
58
|
+
let readinessAttempts = 0;
|
|
59
|
+
const maxReadinessAttempts = 10;
|
|
60
|
+
const readinessCheckInterval = 500;
|
|
61
|
+
debugLog('[DEBUG-PROCMAN-DAEMON] Readiness check parameters:', JSON.stringify({
|
|
62
|
+
maxAttempts: maxReadinessAttempts,
|
|
63
|
+
intervalMs: readinessCheckInterval,
|
|
64
|
+
totalMaxTimeMs: maxReadinessAttempts * readinessCheckInterval,
|
|
65
|
+
}, null, 2));
|
|
66
|
+
while (readinessAttempts < maxReadinessAttempts) {
|
|
67
|
+
const checkStartTime = Date.now();
|
|
68
|
+
debugLog(`[DEBUG-PROCMAN-DAEMON] Readiness attempt ${readinessAttempts + 1}/${maxReadinessAttempts}...`);
|
|
69
|
+
try {
|
|
70
|
+
const healthCheck = await ctx.componentManager.performHealthChecks();
|
|
71
|
+
const checkDuration = Date.now() - checkStartTime;
|
|
72
|
+
if (healthCheck.healthy) {
|
|
73
|
+
debugLog('[DEBUG-PROCMAN-DAEMON] ✓ Readiness verification successful!');
|
|
74
|
+
debugLog('[DEBUG-PROCMAN-DAEMON] Readiness success stats:', JSON.stringify({
|
|
75
|
+
attempts: readinessAttempts + 1,
|
|
76
|
+
checkDurationMs: checkDuration,
|
|
77
|
+
healthCheckDetails: healthCheck.details,
|
|
78
|
+
}, null, 2));
|
|
79
|
+
console.log(`Daemon readiness verified after ${readinessAttempts + 1} attempts`);
|
|
80
|
+
break;
|
|
81
|
+
}
|
|
82
|
+
else {
|
|
83
|
+
debugLog('[DEBUG-PROCMAN-DAEMON] ✗ Readiness check failed');
|
|
84
|
+
debugLog('[DEBUG-PROCMAN-DAEMON] Health check failure details:', JSON.stringify({
|
|
85
|
+
attempt: readinessAttempts + 1,
|
|
86
|
+
maxAttempts: maxReadinessAttempts,
|
|
87
|
+
checkDurationMs: checkDuration,
|
|
88
|
+
healthCheckDetails: healthCheck.details,
|
|
89
|
+
}, null, 2));
|
|
90
|
+
console.log(`Readiness check ${readinessAttempts + 1}/${maxReadinessAttempts} failed:`, healthCheck.details);
|
|
91
|
+
readinessAttempts++;
|
|
92
|
+
if (readinessAttempts < maxReadinessAttempts) {
|
|
93
|
+
debugLog(`[DEBUG-PROCMAN-DAEMON] Waiting ${readinessCheckInterval}ms before retry...`);
|
|
94
|
+
await new Promise((resolve) => setTimeout(resolve, readinessCheckInterval));
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
catch (error) {
|
|
99
|
+
const checkDuration = Date.now() - checkStartTime;
|
|
100
|
+
debugLog('[DEBUG-PROCMAN-DAEMON] ✗ Readiness check exception');
|
|
101
|
+
debugLog('[DEBUG-PROCMAN-DAEMON] Exception details:', JSON.stringify({
|
|
102
|
+
attempt: readinessAttempts + 1,
|
|
103
|
+
checkDurationMs: checkDuration,
|
|
104
|
+
errorMessage: error instanceof Error ? error.message : String(error),
|
|
105
|
+
errorStack: error instanceof Error ? error.stack : undefined,
|
|
106
|
+
}, null, 2));
|
|
107
|
+
console.log(`Readiness check ${readinessAttempts + 1}/${maxReadinessAttempts} failed with error:`, error);
|
|
108
|
+
readinessAttempts++;
|
|
109
|
+
if (readinessAttempts < maxReadinessAttempts) {
|
|
110
|
+
await new Promise((resolve) => setTimeout(resolve, readinessCheckInterval));
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
if (readinessAttempts >= maxReadinessAttempts) {
|
|
115
|
+
debugLog('[DEBUG-PROCMAN-DAEMON] ✗ Final readiness verification failed after all attempts');
|
|
116
|
+
debugLog('[DEBUG-PROCMAN-DAEMON] Readiness failure summary:', JSON.stringify({
|
|
117
|
+
totalAttempts: readinessAttempts,
|
|
118
|
+
maxAttempts: maxReadinessAttempts,
|
|
119
|
+
totalTimeSpentMs: readinessAttempts * readinessCheckInterval,
|
|
120
|
+
currentState: ctx.stateManager.getCurrentState(),
|
|
121
|
+
}, null, 2));
|
|
122
|
+
throw new Error('Daemon components initialized but failed final readiness verification');
|
|
123
|
+
}
|
|
124
|
+
// All checks passed - transition to running state
|
|
125
|
+
debugLog('[DEBUG-PROCMAN-DAEMON] Step 8: Transitioning to RUNNING state...');
|
|
126
|
+
ctx.stateManager.transitionTo(DaemonState.RUNNING);
|
|
127
|
+
ctx.recoveryAttempts = 0; // Reset recovery counter on successful start
|
|
128
|
+
// Start memory monitoring
|
|
129
|
+
debugLog('[DEBUG-PROCMAN-DAEMON] Step 9: Starting memory monitoring...');
|
|
130
|
+
ctx.memoryMonitor.start();
|
|
131
|
+
debugLog('[DEBUG-PROCMAN-DAEMON] ✓ Memory monitoring started');
|
|
132
|
+
const totalStartupTime = Date.now() - startTime;
|
|
133
|
+
debugLog('[DEBUG-PROCMAN-DAEMON] ✓ DAEMON STARTUP COMPLETED SUCCESSFULLY!');
|
|
134
|
+
debugLog('[DEBUG-PROCMAN-DAEMON] Final startup stats:', JSON.stringify({
|
|
135
|
+
totalStartupTimeMs: totalStartupTime,
|
|
136
|
+
currentState: ctx.stateManager.getCurrentState(),
|
|
137
|
+
processId: process.pid,
|
|
138
|
+
readinessAttempts: readinessAttempts,
|
|
139
|
+
timestamp: new Date().toISOString(),
|
|
140
|
+
}, null, 2));
|
|
141
|
+
console.log('Daemon started successfully and is ready to handle requests');
|
|
142
|
+
}
|
|
143
|
+
catch (error) {
|
|
144
|
+
const totalStartupTime = Date.now() - startTime;
|
|
145
|
+
debugLog('[DEBUG-PROCMAN-DAEMON] ✗ DAEMON STARTUP FAILED');
|
|
146
|
+
debugLog('[DEBUG-PROCMAN-DAEMON] Startup failure stats:', JSON.stringify({
|
|
147
|
+
totalStartupTimeMs: totalStartupTime,
|
|
148
|
+
currentState: ctx.stateManager.getCurrentState(),
|
|
149
|
+
processId: process.pid,
|
|
150
|
+
errorMessage: error instanceof Error ? error.message : String(error),
|
|
151
|
+
errorStack: error instanceof Error ? error.stack : undefined,
|
|
152
|
+
}, null, 2));
|
|
153
|
+
ctx.stateManager.forceError();
|
|
154
|
+
debugLog('[DEBUG-PROCMAN-DAEMON] Performing startup cleanup...');
|
|
155
|
+
await performStartupCleanup(ctx);
|
|
156
|
+
debugLog('[DEBUG-PROCMAN-DAEMON] Startup cleanup completed');
|
|
157
|
+
throw error;
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* Stop the daemon - cleans up components, signal handlers, and PID file.
|
|
162
|
+
*/
|
|
163
|
+
export async function performStop(ctx) {
|
|
164
|
+
if (!ctx.stateManager.canStop()) {
|
|
165
|
+
throw new Error(`Cannot stop daemon: current state is ${ctx.stateManager.getCurrentState()}`);
|
|
166
|
+
}
|
|
167
|
+
ctx.stateManager.transitionTo(DaemonState.STOPPING);
|
|
168
|
+
try {
|
|
169
|
+
// Stop memory monitoring first
|
|
170
|
+
debugLog('[DEBUG-PROCMAN-DAEMON] Stopping memory monitoring...');
|
|
171
|
+
ctx.memoryMonitor.stop();
|
|
172
|
+
debugLog('[DEBUG-PROCMAN-DAEMON] ✓ Memory monitoring stopped');
|
|
173
|
+
// Stop components with proper error handling
|
|
174
|
+
await ctx.componentManager.cleanupAll();
|
|
175
|
+
// Remove signal handlers
|
|
176
|
+
ctx.signalHandler.cleanupHandlers();
|
|
177
|
+
// Clean up PID file
|
|
178
|
+
await ctx.pidManager.cleanup();
|
|
179
|
+
ctx.stateManager.transitionTo(DaemonState.STOPPED);
|
|
180
|
+
}
|
|
181
|
+
catch (error) {
|
|
182
|
+
ctx.stateManager.forceError();
|
|
183
|
+
// Still try to cleanup critical resources
|
|
184
|
+
await performEmergencyCleanup(ctx);
|
|
185
|
+
throw error;
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* Attempt error recovery
|
|
190
|
+
*/
|
|
191
|
+
export async function performAttemptRecovery(ctx, emitFn, loadConfigFn) {
|
|
192
|
+
if (!ctx.stateManager.isInError()) {
|
|
193
|
+
return true; // Already recovered
|
|
194
|
+
}
|
|
195
|
+
if (ctx.recoveryAttempts >= RECOVERY_CONSTANTS.MAX_RECOVERY_ATTEMPTS) {
|
|
196
|
+
emitFn('recoveryFailed', new Error('Maximum recovery attempts exceeded'));
|
|
197
|
+
return false;
|
|
198
|
+
}
|
|
199
|
+
ctx.recoveryAttempts++;
|
|
200
|
+
emitFn('recoveryStarted');
|
|
201
|
+
try {
|
|
202
|
+
ctx.stateManager.beginRecovery();
|
|
203
|
+
// Perform recovery steps
|
|
204
|
+
await performRecoverySteps(ctx, loadConfigFn);
|
|
205
|
+
ctx.stateManager.completeRecovery();
|
|
206
|
+
emitFn('recoveryCompleted');
|
|
207
|
+
return true;
|
|
208
|
+
}
|
|
209
|
+
catch (error) {
|
|
210
|
+
ctx.stateManager.failRecovery();
|
|
211
|
+
emitFn('recoveryFailed', error);
|
|
212
|
+
// Wait before next attempt
|
|
213
|
+
await new Promise((resolve) => setTimeout(resolve, RECOVERY_CONSTANTS.RECOVERY_DELAY_MS));
|
|
214
|
+
return false;
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
/**
|
|
218
|
+
* Perform environment checks before daemon startup
|
|
219
|
+
*/
|
|
220
|
+
async function performEnvironmentChecks(ctx) {
|
|
221
|
+
// Check 1: Verify HOME environment variable is set
|
|
222
|
+
const homeDir = process.env.HOME || process.env.USERPROFILE;
|
|
223
|
+
if (!homeDir) {
|
|
224
|
+
// Try to detect home directory using os.homedir()
|
|
225
|
+
try {
|
|
226
|
+
const os = await import('os');
|
|
227
|
+
const detectedHome = os.homedir();
|
|
228
|
+
if (!detectedHome) {
|
|
229
|
+
throw new Error('HOME environment variable is not set and could not detect home directory');
|
|
230
|
+
}
|
|
231
|
+
// Set HOME for this process and child processes
|
|
232
|
+
process.env.HOME = detectedHome;
|
|
233
|
+
console.log(`HOME environment variable was missing, set to: ${detectedHome}`);
|
|
234
|
+
}
|
|
235
|
+
catch (error) {
|
|
236
|
+
throw new Error(`Failed to determine home directory: ${error instanceof Error ? error.message : 'Unknown error'}`);
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
// Check 2: Verify data directory path can be resolved
|
|
240
|
+
try {
|
|
241
|
+
const resolvedPath = ctx.dataDirectory.resolveDataDir();
|
|
242
|
+
if (!resolvedPath || resolvedPath.includes('~')) {
|
|
243
|
+
throw new Error(`Failed to expand socket path: ${resolvedPath}. HOME environment variable may not be set.`);
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
catch (error) {
|
|
247
|
+
throw new Error(`Failed to resolve data directory path: ${error instanceof Error ? error.message : 'Unknown error'}`);
|
|
248
|
+
}
|
|
249
|
+
// Check 3: Verify socket path can be resolved
|
|
250
|
+
try {
|
|
251
|
+
const socketPath = await ctx.dataDirectory.getSocketPath();
|
|
252
|
+
if (!socketPath) {
|
|
253
|
+
throw new Error('Failed to resolve socket path');
|
|
254
|
+
}
|
|
255
|
+
// On Unix systems, verify the path doesn't contain unresolved ~ characters
|
|
256
|
+
if (process.platform !== 'win32' && socketPath.includes('~')) {
|
|
257
|
+
throw new Error(`Socket path contains unresolved tilde: ${socketPath}`);
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
catch (error) {
|
|
261
|
+
throw new Error(`Failed to resolve socket path: ${error instanceof Error ? error.message : 'Unknown error'}`);
|
|
262
|
+
}
|
|
263
|
+
// Check 4: Verify we can create the data directory (dry run check)
|
|
264
|
+
try {
|
|
265
|
+
await ctx.dataDirectory.validateDataDirectory();
|
|
266
|
+
// If validation passes, directory already exists with correct permissions
|
|
267
|
+
}
|
|
268
|
+
catch {
|
|
269
|
+
// Directory doesn't exist or has wrong permissions - that's OK, we'll create it later
|
|
270
|
+
// But we should verify we have permission to create it
|
|
271
|
+
const path = await import('path');
|
|
272
|
+
const fs = await import('fs');
|
|
273
|
+
const parentDir = path.dirname(ctx.dataDirectory.getDataDir());
|
|
274
|
+
try {
|
|
275
|
+
await fs.promises.access(parentDir, fs.constants.W_OK);
|
|
276
|
+
}
|
|
277
|
+
catch (accessError) {
|
|
278
|
+
throw new Error(`Cannot write to parent directory ${parentDir}: ${accessError instanceof Error ? accessError.message : 'Permission denied'}`);
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
// Check 5: Verify basic Node.js runtime environment
|
|
282
|
+
if (!process.pid) {
|
|
283
|
+
throw new Error('Invalid process environment: PID not available');
|
|
284
|
+
}
|
|
285
|
+
// Check 6: Verify required modules can be loaded
|
|
286
|
+
try {
|
|
287
|
+
await import('fs');
|
|
288
|
+
await import('path');
|
|
289
|
+
await import('os');
|
|
290
|
+
}
|
|
291
|
+
catch (error) {
|
|
292
|
+
throw new Error(`Failed to load required Node.js modules: ${error instanceof Error ? error.message : 'Unknown error'}`);
|
|
293
|
+
}
|
|
294
|
+
console.log('Environment checks passed successfully');
|
|
295
|
+
}
|
|
296
|
+
/**
|
|
297
|
+
* Perform startup cleanup on failure
|
|
298
|
+
*/
|
|
299
|
+
export async function performStartupCleanup(ctx) {
|
|
300
|
+
const cleanupTasks = [];
|
|
301
|
+
// Cleanup PID file
|
|
302
|
+
cleanupTasks.push(ctx.pidManager.cleanup().catch((error) => {
|
|
303
|
+
debugLog('Failed to cleanup PID file during startup failure:', error);
|
|
304
|
+
}));
|
|
305
|
+
// Cleanup signal handlers
|
|
306
|
+
try {
|
|
307
|
+
ctx.signalHandler.cleanupHandlers();
|
|
308
|
+
}
|
|
309
|
+
catch (error) {
|
|
310
|
+
debugLog('Failed to cleanup signal handlers during startup failure:', error);
|
|
311
|
+
}
|
|
312
|
+
// Cleanup any partially initialized components
|
|
313
|
+
cleanupTasks.push(ctx.componentManager.cleanupAll().catch((error) => {
|
|
314
|
+
debugLog('Failed to cleanup components during startup failure:', error);
|
|
315
|
+
}));
|
|
316
|
+
// Wait for all cleanup tasks to complete
|
|
317
|
+
await Promise.all(cleanupTasks);
|
|
318
|
+
}
|
|
319
|
+
/**
|
|
320
|
+
* Perform emergency cleanup when normal stop fails
|
|
321
|
+
*/
|
|
322
|
+
export async function performEmergencyCleanup(ctx) {
|
|
323
|
+
console.log('Performing emergency cleanup...');
|
|
324
|
+
// Try to cleanup critical resources without throwing errors
|
|
325
|
+
try {
|
|
326
|
+
await ctx.pidManager.cleanup();
|
|
327
|
+
}
|
|
328
|
+
catch (error) {
|
|
329
|
+
console.error('Emergency PID cleanup failed:', error);
|
|
330
|
+
}
|
|
331
|
+
try {
|
|
332
|
+
ctx.signalHandler.cleanupHandlers();
|
|
333
|
+
}
|
|
334
|
+
catch (error) {
|
|
335
|
+
console.error('Emergency signal handler cleanup failed:', error);
|
|
336
|
+
}
|
|
337
|
+
}
|
|
338
|
+
/**
|
|
339
|
+
* Perform recovery steps when in RECOVERING state
|
|
340
|
+
*/
|
|
341
|
+
async function performRecoverySteps(ctx, loadConfigFn) {
|
|
342
|
+
// Step 1: Try to reinitialize components
|
|
343
|
+
try {
|
|
344
|
+
await ctx.componentManager.cleanupAll();
|
|
345
|
+
}
|
|
346
|
+
catch (error) {
|
|
347
|
+
console.log('Component cleanup during recovery failed (expected):', error);
|
|
348
|
+
}
|
|
349
|
+
// Step 2: Reinitialize components
|
|
350
|
+
await ctx.componentManager.initializeAll();
|
|
351
|
+
// Step 3: Reapply current configuration if available
|
|
352
|
+
if (ctx.configFilePath) {
|
|
353
|
+
try {
|
|
354
|
+
await loadConfigFn(ctx.configFilePath);
|
|
355
|
+
}
|
|
356
|
+
catch (error) {
|
|
357
|
+
console.error('Failed to reload configuration during recovery:', error);
|
|
358
|
+
throw error;
|
|
359
|
+
}
|
|
360
|
+
}
|
|
361
|
+
}
|
|
362
|
+
//# sourceMappingURL=daemon-lifecycle.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"daemon-lifecycle.js","sourceRoot":"","sources":["../../../src/daemon/daemon-lifecycle.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Daemon query and status methods
|
|
3
|
+
*
|
|
4
|
+
* Provides functions for querying daemon state, health status,
|
|
5
|
+
* component access, configuration management, and process statuses.
|
|
6
|
+
*/
|
|
7
|
+
import { ConfigLoader } from '../config/config-loader.js';
|
|
8
|
+
import { ProcessManager } from '../process-manager/process-manager.js';
|
|
9
|
+
import { LogManager } from '../services/log-manager.js';
|
|
10
|
+
import { IPCServerBase } from './ipc-server-base.js';
|
|
11
|
+
import { AppConfig } from '../shared/config.js';
|
|
12
|
+
import type { DaemonContext } from './daemon-types.js';
|
|
13
|
+
/**
|
|
14
|
+
* Check if daemon is ready to handle requests.
|
|
15
|
+
* Performs comprehensive health checks on all components.
|
|
16
|
+
*/
|
|
17
|
+
export declare function queryIsReady(ctx: DaemonContext): Promise<boolean>;
|
|
18
|
+
/**
|
|
19
|
+
* Get detailed health status of all components
|
|
20
|
+
*/
|
|
21
|
+
export declare function queryHealthStatus(ctx: DaemonContext): Promise<{
|
|
22
|
+
ready: boolean;
|
|
23
|
+
components: Record<string, {
|
|
24
|
+
status: 'healthy' | 'unhealthy' | 'unknown';
|
|
25
|
+
message: string;
|
|
26
|
+
}>;
|
|
27
|
+
memory?: ReturnType<import('../utils/memory/memory-monitor.js').MemoryMonitor['getHealthInfo']>;
|
|
28
|
+
}>;
|
|
29
|
+
/**
|
|
30
|
+
* Load configuration and apply it
|
|
31
|
+
*/
|
|
32
|
+
export declare function queryLoadConfig(ctx: DaemonContext, configFilePath: string): Promise<AppConfig[]>;
|
|
33
|
+
/**
|
|
34
|
+
* Get component instances by type
|
|
35
|
+
*/
|
|
36
|
+
export declare function getConfigLoader(ctx: DaemonContext): ConfigLoader | undefined;
|
|
37
|
+
export declare function getProcessManager(ctx: DaemonContext): ProcessManager | undefined;
|
|
38
|
+
export declare function getLogManager(ctx: DaemonContext): LogManager | undefined;
|
|
39
|
+
export declare function getIPCServer(ctx: DaemonContext): IPCServerBase | undefined;
|
|
40
|
+
/**
|
|
41
|
+
* Get all process statuses
|
|
42
|
+
*/
|
|
43
|
+
export declare function queryAllProcessStatuses(ctx: DaemonContext): Promise<{
|
|
44
|
+
name: string;
|
|
45
|
+
namespace: string;
|
|
46
|
+
pid: number | null;
|
|
47
|
+
status: import("../shared/process.js").ProcessStatus;
|
|
48
|
+
uptime: number;
|
|
49
|
+
memory: number;
|
|
50
|
+
cpu: number;
|
|
51
|
+
restarts: number;
|
|
52
|
+
}[]>;
|
|
53
|
+
//# sourceMappingURL=daemon-queries.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"daemon-queries.d.ts","sourceRoot":"","sources":["../../../src/daemon/daemon-queries.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAC;AACvE,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAEvD;;;GAGG;AACH,wBAAsB,YAAY,CAAC,GAAG,EAAE,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC,CAYvE;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CAAC,GAAG,EAAE,aAAa,GAAG,OAAO,CAAC;IACnE,KAAK,EAAE,OAAO,CAAC;IACf,UAAU,EAAE,MAAM,CAChB,MAAM,EACN;QAAE,MAAM,EAAE,SAAS,GAAG,WAAW,GAAG,SAAS,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CACjE,CAAC;IACF,MAAM,CAAC,EAAE,UAAU,CACjB,OAAO,mCAAmC,EAAE,aAAa,CAAC,eAAe,CAAC,CAC3E,CAAC;CACH,CAAC,CASD;AAED;;GAEG;AACH,wBAAsB,eAAe,CACnC,GAAG,EAAE,aAAa,EAClB,cAAc,EAAE,MAAM,GACrB,OAAO,CAAC,SAAS,EAAE,CAAC,CA0CtB;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,aAAa,GAAG,YAAY,GAAG,SAAS,CAE5E;AAED,wBAAgB,iBAAiB,CAC/B,GAAG,EAAE,aAAa,GACjB,cAAc,GAAG,SAAS,CAE5B;AAED,wBAAgB,aAAa,CAAC,GAAG,EAAE,aAAa,GAAG,UAAU,GAAG,SAAS,CAExE;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,aAAa,GAAG,aAAa,GAAG,SAAS,CAE1E;AAED;;GAEG;AACH,wBAAsB,uBAAuB,CAAC,GAAG,EAAE,aAAa;;;;;;;;;KAyB/D"}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Daemon query and status methods
|
|
3
|
+
*
|
|
4
|
+
* Provides functions for querying daemon state, health status,
|
|
5
|
+
* component access, configuration management, and process statuses.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Check if daemon is ready to handle requests.
|
|
9
|
+
* Performs comprehensive health checks on all components.
|
|
10
|
+
*/
|
|
11
|
+
export async function queryIsReady(ctx) {
|
|
12
|
+
if (!ctx.stateManager.isRunning()) {
|
|
13
|
+
return false;
|
|
14
|
+
}
|
|
15
|
+
try {
|
|
16
|
+
const healthCheck = await ctx.componentManager.performHealthChecks();
|
|
17
|
+
return healthCheck.healthy;
|
|
18
|
+
}
|
|
19
|
+
catch (error) {
|
|
20
|
+
console.error('Health check failed:', error);
|
|
21
|
+
return false;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Get detailed health status of all components
|
|
26
|
+
*/
|
|
27
|
+
export async function queryHealthStatus(ctx) {
|
|
28
|
+
const healthCheck = await ctx.componentManager.performHealthChecks();
|
|
29
|
+
const memoryHealthInfo = ctx.memoryMonitor.getHealthInfo();
|
|
30
|
+
return {
|
|
31
|
+
ready: healthCheck.healthy && ctx.stateManager.isRunning(),
|
|
32
|
+
components: healthCheck.details,
|
|
33
|
+
memory: memoryHealthInfo,
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Load configuration and apply it
|
|
38
|
+
*/
|
|
39
|
+
export async function queryLoadConfig(ctx, configFilePath) {
|
|
40
|
+
const configLoader = ctx.componentManager.getComponent('configLoader');
|
|
41
|
+
const processManager = ctx.componentManager.getComponent('processManager');
|
|
42
|
+
const logManager = ctx.componentManager.getComponent('logManager');
|
|
43
|
+
if (!configLoader) {
|
|
44
|
+
throw new Error('ConfigLoader not initialized');
|
|
45
|
+
}
|
|
46
|
+
if (!processManager) {
|
|
47
|
+
throw new Error('ProcessManager not initialized');
|
|
48
|
+
}
|
|
49
|
+
ctx.configFilePath = configFilePath;
|
|
50
|
+
const config = await configLoader.load(configFilePath);
|
|
51
|
+
ctx.currentConfig = config.apps;
|
|
52
|
+
// Stop all existing processes
|
|
53
|
+
const allProcesses = processManager.getAllProcessInfo();
|
|
54
|
+
if (allProcesses.length > 0) {
|
|
55
|
+
const processNames = allProcesses.map((p) => p.name);
|
|
56
|
+
await processManager.stopProcesses(processNames);
|
|
57
|
+
}
|
|
58
|
+
// Configure new processes
|
|
59
|
+
for (const app of config.apps) {
|
|
60
|
+
processManager.configureProcess(app);
|
|
61
|
+
// Setup log manager for this app if log files are configured
|
|
62
|
+
if (logManager && (app.log_file || app.out_file || app.error_file)) {
|
|
63
|
+
logManager.setupAppLogs(app.name, {
|
|
64
|
+
logFile: app.log_file,
|
|
65
|
+
outFile: app.out_file,
|
|
66
|
+
errorFile: app.error_file,
|
|
67
|
+
namespace: app.namespace,
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
return config.apps;
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Get component instances by type
|
|
75
|
+
*/
|
|
76
|
+
export function getConfigLoader(ctx) {
|
|
77
|
+
return ctx.componentManager.getComponent('configLoader');
|
|
78
|
+
}
|
|
79
|
+
export function getProcessManager(ctx) {
|
|
80
|
+
return ctx.componentManager.getComponent('processManager');
|
|
81
|
+
}
|
|
82
|
+
export function getLogManager(ctx) {
|
|
83
|
+
return ctx.componentManager.getComponent('logManager');
|
|
84
|
+
}
|
|
85
|
+
export function getIPCServer(ctx) {
|
|
86
|
+
return ctx.componentManager.getComponent('ipcServer');
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Get all process statuses
|
|
90
|
+
*/
|
|
91
|
+
export async function queryAllProcessStatuses(ctx) {
|
|
92
|
+
const processManager = getProcessManager(ctx);
|
|
93
|
+
if (!processManager) {
|
|
94
|
+
return [];
|
|
95
|
+
}
|
|
96
|
+
const processInfos = processManager.getAllProcessInfo();
|
|
97
|
+
const statusPromises = processInfos.map(async (info) => {
|
|
98
|
+
// Get process stats from monitor
|
|
99
|
+
const stats = await processManager.monitor.getProcessStats(info.name);
|
|
100
|
+
return {
|
|
101
|
+
name: info.name,
|
|
102
|
+
namespace: info.namespace || 'default',
|
|
103
|
+
pid: info.pid,
|
|
104
|
+
status: info.status,
|
|
105
|
+
uptime: info.uptime,
|
|
106
|
+
memory: stats?.memory || 0,
|
|
107
|
+
cpu: stats?.cpu || 0,
|
|
108
|
+
restarts: info.restarts,
|
|
109
|
+
};
|
|
110
|
+
});
|
|
111
|
+
return Promise.all(statusPromises);
|
|
112
|
+
}
|
|
113
|
+
//# sourceMappingURL=daemon-queries.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"daemon-queries.js","sourceRoot":"","sources":["../../../src/daemon/daemon-queries.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AASH;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,GAAkB;IACnD,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,SAAS,EAAE,EAAE,CAAC;QAClC,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,CAAC;QACH,MAAM,WAAW,GAAG,MAAM,GAAG,CAAC,gBAAgB,CAAC,mBAAmB,EAAE,CAAC;QACrE,OAAO,WAAW,CAAC,OAAO,CAAC;IAC7B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,sBAAsB,EAAE,KAAK,CAAC,CAAC;QAC7C,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,GAAkB;IAUxD,MAAM,WAAW,GAAG,MAAM,GAAG,CAAC,gBAAgB,CAAC,mBAAmB,EAAE,CAAC;IACrE,MAAM,gBAAgB,GAAG,GAAG,CAAC,aAAa,CAAC,aAAa,EAAE,CAAC;IAE3D,OAAO;QACL,KAAK,EAAE,WAAW,CAAC,OAAO,IAAI,GAAG,CAAC,YAAY,CAAC,SAAS,EAAE;QAC1D,UAAU,EAAE,WAAW,CAAC,OAAO;QAC/B,MAAM,EAAE,gBAAgB;KACzB,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,GAAkB,EAClB,cAAsB;IAEtB,MAAM,YAAY,GAChB,GAAG,CAAC,gBAAgB,CAAC,YAAY,CAAe,cAAc,CAAC,CAAC;IAClE,MAAM,cAAc,GAClB,GAAG,CAAC,gBAAgB,CAAC,YAAY,CAAiB,gBAAgB,CAAC,CAAC;IACtE,MAAM,UAAU,GACd,GAAG,CAAC,gBAAgB,CAAC,YAAY,CAAa,YAAY,CAAC,CAAC;IAE9D,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;IAClD,CAAC;IACD,IAAI,CAAC,cAAc,EAAE,CAAC;QACpB,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;IACpD,CAAC;IAED,GAAG,CAAC,cAAc,GAAG,cAAc,CAAC;IACpC,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IACvD,GAAG,CAAC,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC;IAEhC,8BAA8B;IAC9B,MAAM,YAAY,GAAG,cAAc,CAAC,iBAAiB,EAAE,CAAC;IACxD,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5B,MAAM,YAAY,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QACrD,MAAM,cAAc,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC;IACnD,CAAC;IAED,0BAA0B;IAC1B,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;QAC9B,cAAc,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC;QAErC,6DAA6D;QAC7D,IAAI,UAAU,IAAI,CAAC,GAAG,CAAC,QAAQ,IAAI,GAAG,CAAC,QAAQ,IAAI,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC;YACnE,UAAU,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,EAAE;gBAChC,OAAO,EAAE,GAAG,CAAC,QAAQ;gBACrB,OAAO,EAAE,GAAG,CAAC,QAAQ;gBACrB,SAAS,EAAE,GAAG,CAAC,UAAU;gBACzB,SAAS,EAAE,GAAG,CAAC,SAAS;aACzB,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC,IAAI,CAAC;AACrB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,GAAkB;IAChD,OAAO,GAAG,CAAC,gBAAgB,CAAC,YAAY,CAAe,cAAc,CAAC,CAAC;AACzE,CAAC;AAED,MAAM,UAAU,iBAAiB,CAC/B,GAAkB;IAElB,OAAO,GAAG,CAAC,gBAAgB,CAAC,YAAY,CAAiB,gBAAgB,CAAC,CAAC;AAC7E,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,GAAkB;IAC9C,OAAO,GAAG,CAAC,gBAAgB,CAAC,YAAY,CAAa,YAAY,CAAC,CAAC;AACrE,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,GAAkB;IAC7C,OAAO,GAAG,CAAC,gBAAgB,CAAC,YAAY,CAAgB,WAAW,CAAC,CAAC;AACvE,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAAC,GAAkB;IAC9D,MAAM,cAAc,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC;IAC9C,IAAI,CAAC,cAAc,EAAE,CAAC;QACpB,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,YAAY,GAAG,cAAc,CAAC,iBAAiB,EAAE,CAAC;IAExD,MAAM,cAAc,GAAG,YAAY,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;QACrD,iCAAiC;QACjC,MAAM,KAAK,GAAG,MAAM,cAAc,CAAC,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEtE,OAAO;YACL,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,SAAS,EAAE,IAAI,CAAC,SAAS,IAAI,SAAS;YACtC,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,MAAM,EAAE,KAAK,EAAE,MAAM,IAAI,CAAC;YAC1B,GAAG,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC;YACpB,QAAQ,EAAE,IAAI,CAAC,QAAQ;SACxB,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,OAAO,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;AACrC,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared types for daemon module decomposition
|
|
3
|
+
*
|
|
4
|
+
* Provides the DaemonContext interface that allows extracted modules
|
|
5
|
+
* to access internal daemon state without circular dependencies.
|
|
6
|
+
*/
|
|
7
|
+
import type { DataDirectory } from './data-directory.js';
|
|
8
|
+
import type { PIDManager } from './pid-manager.js';
|
|
9
|
+
import type { DaemonStateManager } from './daemon-state-manager.js';
|
|
10
|
+
import type { ComponentManager } from './component-manager.js';
|
|
11
|
+
import type { SignalHandler } from './signal-handler.js';
|
|
12
|
+
import type { MemoryMonitor } from '../utils/memory/memory-monitor.js';
|
|
13
|
+
/**
|
|
14
|
+
* Internal context shared across daemon sub-modules.
|
|
15
|
+
* Exposes the internal managers and mutable state that lifecycle,
|
|
16
|
+
* shutdown, and query functions need to operate on.
|
|
17
|
+
*/
|
|
18
|
+
export interface DaemonContext {
|
|
19
|
+
readonly dataDirectory: DataDirectory;
|
|
20
|
+
readonly pidManager: PIDManager;
|
|
21
|
+
readonly stateManager: DaemonStateManager;
|
|
22
|
+
readonly componentManager: ComponentManager;
|
|
23
|
+
readonly signalHandler: SignalHandler;
|
|
24
|
+
readonly memoryMonitor: MemoryMonitor;
|
|
25
|
+
currentConfig?: import('../shared/config.js').AppConfig[];
|
|
26
|
+
configFilePath?: string;
|
|
27
|
+
recoveryAttempts: number;
|
|
28
|
+
isShuttingDown: boolean;
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=daemon-types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"daemon-types.d.ts","sourceRoot":"","sources":["../../../src/daemon/daemon-types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AAEvE;;;;GAIG;AACH,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,aAAa,EAAE,aAAa,CAAC;IACtC,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC;IAChC,QAAQ,CAAC,YAAY,EAAE,kBAAkB,CAAC;IAC1C,QAAQ,CAAC,gBAAgB,EAAE,gBAAgB,CAAC;IAC5C,QAAQ,CAAC,aAAa,EAAE,aAAa,CAAC;IACtC,QAAQ,CAAC,aAAa,EAAE,aAAa,CAAC;IACtC,aAAa,CAAC,EAAE,OAAO,qBAAqB,EAAE,SAAS,EAAE,CAAC;IAC1D,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,gBAAgB,EAAE,MAAM,CAAC;IACzB,cAAc,EAAE,OAAO,CAAC;CACzB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"daemon-types.js","sourceRoot":"","sources":["../../../src/daemon/daemon-types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Disposable Base Class
|
|
3
|
+
*
|
|
4
|
+
* Abstract base class implementing the Disposable pattern with
|
|
5
|
+
* integrated resource management.
|
|
6
|
+
*/
|
|
7
|
+
import { EventEmitter } from 'events';
|
|
8
|
+
import type { IDisposable } from './resource-types.js';
|
|
9
|
+
import { ResourceManager } from './resource-manager.js';
|
|
10
|
+
import type { TrackedTimeout } from './tracked-resources.js';
|
|
11
|
+
import type { TrackedInterval } from './tracked-resources.js';
|
|
12
|
+
import type { TrackedEventListener } from './tracked-resources.js';
|
|
13
|
+
/**
|
|
14
|
+
* Abstract base class implementing the Disposable pattern
|
|
15
|
+
*/
|
|
16
|
+
export declare abstract class DisposableBase implements IDisposable {
|
|
17
|
+
private disposed;
|
|
18
|
+
protected readonly resourceManager: ResourceManager;
|
|
19
|
+
constructor();
|
|
20
|
+
/**
|
|
21
|
+
* Dispose the object and all its resources
|
|
22
|
+
*/
|
|
23
|
+
dispose(): Promise<void>;
|
|
24
|
+
/**
|
|
25
|
+
* Check if the object is disposed
|
|
26
|
+
*/
|
|
27
|
+
isDisposed(): boolean;
|
|
28
|
+
/**
|
|
29
|
+
* Ensure the object is not disposed
|
|
30
|
+
*/
|
|
31
|
+
protected ensureNotDisposed(): void;
|
|
32
|
+
/**
|
|
33
|
+
* Override this method to implement custom disposal logic
|
|
34
|
+
*/
|
|
35
|
+
protected abstract disposeCore(): Promise<void>;
|
|
36
|
+
/**
|
|
37
|
+
* Helper method to safely track timeouts
|
|
38
|
+
*/
|
|
39
|
+
protected safeSetTimeout(callback: () => void, delay: number, metadata?: Record<string, unknown>): TrackedTimeout;
|
|
40
|
+
/**
|
|
41
|
+
* Helper method to safely track intervals
|
|
42
|
+
*/
|
|
43
|
+
protected safeSetInterval(callback: () => void, interval: number, metadata?: Record<string, unknown>): TrackedInterval;
|
|
44
|
+
/**
|
|
45
|
+
* Helper method to safely track event listeners
|
|
46
|
+
*/
|
|
47
|
+
protected safeAddEventListener(emitter: EventEmitter, event: string, listener: (...args: any[]) => void, metadata?: Record<string, unknown>): TrackedEventListener;
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=disposable-base.d.ts.map
|