@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,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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"}