@masuidrive/procman 0.1.2 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/src/cli/commands/help.d.ts.map +1 -1
- package/dist/src/cli/commands/help.js +3 -1
- package/dist/src/cli/commands/help.js.map +1 -1
- package/dist/src/cli/index.js +6 -2
- package/dist/src/cli/index.js.map +1 -1
- package/dist/src/cli/parser.d.ts.map +1 -1
- package/dist/src/cli/parser.js +20 -0
- package/dist/src/cli/parser.js.map +1 -1
- package/dist/src/cli/utils/find-package-json.d.ts +4 -0
- package/dist/src/cli/utils/find-package-json.d.ts.map +1 -0
- package/dist/src/cli/utils/find-package-json.js +15 -0
- package/dist/src/cli/utils/find-package-json.js.map +1 -0
- package/dist/src/config/config-loader.d.ts +1 -0
- package/dist/src/config/config-loader.d.ts.map +1 -1
- package/dist/src/config/config-loader.js +16 -6
- package/dist/src/config/config-loader.js.map +1 -1
- package/dist/src/config/config-validator.d.ts +18 -49
- package/dist/src/config/config-validator.d.ts.map +1 -1
- package/dist/src/config/config-validator.js +64 -172
- package/dist/src/config/config-validator.js.map +1 -1
- package/dist/src/config/path-security-validator.d.ts +39 -0
- package/dist/src/config/path-security-validator.d.ts.map +1 -0
- package/dist/src/config/path-security-validator.js +134 -0
- package/dist/src/config/path-security-validator.js.map +1 -0
- package/dist/src/config/secure-config-loader.d.ts.map +1 -1
- package/dist/src/config/secure-config-loader.js +10 -2
- package/dist/src/config/secure-config-loader.js.map +1 -1
- package/dist/src/config/validation-suggestions.d.ts +13 -0
- package/dist/src/config/validation-suggestions.d.ts.map +1 -0
- package/dist/src/config/validation-suggestions.js +40 -0
- package/dist/src/config/validation-suggestions.js.map +1 -0
- package/dist/src/config/validation-types.d.ts +38 -0
- package/dist/src/config/validation-types.d.ts.map +1 -0
- package/dist/src/config/validation-types.js +7 -0
- package/dist/src/config/validation-types.js.map +1 -0
- package/dist/src/daemon/component-command-wiring.d.ts +19 -0
- package/dist/src/daemon/component-command-wiring.d.ts.map +1 -0
- package/dist/src/daemon/component-command-wiring.js +27 -0
- package/dist/src/daemon/component-command-wiring.js.map +1 -0
- package/dist/src/daemon/component-daemon-interface.d.ts +38 -0
- package/dist/src/daemon/component-daemon-interface.d.ts.map +1 -0
- package/dist/src/daemon/component-daemon-interface.js +72 -0
- package/dist/src/daemon/component-daemon-interface.js.map +1 -0
- package/dist/src/daemon/component-health.d.ts +38 -0
- package/dist/src/daemon/component-health.d.ts.map +1 -0
- package/dist/src/daemon/component-health.js +146 -0
- package/dist/src/daemon/component-health.js.map +1 -0
- package/dist/src/daemon/component-manager-errors.d.ts +20 -0
- package/dist/src/daemon/component-manager-errors.d.ts.map +1 -0
- package/dist/src/daemon/component-manager-errors.js +30 -0
- package/dist/src/daemon/component-manager-errors.js.map +1 -0
- package/dist/src/daemon/component-manager-types.d.ts +23 -0
- package/dist/src/daemon/component-manager-types.d.ts.map +1 -0
- package/dist/src/daemon/component-manager-types.js +5 -0
- package/dist/src/daemon/component-manager-types.js.map +1 -0
- package/dist/src/daemon/component-manager.d.ts +16 -64
- package/dist/src/daemon/component-manager.d.ts.map +1 -1
- package/dist/src/daemon/component-manager.js +72 -509
- package/dist/src/daemon/component-manager.js.map +1 -1
- package/dist/src/daemon/component-registration.d.ts +14 -0
- package/dist/src/daemon/component-registration.d.ts.map +1 -0
- package/dist/src/daemon/component-registration.js +92 -0
- package/dist/src/daemon/component-registration.js.map +1 -0
- package/dist/src/daemon/component-streaming.d.ts +36 -0
- package/dist/src/daemon/component-streaming.d.ts.map +1 -0
- package/dist/src/daemon/component-streaming.js +112 -0
- package/dist/src/daemon/component-streaming.js.map +1 -0
- package/dist/src/daemon/daemon-lifecycle.d.ts +37 -0
- package/dist/src/daemon/daemon-lifecycle.d.ts.map +1 -0
- package/dist/src/daemon/daemon-lifecycle.js +362 -0
- package/dist/src/daemon/daemon-lifecycle.js.map +1 -0
- package/dist/src/daemon/daemon-queries.d.ts +53 -0
- package/dist/src/daemon/daemon-queries.d.ts.map +1 -0
- package/dist/src/daemon/daemon-queries.js +113 -0
- package/dist/src/daemon/daemon-queries.js.map +1 -0
- package/dist/src/daemon/daemon-types.d.ts +30 -0
- package/dist/src/daemon/daemon-types.d.ts.map +1 -0
- package/dist/src/daemon/daemon-types.js +8 -0
- package/dist/src/daemon/daemon-types.js.map +1 -0
- package/dist/src/daemon/disposable-base.d.ts +49 -0
- package/dist/src/daemon/disposable-base.d.ts.map +1 -0
- package/dist/src/daemon/disposable-base.js +70 -0
- package/dist/src/daemon/disposable-base.js.map +1 -0
- package/dist/src/daemon/disposal-guard.d.ts +27 -0
- package/dist/src/daemon/disposal-guard.d.ts.map +1 -0
- package/dist/src/daemon/disposal-guard.js +58 -0
- package/dist/src/daemon/disposal-guard.js.map +1 -0
- package/dist/src/daemon/ipc-command-handler.d.ts +8 -34
- package/dist/src/daemon/ipc-command-handler.d.ts.map +1 -1
- package/dist/src/daemon/ipc-command-handler.js +14 -362
- package/dist/src/daemon/ipc-command-handler.js.map +1 -1
- package/dist/src/daemon/log-command-handlers.d.ts +19 -0
- package/dist/src/daemon/log-command-handlers.d.ts.map +1 -0
- package/dist/src/daemon/log-command-handlers.js +114 -0
- package/dist/src/daemon/log-command-handlers.js.map +1 -0
- package/dist/src/daemon/process-command-handlers.d.ts +32 -0
- package/dist/src/daemon/process-command-handlers.d.ts.map +1 -0
- package/dist/src/daemon/process-command-handlers.js +223 -0
- package/dist/src/daemon/process-command-handlers.js.map +1 -0
- package/dist/src/daemon/procman-daemon.d.ts +22 -98
- package/dist/src/daemon/procman-daemon.d.ts.map +1 -1
- package/dist/src/daemon/procman-daemon.js +107 -604
- package/dist/src/daemon/procman-daemon.js.map +1 -1
- package/dist/src/daemon/resource-manager.d.ts +6 -124
- package/dist/src/daemon/resource-manager.d.ts.map +1 -1
- package/dist/src/daemon/resource-manager.js +5 -231
- package/dist/src/daemon/resource-manager.js.map +1 -1
- package/dist/src/daemon/resource-types.d.ts +23 -0
- package/dist/src/daemon/resource-types.d.ts.map +1 -0
- package/dist/src/daemon/resource-types.js +7 -0
- package/dist/src/daemon/resource-types.js.map +1 -0
- package/dist/src/daemon/shutdown-orchestrator.d.ts +32 -0
- package/dist/src/daemon/shutdown-orchestrator.d.ts.map +1 -0
- package/dist/src/daemon/shutdown-orchestrator.js +123 -0
- package/dist/src/daemon/shutdown-orchestrator.js.map +1 -0
- package/dist/src/daemon/tracked-resources.d.ts +60 -0
- package/dist/src/daemon/tracked-resources.d.ts.map +1 -0
- package/dist/src/daemon/tracked-resources.js +124 -0
- package/dist/src/daemon/tracked-resources.js.map +1 -0
- package/dist/src/process-manager/index.d.ts +5 -1
- package/dist/src/process-manager/index.d.ts.map +1 -1
- package/dist/src/process-manager/index.js +3 -0
- package/dist/src/process-manager/index.js.map +1 -1
- package/dist/src/process-manager/interfaces/process-group.d.ts +6 -0
- package/dist/src/process-manager/interfaces/process-group.d.ts.map +1 -1
- package/dist/src/process-manager/managed-process-events.d.ts +22 -0
- package/dist/src/process-manager/managed-process-events.d.ts.map +1 -0
- package/dist/src/process-manager/managed-process-events.js +5 -0
- package/dist/src/process-manager/managed-process-events.js.map +1 -0
- package/dist/src/process-manager/managed-process-info.d.ts +11 -53
- package/dist/src/process-manager/managed-process-info.d.ts.map +1 -1
- package/dist/src/process-manager/managed-process-info.js +46 -133
- package/dist/src/process-manager/managed-process-info.js.map +1 -1
- package/dist/src/process-manager/process-batch-operations.d.ts +62 -0
- package/dist/src/process-manager/process-batch-operations.d.ts.map +1 -0
- package/dist/src/process-manager/process-batch-operations.js +80 -0
- package/dist/src/process-manager/process-batch-operations.js.map +1 -0
- package/dist/src/process-manager/process-config.d.ts +49 -0
- package/dist/src/process-manager/process-config.d.ts.map +1 -0
- package/dist/src/process-manager/process-config.js +68 -0
- package/dist/src/process-manager/process-config.js.map +1 -0
- package/dist/src/process-manager/process-event-forwarding.d.ts +18 -0
- package/dist/src/process-manager/process-event-forwarding.d.ts.map +1 -0
- package/dist/src/process-manager/process-event-forwarding.js +105 -0
- package/dist/src/process-manager/process-event-forwarding.js.map +1 -0
- package/dist/src/process-manager/process-group-manager.d.ts.map +1 -1
- package/dist/src/process-manager/process-group-manager.js +0 -1
- package/dist/src/process-manager/process-group-manager.js.map +1 -1
- package/dist/src/process-manager/process-info-queries.d.ts +48 -0
- package/dist/src/process-manager/process-info-queries.d.ts.map +1 -0
- package/dist/src/process-manager/process-info-queries.js +92 -0
- package/dist/src/process-manager/process-info-queries.js.map +1 -0
- package/dist/src/process-manager/process-manager.d.ts +5 -174
- package/dist/src/process-manager/process-manager.d.ts.map +1 -1
- package/dist/src/process-manager/process-manager.js +58 -398
- package/dist/src/process-manager/process-manager.js.map +1 -1
- package/dist/src/process-manager/process-monitoring.d.ts +80 -0
- package/dist/src/process-manager/process-monitoring.d.ts.map +1 -0
- package/dist/src/process-manager/process-monitoring.js +142 -0
- package/dist/src/process-manager/process-monitoring.js.map +1 -0
- package/dist/src/process-manager/process-statistics.d.ts +37 -0
- package/dist/src/process-manager/process-statistics.d.ts.map +1 -0
- package/dist/src/process-manager/process-statistics.js +24 -0
- package/dist/src/process-manager/process-statistics.js.map +1 -0
- package/dist/src/process-manager/restart-manager.d.ts +82 -0
- package/dist/src/process-manager/restart-manager.d.ts.map +1 -0
- package/dist/src/process-manager/restart-manager.js +150 -0
- package/dist/src/process-manager/restart-manager.js.map +1 -0
- package/dist/src/services/app-logger.d.ts +144 -0
- package/dist/src/services/app-logger.d.ts.map +1 -0
- package/dist/src/services/app-logger.js +489 -0
- package/dist/src/services/app-logger.js.map +1 -0
- package/dist/src/services/log-buffer.d.ts +35 -0
- package/dist/src/services/log-buffer.d.ts.map +1 -0
- package/dist/src/services/log-buffer.js +87 -0
- package/dist/src/services/log-buffer.js.map +1 -0
- package/dist/src/services/log-event-manager.d.ts +32 -0
- package/dist/src/services/log-event-manager.d.ts.map +1 -0
- package/dist/src/services/log-event-manager.js +31 -0
- package/dist/src/services/log-event-manager.js.map +1 -0
- package/dist/src/services/log-file-manager.d.ts +46 -0
- package/dist/src/services/log-file-manager.d.ts.map +1 -0
- package/dist/src/services/log-file-manager.js +156 -0
- package/dist/src/services/log-file-manager.js.map +1 -0
- package/dist/src/services/log-level-strategy.d.ts +19 -0
- package/dist/src/services/log-level-strategy.d.ts.map +1 -0
- package/dist/src/services/log-level-strategy.js +40 -0
- package/dist/src/services/log-level-strategy.js.map +1 -0
- package/dist/src/services/log-manager-types.d.ts +117 -0
- package/dist/src/services/log-manager-types.d.ts.map +1 -0
- package/dist/src/services/log-manager-types.js +12 -0
- package/dist/src/services/log-manager-types.js.map +1 -0
- package/dist/src/services/log-manager.d.ts +8 -35
- package/dist/src/services/log-manager.d.ts.map +1 -1
- package/dist/src/services/log-manager.js +10 -870
- package/dist/src/services/log-manager.js.map +1 -1
- package/dist/src/services/log-preprocessor.d.ts +30 -0
- package/dist/src/services/log-preprocessor.d.ts.map +1 -0
- package/dist/src/services/log-preprocessor.js +65 -0
- package/dist/src/services/log-preprocessor.js.map +1 -0
- package/dist/src/services/process-log-integration.d.ts +7 -2
- package/dist/src/services/process-log-integration.d.ts.map +1 -1
- package/dist/src/services/process-log-integration.js.map +1 -1
- package/package.json +5 -7
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"disposable-base.d.ts","sourceRoot":"","sources":["../../../src/daemon/disposable-base.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAEtC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAEnE;;GAEG;AACH,8BAAsB,cAAe,YAAW,WAAW;IACzD,OAAO,CAAC,QAAQ,CAAS;IACzB,SAAS,CAAC,QAAQ,CAAC,eAAe,EAAE,eAAe,CAAC;;IAMpD;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAgB9B;;OAEG;IACH,UAAU,IAAI,OAAO;IAIrB;;OAEG;IACH,SAAS,CAAC,iBAAiB,IAAI,IAAI;IAMnC;;OAEG;IACH,SAAS,CAAC,QAAQ,CAAC,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC;IAE/C;;OAEG;IACH,SAAS,CAAC,cAAc,CACtB,QAAQ,EAAE,MAAM,IAAI,EACpB,KAAK,EAAE,MAAM,EACb,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACjC,cAAc;IAKjB;;OAEG;IACH,SAAS,CAAC,eAAe,CACvB,QAAQ,EAAE,MAAM,IAAI,EACpB,QAAQ,EAAE,MAAM,EAChB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACjC,eAAe;IAKlB;;OAEG;IACH,SAAS,CAAC,oBAAoB,CAC5B,OAAO,EAAE,YAAY,EACrB,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,EAClC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACjC,oBAAoB;CASxB"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Disposable Base Class
|
|
3
|
+
*
|
|
4
|
+
* Abstract base class implementing the Disposable pattern with
|
|
5
|
+
* integrated resource management.
|
|
6
|
+
*/
|
|
7
|
+
import { ResourceManager } from './resource-manager.js';
|
|
8
|
+
/**
|
|
9
|
+
* Abstract base class implementing the Disposable pattern
|
|
10
|
+
*/
|
|
11
|
+
export class DisposableBase {
|
|
12
|
+
disposed = false;
|
|
13
|
+
resourceManager;
|
|
14
|
+
constructor() {
|
|
15
|
+
this.resourceManager = new ResourceManager();
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Dispose the object and all its resources
|
|
19
|
+
*/
|
|
20
|
+
async dispose() {
|
|
21
|
+
if (this.disposed) {
|
|
22
|
+
return;
|
|
23
|
+
}
|
|
24
|
+
this.disposed = true;
|
|
25
|
+
try {
|
|
26
|
+
// Call the derived class cleanup method
|
|
27
|
+
await this.disposeCore();
|
|
28
|
+
}
|
|
29
|
+
finally {
|
|
30
|
+
// Always dispose the resource manager
|
|
31
|
+
await this.resourceManager.dispose();
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Check if the object is disposed
|
|
36
|
+
*/
|
|
37
|
+
isDisposed() {
|
|
38
|
+
return this.disposed;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Ensure the object is not disposed
|
|
42
|
+
*/
|
|
43
|
+
ensureNotDisposed() {
|
|
44
|
+
if (this.disposed) {
|
|
45
|
+
throw new Error(`${this.constructor.name} has been disposed`);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Helper method to safely track timeouts
|
|
50
|
+
*/
|
|
51
|
+
safeSetTimeout(callback, delay, metadata) {
|
|
52
|
+
this.ensureNotDisposed();
|
|
53
|
+
return this.resourceManager.trackTimeout(callback, delay, metadata);
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Helper method to safely track intervals
|
|
57
|
+
*/
|
|
58
|
+
safeSetInterval(callback, interval, metadata) {
|
|
59
|
+
this.ensureNotDisposed();
|
|
60
|
+
return this.resourceManager.trackInterval(callback, interval, metadata);
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Helper method to safely track event listeners
|
|
64
|
+
*/
|
|
65
|
+
safeAddEventListener(emitter, event, listener, metadata) {
|
|
66
|
+
this.ensureNotDisposed();
|
|
67
|
+
return this.resourceManager.trackEventListener(emitter, event, listener, metadata);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=disposable-base.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"disposable-base.js","sourceRoot":"","sources":["../../../src/daemon/disposable-base.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAKxD;;GAEG;AACH,MAAM,OAAgB,cAAc;IAC1B,QAAQ,GAAG,KAAK,CAAC;IACN,eAAe,CAAkB;IAEpD;QACE,IAAI,CAAC,eAAe,GAAG,IAAI,eAAe,EAAE,CAAC;IAC/C,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,OAAO;QACX,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,OAAO;QACT,CAAC;QAED,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QAErB,IAAI,CAAC;YACH,wCAAwC;YACxC,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;QAC3B,CAAC;gBAAS,CAAC;YACT,sCAAsC;YACtC,MAAM,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,CAAC;QACvC,CAAC;IACH,CAAC;IAED;;OAEG;IACH,UAAU;QACR,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;IAED;;OAEG;IACO,iBAAiB;QACzB,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,oBAAoB,CAAC,CAAC;QAChE,CAAC;IACH,CAAC;IAOD;;OAEG;IACO,cAAc,CACtB,QAAoB,EACpB,KAAa,EACb,QAAkC;QAElC,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACzB,OAAO,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC,QAAQ,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;IACtE,CAAC;IAED;;OAEG;IACO,eAAe,CACvB,QAAoB,EACpB,QAAgB,EAChB,QAAkC;QAElC,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACzB,OAAO,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAC1E,CAAC;IAED;;OAEG;IACO,oBAAoB,CAC5B,OAAqB,EACrB,KAAa,EACb,QAAkC,EAClC,QAAkC;QAElC,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACzB,OAAO,IAAI,CAAC,eAAe,CAAC,kBAAkB,CAC5C,OAAO,EACP,KAAK,EACL,QAAQ,EACR,QAAQ,CACT,CAAC;IACJ,CAAC;CACF"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Disposal Guard
|
|
3
|
+
*
|
|
4
|
+
* Utility class for preventing race conditions during disposal.
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Utility class for preventing race conditions during disposal
|
|
8
|
+
*/
|
|
9
|
+
export declare class DisposalGuard {
|
|
10
|
+
private disposing;
|
|
11
|
+
private disposed;
|
|
12
|
+
/**
|
|
13
|
+
* Execute an operation with disposal protection
|
|
14
|
+
*/
|
|
15
|
+
executeWithGuard<T>(operation: () => Promise<T>): Promise<T>;
|
|
16
|
+
/**
|
|
17
|
+
* Execute disposal with race condition protection
|
|
18
|
+
*/
|
|
19
|
+
executeDisposal(disposalFunc: () => Promise<void>): Promise<boolean>;
|
|
20
|
+
isDisposed(): boolean;
|
|
21
|
+
isDisposing(): boolean;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Create a new disposal guard instance
|
|
25
|
+
*/
|
|
26
|
+
export declare function createDisposalGuard(): DisposalGuard;
|
|
27
|
+
//# sourceMappingURL=disposal-guard.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"disposal-guard.d.ts","sourceRoot":"","sources":["../../../src/daemon/disposal-guard.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;GAEG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,QAAQ,CAAS;IAEzB;;OAEG;IACG,gBAAgB,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAYlE;;OAEG;IACG,eAAe,CAAC,YAAY,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;IAqB1E,UAAU,IAAI,OAAO;IAIrB,WAAW,IAAI,OAAO;CAGvB;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,aAAa,CAEnD"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Disposal Guard
|
|
3
|
+
*
|
|
4
|
+
* Utility class for preventing race conditions during disposal.
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Utility class for preventing race conditions during disposal
|
|
8
|
+
*/
|
|
9
|
+
export class DisposalGuard {
|
|
10
|
+
disposing = false;
|
|
11
|
+
disposed = false;
|
|
12
|
+
/**
|
|
13
|
+
* Execute an operation with disposal protection
|
|
14
|
+
*/
|
|
15
|
+
async executeWithGuard(operation) {
|
|
16
|
+
if (this.disposed) {
|
|
17
|
+
throw new Error('Object has been disposed');
|
|
18
|
+
}
|
|
19
|
+
if (this.disposing) {
|
|
20
|
+
throw new Error('Object is being disposed');
|
|
21
|
+
}
|
|
22
|
+
return operation();
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Execute disposal with race condition protection
|
|
26
|
+
*/
|
|
27
|
+
async executeDisposal(disposalFunc) {
|
|
28
|
+
if (this.disposed) {
|
|
29
|
+
return false; // Already disposed
|
|
30
|
+
}
|
|
31
|
+
if (this.disposing) {
|
|
32
|
+
return false; // Already disposing
|
|
33
|
+
}
|
|
34
|
+
this.disposing = true;
|
|
35
|
+
try {
|
|
36
|
+
await disposalFunc();
|
|
37
|
+
this.disposed = true;
|
|
38
|
+
return true;
|
|
39
|
+
}
|
|
40
|
+
catch (error) {
|
|
41
|
+
this.disposing = false; // Reset on error
|
|
42
|
+
throw error;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
isDisposed() {
|
|
46
|
+
return this.disposed;
|
|
47
|
+
}
|
|
48
|
+
isDisposing() {
|
|
49
|
+
return this.disposing;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Create a new disposal guard instance
|
|
54
|
+
*/
|
|
55
|
+
export function createDisposalGuard() {
|
|
56
|
+
return new DisposalGuard();
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=disposal-guard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"disposal-guard.js","sourceRoot":"","sources":["../../../src/daemon/disposal-guard.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;GAEG;AACH,MAAM,OAAO,aAAa;IAChB,SAAS,GAAG,KAAK,CAAC;IAClB,QAAQ,GAAG,KAAK,CAAC;IAEzB;;OAEG;IACH,KAAK,CAAC,gBAAgB,CAAI,SAA2B;QACnD,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;QAC9C,CAAC;QAED,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACnB,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;QAC9C,CAAC;QAED,OAAO,SAAS,EAAE,CAAC;IACrB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,eAAe,CAAC,YAAiC;QACrD,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,OAAO,KAAK,CAAC,CAAC,mBAAmB;QACnC,CAAC;QAED,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACnB,OAAO,KAAK,CAAC,CAAC,oBAAoB;QACpC,CAAC;QAED,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QAEtB,IAAI,CAAC;YACH,MAAM,YAAY,EAAE,CAAC;YACrB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;YACrB,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,CAAC,iBAAiB;YACzC,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED,UAAU;QACR,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;IAED,WAAW;QACT,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;CACF;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB;IACjC,OAAO,IAAI,aAAa,EAAE,CAAC;AAC7B,CAAC"}
|
|
@@ -3,6 +3,9 @@
|
|
|
3
3
|
*
|
|
4
4
|
* ProcmanDaemonで受信したIPCコマンドを処理する責務を持つ。
|
|
5
5
|
* 各コマンドの実装を提供し、適切なレスポンスを生成する。
|
|
6
|
+
*
|
|
7
|
+
* Process-related handlers are in ./process-command-handlers.ts
|
|
8
|
+
* Log-related handlers are in ./log-command-handlers.ts
|
|
6
9
|
*/
|
|
7
10
|
import { EventEmitter } from 'events';
|
|
8
11
|
import { ConfigLoader } from '../config/config-loader.js';
|
|
@@ -10,6 +13,7 @@ import { ProcessManager } from '../process-manager/process-manager.js';
|
|
|
10
13
|
import { LogManager } from '../services/log-manager.js';
|
|
11
14
|
import { AppConfig } from '../shared/config.js';
|
|
12
15
|
import { CommandType, IPCMessage, IPCResponse } from '../shared/ipc.js';
|
|
16
|
+
import type { LogOptions } from '../shared/logs.js';
|
|
13
17
|
import { LOG_STREAM_EVENTS } from '../shared/constants-streaming.js';
|
|
14
18
|
/**
|
|
15
19
|
* Daemon interface for command handler
|
|
@@ -33,7 +37,7 @@ export interface CommandHandlerEvents {
|
|
|
33
37
|
[LOG_STREAM_EVENTS.START_LOG_STREAM]: (config: {
|
|
34
38
|
messageId: string;
|
|
35
39
|
target: string;
|
|
36
|
-
options
|
|
40
|
+
options?: LogOptions;
|
|
37
41
|
connectionId?: string;
|
|
38
42
|
}) => void;
|
|
39
43
|
[LOG_STREAM_EVENTS.STOP_LOG_STREAM]: (config: {
|
|
@@ -54,39 +58,9 @@ export declare class IPCCommandHandler extends EventEmitter {
|
|
|
54
58
|
/**
|
|
55
59
|
* Handle incoming IPC message
|
|
56
60
|
*/
|
|
57
|
-
handleMessage(message: IPCMessage, connection?:
|
|
58
|
-
|
|
59
|
-
|
|
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;
|
|
61
|
+
handleMessage(message: IPCMessage, connection?: {
|
|
62
|
+
id?: string;
|
|
63
|
+
}): Promise<IPCResponse>;
|
|
90
64
|
/**
|
|
91
65
|
* Clean up all managed listeners
|
|
92
66
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ipc-command-handler.d.ts","sourceRoot":"","sources":["../../../src/daemon/ipc-command-handler.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"ipc-command-handler.d.ts","sourceRoot":"","sources":["../../../src/daemon/ipc-command-handler.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAEtC,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAC;AACvE,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AACxD,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,EACL,WAAW,EACX,UAAU,EACV,WAAW,EASZ,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AA6BrE;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,eAAe,IAAI,YAAY,GAAG,SAAS,CAAC;IAC5C,iBAAiB,IAAI,cAAc,GAAG,SAAS,CAAC;IAChD,aAAa,IAAI,UAAU,GAAG,SAAS,CAAC;IAExC,qBAAqB,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC;IACtC,SAAS,IAAI,SAAS,EAAE,GAAG,SAAS,CAAC;IACrC,UAAU,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;IACzD,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,kBAAkB,EAAE,CAAC,OAAO,EAAE,WAAW,EAAE,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/D,mBAAmB,EAAE,CAAC,OAAO,EAAE,WAAW,EAAE,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IAChE,eAAe,EAAE,CAAC,OAAO,EAAE,WAAW,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IAC1E,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,EAAE,CAAC,MAAM,EAAE;QAC7C,SAAS,EAAE,MAAM,CAAC;QAClB,MAAM,EAAE,MAAM,CAAC;QACf,OAAO,CAAC,EAAE,UAAU,CAAC;QACrB,YAAY,CAAC,EAAE,MAAM,CAAC;KACvB,KAAK,IAAI,CAAC;IACX,CAAC,iBAAiB,CAAC,eAAe,CAAC,EAAE,CAAC,MAAM,EAAE;QAAE,SAAS,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;CAC9E;AAED;;GAEG;AACH,qBAAa,iBAAkB,SAAQ,YAAY;IAIrC,OAAO,CAAC,MAAM;IAF1B,OAAO,CAAC,QAAQ,CAAC,eAAe,CAA4B;gBAExC,MAAM,EAAE,eAAe;IAM3C;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAQxB;;OAEG;IACG,aAAa,CACjB,OAAO,EAAE,UAAU,EACnB,UAAU,CAAC,EAAE;QAAE,EAAE,CAAC,EAAE,MAAM,CAAA;KAAE,GAC3B,OAAO,CAAC,WAAW,CAAC;IA0FvB;;OAEG;IACU,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAWrC;;OAEG;IACI,gBAAgB,IAAI;QACzB,gBAAgB,EAAE,MAAM,CAAC;QACzB,YAAY,EAAE,MAAM,CAAC;KACtB;IAcD;;OAEG;IACH,EAAE,CAAC,CAAC,SAAS,MAAM,oBAAoB,EACrC,KAAK,EAAE,CAAC,EACR,QAAQ,EAAE,oBAAoB,CAAC,CAAC,CAAC,GAChC,IAAI;IAIP,IAAI,CAAC,CAAC,SAAS,MAAM,oBAAoB,EACvC,KAAK,EAAE,CAAC,EACR,GAAG,IAAI,EAAE,UAAU,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC,GAC3C,OAAO;CAGX"}
|
|
@@ -3,10 +3,15 @@
|
|
|
3
3
|
*
|
|
4
4
|
* ProcmanDaemonで受信したIPCコマンドを処理する責務を持つ。
|
|
5
5
|
* 各コマンドの実装を提供し、適切なレスポンスを生成する。
|
|
6
|
+
*
|
|
7
|
+
* Process-related handlers are in ./process-command-handlers.ts
|
|
8
|
+
* Log-related handlers are in ./log-command-handlers.ts
|
|
6
9
|
*/
|
|
7
10
|
import { EventEmitter } from 'events';
|
|
8
11
|
import { EventCleanupHelper } from '../utils/event-cleanup.js';
|
|
9
12
|
import { LOG_STREAM_EVENTS } from '../shared/constants-streaming.js';
|
|
13
|
+
import { handleLoadCommand, handleStartCommand, handleStopCommand, handleRestartCommand, handleListCommand, handleExitCommand, } from './process-command-handlers.js';
|
|
14
|
+
import { handleLogCommand, handleClearLogCommand, } from './log-command-handlers.js';
|
|
10
15
|
/**
|
|
11
16
|
* Command type constants
|
|
12
17
|
*/
|
|
@@ -20,12 +25,6 @@ const COMMAND_TYPES = {
|
|
|
20
25
|
CLEAR_LOG: 'clear-log',
|
|
21
26
|
EXIT: 'exit',
|
|
22
27
|
};
|
|
23
|
-
/**
|
|
24
|
-
* Timing constants
|
|
25
|
-
*/
|
|
26
|
-
const TIMING_CONSTANTS = {
|
|
27
|
-
EXIT_SHUTDOWN_DELAY_MS: 100,
|
|
28
|
-
};
|
|
29
28
|
/**
|
|
30
29
|
* IPC command handler implementation
|
|
31
30
|
*/
|
|
@@ -47,36 +46,34 @@ export class IPCCommandHandler extends EventEmitter {
|
|
|
47
46
|
/**
|
|
48
47
|
* Handle incoming IPC message
|
|
49
48
|
*/
|
|
50
|
-
async handleMessage(message,
|
|
51
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
52
|
-
connection) {
|
|
49
|
+
async handleMessage(message, connection) {
|
|
53
50
|
this.emit('command:received', message.type, message.id);
|
|
54
51
|
try {
|
|
55
52
|
let response;
|
|
56
53
|
switch (message.type) {
|
|
57
54
|
case COMMAND_TYPES.LOAD:
|
|
58
|
-
response = await this.
|
|
55
|
+
response = await handleLoadCommand(this.daemon, message);
|
|
59
56
|
break;
|
|
60
57
|
case COMMAND_TYPES.START:
|
|
61
|
-
response = await this.
|
|
58
|
+
response = await handleStartCommand(this.daemon, message);
|
|
62
59
|
break;
|
|
63
60
|
case COMMAND_TYPES.STOP:
|
|
64
|
-
response = await this.
|
|
61
|
+
response = await handleStopCommand(this.daemon, message);
|
|
65
62
|
break;
|
|
66
63
|
case COMMAND_TYPES.RESTART:
|
|
67
|
-
response = await this.
|
|
64
|
+
response = await handleRestartCommand(this.daemon, message);
|
|
68
65
|
break;
|
|
69
66
|
case COMMAND_TYPES.LIST:
|
|
70
|
-
response = await this.
|
|
67
|
+
response = await handleListCommand(this.daemon, message);
|
|
71
68
|
break;
|
|
72
69
|
case COMMAND_TYPES.LOG:
|
|
73
|
-
response = await this.
|
|
70
|
+
response = await handleLogCommand(this.daemon, this, message, connection);
|
|
74
71
|
break;
|
|
75
72
|
case COMMAND_TYPES.CLEAR_LOG:
|
|
76
|
-
response = await this.
|
|
73
|
+
response = await handleClearLogCommand(this.daemon, message);
|
|
77
74
|
break;
|
|
78
75
|
case COMMAND_TYPES.EXIT:
|
|
79
|
-
response = await this.
|
|
76
|
+
response = await handleExitCommand(this.daemon, message);
|
|
80
77
|
break;
|
|
81
78
|
default:
|
|
82
79
|
throw new Error(`Unknown command type: ${message.type}`);
|
|
@@ -100,351 +97,6 @@ export class IPCCommandHandler extends EventEmitter {
|
|
|
100
97
|
};
|
|
101
98
|
}
|
|
102
99
|
}
|
|
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
100
|
/**
|
|
449
101
|
* Clean up all managed listeners
|
|
450
102
|
*/
|