@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,107 @@
1
+ /**
2
+ * IPC Command Handler - IPCコマンドの処理実装
3
+ *
4
+ * ProcmanDaemonで受信したIPCコマンドを処理する責務を持つ。
5
+ * 各コマンドの実装を提供し、適切なレスポンスを生成する。
6
+ */
7
+ import { EventEmitter } from 'events';
8
+ import { ConfigLoader } from '../config/config-loader.js';
9
+ import { ProcessManager } from '../process-manager/process-manager.js';
10
+ import { LogManager } from '../services/log-manager.js';
11
+ import { AppConfig } from '../shared/config.js';
12
+ import { CommandType, IPCMessage, IPCResponse } from '../shared/ipc.js';
13
+ import { LOG_STREAM_EVENTS } from '../shared/constants-streaming.js';
14
+ /**
15
+ * Daemon interface for command handler
16
+ */
17
+ export interface DaemonInterface {
18
+ getConfigLoader(): ConfigLoader | undefined;
19
+ getProcessManager(): ProcessManager | undefined;
20
+ getLogManager(): LogManager | undefined;
21
+ getAllProcessStatuses(): Promise<any>;
22
+ getConfig(): AppConfig[] | undefined;
23
+ loadConfig(configFilePath: string): Promise<AppConfig[]>;
24
+ stop(): Promise<void>;
25
+ }
26
+ /**
27
+ * Command handler events
28
+ */
29
+ export interface CommandHandlerEvents {
30
+ 'command:received': (command: CommandType, id: string) => void;
31
+ 'command:completed': (command: CommandType, id: string) => void;
32
+ 'command:error': (command: CommandType, id: string, error: Error) => void;
33
+ [LOG_STREAM_EVENTS.START_LOG_STREAM]: (config: {
34
+ messageId: string;
35
+ target: string;
36
+ options: any;
37
+ connectionId?: string;
38
+ }) => void;
39
+ [LOG_STREAM_EVENTS.STOP_LOG_STREAM]: (config: {
40
+ sessionId: string;
41
+ }) => void;
42
+ }
43
+ /**
44
+ * IPC command handler implementation
45
+ */
46
+ export declare class IPCCommandHandler extends EventEmitter {
47
+ private daemon;
48
+ private readonly listenerCleanup;
49
+ constructor(daemon: DaemonInterface);
50
+ /**
51
+ * Private method to register and track listeners
52
+ */
53
+ private registerListener;
54
+ /**
55
+ * Handle incoming IPC message
56
+ */
57
+ handleMessage(message: IPCMessage, connection?: any): Promise<IPCResponse>;
58
+ /**
59
+ * Handle LOAD command
60
+ */
61
+ private handleLoadCommand;
62
+ /**
63
+ * Handle START command
64
+ */
65
+ private handleStartCommand;
66
+ /**
67
+ * Handle STOP command
68
+ */
69
+ private handleStopCommand;
70
+ /**
71
+ * Handle RESTART command
72
+ */
73
+ private handleRestartCommand;
74
+ /**
75
+ * Handle LIST command
76
+ */
77
+ private handleListCommand;
78
+ /**
79
+ * Handle LOG command
80
+ */
81
+ private handleLogCommand;
82
+ /**
83
+ * Handle CLEAR_LOG command
84
+ */
85
+ private handleClearLogCommand;
86
+ /**
87
+ * Handle EXIT command
88
+ */
89
+ private handleExitCommand;
90
+ /**
91
+ * Clean up all managed listeners
92
+ */
93
+ cleanup(): Promise<void>;
94
+ /**
95
+ * Get statistics about listener management
96
+ */
97
+ getListenerStats(): {
98
+ managedListeners: number;
99
+ ownListeners: number;
100
+ };
101
+ /**
102
+ * Override EventEmitter methods for type safety
103
+ */
104
+ on<K extends keyof CommandHandlerEvents>(event: K, listener: CommandHandlerEvents[K]): this;
105
+ emit<K extends keyof CommandHandlerEvents>(event: K, ...args: Parameters<CommandHandlerEvents[K]>): boolean;
106
+ }
107
+ //# sourceMappingURL=ipc-command-handler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ipc-command-handler.d.ts","sourceRoot":"","sources":["../../../src/daemon/ipc-command-handler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,483 @@
1
+ /**
2
+ * IPC Command Handler - IPCコマンドの処理実装
3
+ *
4
+ * ProcmanDaemonで受信したIPCコマンドを処理する責務を持つ。
5
+ * 各コマンドの実装を提供し、適切なレスポンスを生成する。
6
+ */
7
+ import { EventEmitter } from 'events';
8
+ import { EventCleanupHelper } from '../utils/event-cleanup.js';
9
+ import { LOG_STREAM_EVENTS } from '../shared/constants-streaming.js';
10
+ /**
11
+ * Command type constants
12
+ */
13
+ const COMMAND_TYPES = {
14
+ LOAD: 'load',
15
+ START: 'start',
16
+ STOP: 'stop',
17
+ RESTART: 'restart',
18
+ LIST: 'list',
19
+ LOG: 'log',
20
+ CLEAR_LOG: 'clear-log',
21
+ EXIT: 'exit',
22
+ };
23
+ /**
24
+ * Timing constants
25
+ */
26
+ const TIMING_CONSTANTS = {
27
+ EXIT_SHUTDOWN_DELAY_MS: 100,
28
+ };
29
+ /**
30
+ * IPC command handler implementation
31
+ */
32
+ export class IPCCommandHandler extends EventEmitter {
33
+ daemon;
34
+ // Add EventCleanupHelper for proper listener cleanup
35
+ listenerCleanup = new EventCleanupHelper();
36
+ constructor(daemon) {
37
+ super();
38
+ this.daemon = daemon;
39
+ // No initialization needed for EventCleanupHelper
40
+ }
41
+ /**
42
+ * Private method to register and track listeners
43
+ */
44
+ registerListener(emitter, event, listener) {
45
+ this.listenerCleanup.track(emitter, event, listener);
46
+ }
47
+ /**
48
+ * Handle incoming IPC message
49
+ */
50
+ async handleMessage(message,
51
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
52
+ connection) {
53
+ this.emit('command:received', message.type, message.id);
54
+ try {
55
+ let response;
56
+ switch (message.type) {
57
+ case COMMAND_TYPES.LOAD:
58
+ response = await this.handleLoadCommand(message);
59
+ break;
60
+ case COMMAND_TYPES.START:
61
+ response = await this.handleStartCommand(message);
62
+ break;
63
+ case COMMAND_TYPES.STOP:
64
+ response = await this.handleStopCommand(message);
65
+ break;
66
+ case COMMAND_TYPES.RESTART:
67
+ response = await this.handleRestartCommand(message);
68
+ break;
69
+ case COMMAND_TYPES.LIST:
70
+ response = await this.handleListCommand(message);
71
+ break;
72
+ case COMMAND_TYPES.LOG:
73
+ response = await this.handleLogCommand(message, connection);
74
+ break;
75
+ case COMMAND_TYPES.CLEAR_LOG:
76
+ response = await this.handleClearLogCommand(message);
77
+ break;
78
+ case COMMAND_TYPES.EXIT:
79
+ response = await this.handleExitCommand(message);
80
+ break;
81
+ default:
82
+ throw new Error(`Unknown command type: ${message.type}`);
83
+ }
84
+ this.emit('command:completed', message.type, message.id);
85
+ return response;
86
+ }
87
+ catch (error) {
88
+ const errorObj = error instanceof Error ? error : new Error(String(error));
89
+ this.emit('command:error', message.type, message.id, errorObj);
90
+ return {
91
+ id: message.id,
92
+ requestId: message.id,
93
+ type: message.type,
94
+ timestamp: Date.now(),
95
+ success: false,
96
+ error: {
97
+ code: 'UNKNOWN_ERROR',
98
+ message: errorObj.message,
99
+ },
100
+ };
101
+ }
102
+ }
103
+ /**
104
+ * Handle LOAD command
105
+ */
106
+ async handleLoadCommand(message) {
107
+ const { configPath } = message.payload;
108
+ await this.daemon.loadConfig(configPath);
109
+ const config = this.daemon.getConfig();
110
+ const response = {
111
+ config: { apps: config || [] },
112
+ appsCount: config?.length || 0,
113
+ };
114
+ return {
115
+ id: message.id,
116
+ requestId: message.id,
117
+ type: COMMAND_TYPES.LOAD,
118
+ timestamp: Date.now(),
119
+ success: true,
120
+ data: response,
121
+ };
122
+ }
123
+ /**
124
+ * Handle START command
125
+ */
126
+ async handleStartCommand(message) {
127
+ const { targets } = message.payload;
128
+ const processManager = this.daemon.getProcessManager();
129
+ if (!processManager) {
130
+ throw new Error('Process manager not initialized');
131
+ }
132
+ // Determine which processes to start
133
+ let targetProcesses = [];
134
+ if (targets && targets.length > 0) {
135
+ // Check if targets are namespace patterns (e.g., "namespace:*")
136
+ targetProcesses = targets.flatMap((target) => {
137
+ if (target.includes(':')) {
138
+ const [namespace] = target.split(':');
139
+ return processManager.getProcessNamesByNamespace(namespace);
140
+ }
141
+ return target;
142
+ });
143
+ }
144
+ else {
145
+ // Start all processes
146
+ targetProcesses = processManager.getProcessNames();
147
+ }
148
+ if (targetProcesses.length === 0) {
149
+ throw new Error('No processes found to start');
150
+ }
151
+ // Start processes
152
+ const batchResults = await processManager.startProcesses(targetProcesses);
153
+ // Count successes and failures
154
+ const started = batchResults
155
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
156
+ .filter((r) => r.success)
157
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
158
+ .map((r) => r.name);
159
+ const alreadyRunning = [];
160
+ const failed = batchResults
161
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
162
+ .filter((r) => !r.success)
163
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
164
+ .map((r) => ({
165
+ name: r.name,
166
+ error: r.error || 'Unknown error',
167
+ }));
168
+ const response = {
169
+ started,
170
+ alreadyRunning,
171
+ failed,
172
+ };
173
+ return {
174
+ id: message.id,
175
+ requestId: message.id,
176
+ type: COMMAND_TYPES.START,
177
+ timestamp: Date.now(),
178
+ success: true,
179
+ data: response,
180
+ };
181
+ }
182
+ /**
183
+ * Handle STOP command
184
+ */
185
+ async handleStopCommand(message) {
186
+ const { targets } = message.payload;
187
+ const processManager = this.daemon.getProcessManager();
188
+ if (!processManager) {
189
+ throw new Error('Process manager not initialized');
190
+ }
191
+ // Determine which processes to stop
192
+ let targetProcesses = [];
193
+ if (targets && targets.length > 0) {
194
+ targetProcesses = targets.flatMap((target) => {
195
+ if (target.includes(':')) {
196
+ const [namespace] = target.split(':');
197
+ return processManager.getProcessNamesByNamespace(namespace);
198
+ }
199
+ return target;
200
+ });
201
+ }
202
+ else {
203
+ // Stop all processes
204
+ targetProcesses = processManager.getProcessNames();
205
+ }
206
+ if (targetProcesses.length === 0) {
207
+ throw new Error('No processes found to stop');
208
+ }
209
+ // Stop processes
210
+ const batchResults = await processManager.stopProcesses(targetProcesses);
211
+ // Count successes and failures
212
+ const stopped = batchResults
213
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
214
+ .filter((r) => r.success)
215
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
216
+ .map((r) => r.name);
217
+ const alreadyStopped = [];
218
+ const failed = batchResults
219
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
220
+ .filter((r) => !r.success)
221
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
222
+ .map((r) => ({
223
+ name: r.name,
224
+ error: r.error || 'Unknown error',
225
+ }));
226
+ const response = {
227
+ stopped,
228
+ alreadyStopped,
229
+ failed,
230
+ };
231
+ return {
232
+ id: message.id,
233
+ requestId: message.id,
234
+ type: COMMAND_TYPES.STOP,
235
+ timestamp: Date.now(),
236
+ success: true,
237
+ data: response,
238
+ };
239
+ }
240
+ /**
241
+ * Handle RESTART command
242
+ */
243
+ async handleRestartCommand(message) {
244
+ const { targets } = message.payload;
245
+ const processManager = this.daemon.getProcessManager();
246
+ if (!processManager) {
247
+ throw new Error('Process manager not initialized');
248
+ }
249
+ // Determine which processes to restart
250
+ let targetProcesses = [];
251
+ if (targets && targets.length > 0) {
252
+ targetProcesses = targets.flatMap((target) => {
253
+ if (target.includes(':')) {
254
+ const [namespace] = target.split(':');
255
+ return processManager.getProcessNamesByNamespace(namespace);
256
+ }
257
+ return target;
258
+ });
259
+ }
260
+ else {
261
+ // Restart all processes
262
+ targetProcesses = processManager.getProcessNames();
263
+ }
264
+ if (targetProcesses.length === 0) {
265
+ throw new Error('No processes found to restart');
266
+ }
267
+ // Restart processes
268
+ const batchResults = await processManager.restartProcesses(targetProcesses);
269
+ // Count successes and failures
270
+ const restarted = batchResults
271
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
272
+ .filter((r) => r.success)
273
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
274
+ .map((r) => r.name);
275
+ const failed = batchResults
276
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
277
+ .filter((r) => !r.success)
278
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
279
+ .map((r) => ({
280
+ name: r.name,
281
+ error: r.error || 'Unknown error',
282
+ }));
283
+ const response = {
284
+ restarted,
285
+ failed,
286
+ };
287
+ return {
288
+ id: message.id,
289
+ requestId: message.id,
290
+ type: COMMAND_TYPES.RESTART,
291
+ timestamp: Date.now(),
292
+ success: true,
293
+ data: response,
294
+ };
295
+ }
296
+ /**
297
+ * Handle LIST command
298
+ */
299
+ async handleListCommand(message) {
300
+ const processes = await this.daemon.getAllProcessStatuses();
301
+ const response = {
302
+ configFile: '<unknown>',
303
+ daemonUptime: process.uptime(),
304
+ processes,
305
+ };
306
+ return {
307
+ id: message.id,
308
+ requestId: message.id,
309
+ type: COMMAND_TYPES.LIST,
310
+ timestamp: Date.now(),
311
+ success: true,
312
+ data: response,
313
+ };
314
+ }
315
+ /**
316
+ * Handle LOG command
317
+ */
318
+ async handleLogCommand(message,
319
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
320
+ connection) {
321
+ const { target, options } = message.payload;
322
+ const logManager = this.daemon.getLogManager();
323
+ if (!logManager) {
324
+ throw new Error('Log manager not initialized');
325
+ }
326
+ // Check if streaming is requested
327
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
328
+ const follow = options?.follow;
329
+ if (follow) {
330
+ // ストリーミングモードの場合、接続情報を保存してストリーミングを開始
331
+ // 注: 実際のストリーミングはIPCサーバー側で処理する必要がある
332
+ // ここでは通常のレスポンスを返し、別途ストリーミングイベントを送信する
333
+ // ストリーミング開始のマーカーを含むレスポンスを返す
334
+ const response = {
335
+ entries: [],
336
+ total: 0,
337
+ streaming: true, // ストリーミングモードであることを示すフラグ
338
+ };
339
+ // ストリーミングの設定をイベントとして発行
340
+ // これにより、IPCサーバーがストリーミングを開始できる
341
+ this.emit(LOG_STREAM_EVENTS.START_LOG_STREAM, {
342
+ messageId: message.id,
343
+ target,
344
+ options,
345
+ connectionId: connection?.id, // Pass connection ID for specific client streaming
346
+ });
347
+ return {
348
+ id: message.id,
349
+ requestId: message.id,
350
+ type: COMMAND_TYPES.LOG,
351
+ timestamp: Date.now(),
352
+ success: true,
353
+ data: response,
354
+ };
355
+ }
356
+ // 通常モード(非ストリーミング)
357
+ const logOptions = {
358
+ lines: options?.lines || 100,
359
+ };
360
+ const logs = await logManager.readLogs(target, logOptions);
361
+ const response = {
362
+ entries: logs,
363
+ total: logs.length,
364
+ };
365
+ return {
366
+ id: message.id,
367
+ requestId: message.id,
368
+ type: COMMAND_TYPES.LOG,
369
+ timestamp: Date.now(),
370
+ success: true,
371
+ data: response,
372
+ };
373
+ }
374
+ /**
375
+ * Handle CLEAR_LOG command
376
+ */
377
+ async handleClearLogCommand(message) {
378
+ const { target } = message.payload;
379
+ const logManager = this.daemon.getLogManager();
380
+ const processManager = this.daemon.getProcessManager();
381
+ if (!logManager) {
382
+ throw new Error('Log manager not initialized');
383
+ }
384
+ // Determine which logs to clear
385
+ let targetProcesses = [];
386
+ if (target) {
387
+ if (target.includes(':')) {
388
+ const [namespace] = target.split(':');
389
+ targetProcesses =
390
+ processManager?.getProcessNamesByNamespace(namespace) || [];
391
+ }
392
+ else {
393
+ targetProcesses = [target];
394
+ }
395
+ }
396
+ else {
397
+ targetProcesses = processManager?.getProcessNames() || [];
398
+ }
399
+ if (targetProcesses.length === 0) {
400
+ throw new Error('No processes found to clear logs');
401
+ }
402
+ // Clear logs for each process
403
+ for (const processName of targetProcesses) {
404
+ await logManager.clearLogs(processName);
405
+ }
406
+ const response = {
407
+ cleared: targetProcesses,
408
+ };
409
+ return {
410
+ id: message.id,
411
+ requestId: message.id,
412
+ type: COMMAND_TYPES.CLEAR_LOG,
413
+ timestamp: Date.now(),
414
+ success: true,
415
+ data: response,
416
+ };
417
+ }
418
+ /**
419
+ * Handle EXIT command
420
+ */
421
+ async handleExitCommand(message) {
422
+ const processManager = this.daemon.getProcessManager();
423
+ const processCount = processManager?.getProcessNames().length || 0;
424
+ const response = {
425
+ processCount,
426
+ };
427
+ // Schedule daemon shutdown after sending response
428
+ setTimeout(() => {
429
+ this.daemon
430
+ .stop()
431
+ .then(() => {
432
+ process.exit(0);
433
+ })
434
+ .catch((error) => {
435
+ console.error('Error during daemon shutdown:', error);
436
+ process.exit(1);
437
+ });
438
+ }, TIMING_CONSTANTS.EXIT_SHUTDOWN_DELAY_MS);
439
+ return {
440
+ id: message.id,
441
+ requestId: message.id,
442
+ type: COMMAND_TYPES.EXIT,
443
+ timestamp: Date.now(),
444
+ success: true,
445
+ data: response,
446
+ };
447
+ }
448
+ /**
449
+ * Clean up all managed listeners
450
+ */
451
+ async cleanup() {
452
+ // Clean up all managed listeners
453
+ // Clean up all tracked listeners
454
+ await this.listenerCleanup.dispose();
455
+ // Clean up our own listeners
456
+ this.removeAllListeners();
457
+ // Listeners cleaned up by EventCleanupHelper
458
+ }
459
+ /**
460
+ * Get statistics about listener management
461
+ */
462
+ getListenerStats() {
463
+ const ownEvents = this.eventNames();
464
+ let ownListenersCount = 0;
465
+ for (const event of ownEvents) {
466
+ ownListenersCount += this.listenerCount(event);
467
+ }
468
+ return {
469
+ managedListeners: this.listenerCleanup.getListenerCount(),
470
+ ownListeners: ownListenersCount,
471
+ };
472
+ }
473
+ /**
474
+ * Override EventEmitter methods for type safety
475
+ */
476
+ on(event, listener) {
477
+ return super.on(event, listener);
478
+ }
479
+ emit(event, ...args) {
480
+ return super.emit(event, ...args);
481
+ }
482
+ }
483
+ //# sourceMappingURL=ipc-command-handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ipc-command-handler.js","sourceRoot":"","sources":["../../../src/daemon/ipc-command-handler.ts"],"names":[],"mappings":"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"}