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