@start9labs/start-sdk 0.4.0-beta.4 → 0.4.0-beta.40
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/base/lib/Effects.d.ts +6 -34
- package/base/lib/actions/index.d.ts +13 -14
- package/base/lib/actions/index.js +4 -4
- package/base/lib/actions/index.js.map +1 -1
- package/base/lib/actions/input/builder/inputSpec.d.ts +16 -26
- package/base/lib/actions/input/builder/inputSpec.js +9 -24
- package/base/lib/actions/input/builder/inputSpec.js.map +1 -1
- package/base/lib/actions/input/builder/list.d.ts +13 -24
- package/base/lib/actions/input/builder/list.js +19 -30
- package/base/lib/actions/input/builder/list.js.map +1 -1
- package/base/lib/actions/input/builder/value.d.ts +394 -64
- package/base/lib/actions/input/builder/value.js +542 -213
- package/base/lib/actions/input/builder/value.js.map +1 -1
- package/base/lib/actions/input/builder/variants.d.ts +27 -24
- package/base/lib/actions/input/builder/variants.js +25 -24
- package/base/lib/actions/input/builder/variants.js.map +1 -1
- package/base/lib/actions/input/inputSpecConstants.d.ts +25 -17
- package/base/lib/actions/input/inputSpecConstants.js +16 -12
- package/base/lib/actions/input/inputSpecConstants.js.map +1 -1
- package/base/lib/actions/input/inputSpecTypes.d.ts +0 -3
- package/base/lib/actions/input/inputSpecTypes.js.map +1 -1
- package/base/lib/actions/setupActions.d.ts +21 -15
- package/base/lib/actions/setupActions.js +42 -7
- package/base/lib/actions/setupActions.js.map +1 -1
- package/base/lib/dependencies/dependencies.d.ts +7 -3
- package/base/lib/dependencies/dependencies.js +34 -25
- package/base/lib/dependencies/dependencies.js.map +1 -1
- package/base/lib/dependencies/setupDependencies.d.ts +2 -4
- package/base/lib/dependencies/setupDependencies.js +3 -10
- package/base/lib/dependencies/setupDependencies.js.map +1 -1
- package/base/lib/exver/index.js +1 -1
- package/base/lib/exver/index.js.map +1 -1
- package/base/lib/index.d.ts +1 -0
- package/base/lib/index.js +2 -1
- package/base/lib/index.js.map +1 -1
- package/base/lib/inits/index.d.ts +2 -0
- package/base/lib/inits/index.js +19 -0
- package/base/lib/inits/index.js.map +1 -0
- package/base/lib/inits/setupInit.d.ts +9 -0
- package/base/lib/inits/setupInit.js +40 -0
- package/base/lib/inits/setupInit.js.map +1 -0
- package/base/lib/inits/setupUninit.d.ts +25 -0
- package/base/lib/inits/setupUninit.js +24 -0
- package/base/lib/inits/setupUninit.js.map +1 -0
- package/base/lib/interfaces/Host.js +18 -6
- package/base/lib/interfaces/Host.js.map +1 -1
- package/base/lib/interfaces/Origin.d.ts +2 -2
- package/base/lib/interfaces/Origin.js +3 -3
- package/base/lib/interfaces/Origin.js.map +1 -1
- package/base/lib/interfaces/ServiceInterfaceBuilder.d.ts +2 -2
- package/base/lib/interfaces/setupInterfaces.d.ts +2 -4
- package/base/lib/interfaces/setupInterfaces.js +8 -17
- package/base/lib/interfaces/setupInterfaces.js.map +1 -1
- package/base/lib/osBindings/ActionInput.d.ts +2 -0
- package/base/lib/osBindings/ActionInput.js +0 -1
- package/base/lib/osBindings/ActionInput.js.map +1 -1
- package/base/lib/osBindings/AddCategoryParams.d.ts +0 -2
- package/base/lib/osBindings/AddPackageToCategoryParams.d.ts +5 -0
- package/base/lib/osBindings/AddPackageToCategoryParams.js +3 -0
- package/base/lib/osBindings/AddPackageToCategoryParams.js.map +1 -0
- package/base/lib/osBindings/AddProxyParams.d.ts +5 -0
- package/base/lib/osBindings/AddProxyParams.js +4 -0
- package/base/lib/osBindings/AddProxyParams.js.map +1 -0
- package/base/lib/osBindings/AddTunnelParams.d.ts +5 -0
- package/base/lib/osBindings/AddTunnelParams.js +4 -0
- package/base/lib/osBindings/AddTunnelParams.js.map +1 -0
- package/base/lib/osBindings/AttachParams.d.ts +1 -0
- package/base/lib/osBindings/BindingGatewaySetEnabledParams.d.ts +6 -0
- package/base/lib/osBindings/BindingGatewaySetEnabledParams.js +3 -0
- package/base/lib/osBindings/BindingGatewaySetEnabledParams.js.map +1 -0
- package/base/lib/osBindings/Category.d.ts +0 -2
- package/base/lib/osBindings/Category.js +1 -0
- package/base/lib/osBindings/Category.js.map +1 -1
- package/base/lib/osBindings/CheckDependenciesResult.d.ts +3 -3
- package/base/lib/osBindings/ClearTasksParams.d.ts +5 -0
- package/base/lib/osBindings/ClearTasksParams.js +4 -0
- package/base/lib/osBindings/ClearTasksParams.js.map +1 -0
- package/base/lib/osBindings/CreateTaskParams.d.ts +15 -0
- package/base/lib/osBindings/CreateTaskParams.js +3 -0
- package/base/lib/osBindings/CreateTaskParams.js.map +1 -0
- package/base/lib/osBindings/DepInfo.d.ts +2 -3
- package/base/lib/osBindings/DnsSettings.d.ts +4 -0
- package/base/lib/osBindings/DnsSettings.js +4 -0
- package/base/lib/osBindings/DnsSettings.js.map +1 -0
- package/base/lib/osBindings/DomainConfig.d.ts +1 -0
- package/base/lib/osBindings/DomainSettings.d.ts +4 -0
- package/base/lib/osBindings/DomainSettings.js +3 -0
- package/base/lib/osBindings/DomainSettings.js.map +1 -0
- package/base/lib/osBindings/Domains.d.ts +7 -0
- package/base/lib/osBindings/Domains.js +3 -0
- package/base/lib/osBindings/Domains.js.map +1 -0
- package/base/lib/osBindings/EventId.d.ts +4 -0
- package/base/lib/osBindings/EventId.js +3 -0
- package/base/lib/osBindings/EventId.js.map +1 -0
- package/base/lib/osBindings/FileType.d.ts +1 -0
- package/base/lib/osBindings/FileType.js +4 -0
- package/base/lib/osBindings/FileType.js.map +1 -0
- package/base/lib/osBindings/ForgetGatewayParams.d.ts +4 -0
- package/base/lib/osBindings/ForgetGatewayParams.js +3 -0
- package/base/lib/osBindings/ForgetGatewayParams.js.map +1 -0
- package/base/lib/osBindings/ForgetInterfaceParams.d.ts +2 -1
- package/base/lib/osBindings/ForgetInterfaceParams.js +0 -1
- package/base/lib/osBindings/ForgetInterfaceParams.js.map +1 -1
- package/base/lib/osBindings/GatewayId.d.ts +1 -0
- package/base/lib/osBindings/GatewayId.js +4 -0
- package/base/lib/osBindings/GatewayId.js.map +1 -0
- package/base/lib/osBindings/GatewayInfo.d.ts +6 -0
- package/base/lib/osBindings/GatewayInfo.js +3 -0
- package/base/lib/osBindings/GatewayInfo.js.map +1 -0
- package/base/lib/osBindings/GetOsVersionParams.d.ts +3 -3
- package/base/lib/osBindings/GetPackageParams.d.ts +1 -1
- package/base/lib/osBindings/Host.d.ts +4 -3
- package/base/lib/osBindings/HostnameInfo.d.ts +2 -1
- package/base/lib/osBindings/IpHostname.d.ts +1 -2
- package/base/lib/osBindings/IpInfo.d.ts +2 -0
- package/base/lib/osBindings/LoginParams.d.ts +1 -2
- package/base/lib/osBindings/LoginParams.js +1 -0
- package/base/lib/osBindings/LoginParams.js.map +1 -1
- package/base/lib/osBindings/MainStatus.d.ts +0 -2
- package/base/lib/osBindings/Manifest.d.ts +3 -1
- package/base/lib/osBindings/Metadata.d.ts +5 -0
- package/base/lib/osBindings/Metadata.js +3 -0
- package/base/lib/osBindings/Metadata.js.map +1 -0
- package/base/lib/osBindings/MetadataSrc.d.ts +7 -0
- package/base/lib/osBindings/MetadataSrc.js +3 -0
- package/base/lib/osBindings/MetadataSrc.js.map +1 -0
- package/base/lib/osBindings/MountTarget.d.ts +2 -0
- package/base/lib/osBindings/NetInfo.d.ts +3 -1
- package/base/lib/osBindings/NetInfo.js +0 -1
- package/base/lib/osBindings/NetInfo.js.map +1 -1
- package/base/lib/osBindings/NetworkInfo.d.ts +5 -2
- package/base/lib/osBindings/NetworkInterfaceInfo.d.ts +3 -2
- package/base/lib/osBindings/NetworkInterfaceSetPublicParams.d.ts +2 -1
- package/base/lib/osBindings/NetworkInterfaceSetPublicParams.js +0 -1
- package/base/lib/osBindings/NetworkInterfaceSetPublicParams.js.map +1 -1
- package/base/lib/osBindings/PackageDataEntry.d.ts +5 -5
- package/base/lib/osBindings/PackageVersionInfo.d.ts +2 -0
- package/base/lib/osBindings/Progress.d.ts +2 -0
- package/base/lib/osBindings/Progress.js +0 -1
- package/base/lib/osBindings/Progress.js.map +1 -1
- package/base/lib/osBindings/ProgressUnits.d.ts +1 -0
- package/base/lib/osBindings/ProgressUnits.js +4 -0
- package/base/lib/osBindings/ProgressUnits.js.map +1 -0
- package/base/lib/osBindings/Proxies.d.ts +4 -0
- package/base/lib/osBindings/Proxies.js +3 -0
- package/base/lib/osBindings/Proxies.js.map +1 -0
- package/base/lib/osBindings/ProxyInfo.d.ts +4 -0
- package/base/lib/osBindings/ProxyInfo.js +4 -0
- package/base/lib/osBindings/ProxyInfo.js.map +1 -0
- package/base/lib/osBindings/PublicDomainConfig.d.ts +6 -0
- package/base/lib/osBindings/PublicDomainConfig.js +3 -0
- package/base/lib/osBindings/PublicDomainConfig.js.map +1 -0
- package/base/lib/osBindings/RemoveAdminParams.d.ts +4 -0
- package/base/lib/osBindings/RemoveAdminParams.js +3 -0
- package/base/lib/osBindings/RemoveAdminParams.js.map +1 -0
- package/base/lib/osBindings/RemoveAssetParams.d.ts +4 -0
- package/base/lib/osBindings/RemoveAssetParams.js +4 -0
- package/base/lib/osBindings/RemoveAssetParams.js.map +1 -0
- package/base/lib/osBindings/RemovePackageFromCategoryParams.d.ts +5 -0
- package/base/lib/osBindings/RemovePackageFromCategoryParams.js +3 -0
- package/base/lib/osBindings/RemovePackageFromCategoryParams.js.map +1 -0
- package/base/lib/osBindings/RemovePackageParams.d.ts +6 -0
- package/base/lib/osBindings/RemovePackageParams.js +3 -0
- package/base/lib/osBindings/RemovePackageParams.js.map +1 -0
- package/base/lib/osBindings/RemoveProxyParams.d.ts +3 -0
- package/base/lib/osBindings/RemoveProxyParams.js +4 -0
- package/base/lib/osBindings/RemoveProxyParams.js.map +1 -0
- package/base/lib/osBindings/RemoveTunnelParams.d.ts +4 -0
- package/base/lib/osBindings/RemoveTunnelParams.js +3 -0
- package/base/lib/osBindings/RemoveTunnelParams.js.map +1 -0
- package/base/lib/osBindings/RenameGatewayParams.d.ts +5 -0
- package/base/lib/osBindings/RenameGatewayParams.js +3 -0
- package/base/lib/osBindings/RenameGatewayParams.js.map +1 -0
- package/base/lib/osBindings/RenameInterfaceParams.d.ts +5 -0
- package/base/lib/osBindings/RenameInterfaceParams.js +3 -0
- package/base/lib/osBindings/RenameInterfaceParams.js.map +1 -0
- package/base/lib/osBindings/ServerInfo.d.ts +2 -1
- package/base/lib/osBindings/Sessions.d.ts +2 -5
- package/base/lib/osBindings/Sessions.js +0 -1
- package/base/lib/osBindings/Sessions.js.map +1 -1
- package/base/lib/osBindings/SetupExecuteParams.d.ts +1 -0
- package/base/lib/osBindings/Task.d.ts +13 -0
- package/base/lib/osBindings/Task.js +3 -0
- package/base/lib/osBindings/Task.js.map +1 -0
- package/base/lib/osBindings/TaskCondition.d.ts +1 -0
- package/base/lib/osBindings/TaskCondition.js +4 -0
- package/base/lib/osBindings/TaskCondition.js.map +1 -0
- package/base/lib/osBindings/TaskEntry.d.ts +5 -0
- package/base/lib/osBindings/TaskEntry.js +3 -0
- package/base/lib/osBindings/TaskEntry.js.map +1 -0
- package/base/lib/osBindings/TaskInput.d.ts +4 -0
- package/base/lib/osBindings/TaskInput.js +4 -0
- package/base/lib/osBindings/TaskInput.js.map +1 -0
- package/base/lib/osBindings/TaskSeverity.d.ts +1 -0
- package/base/lib/osBindings/TaskSeverity.js +4 -0
- package/base/lib/osBindings/TaskSeverity.js.map +1 -0
- package/base/lib/osBindings/TaskTrigger.d.ts +5 -0
- package/base/lib/osBindings/TaskTrigger.js +3 -0
- package/base/lib/osBindings/TaskTrigger.js.map +1 -0
- package/base/lib/osBindings/UnsetInboundParams.d.ts +2 -1
- package/base/lib/osBindings/UnsetInboundParams.js +0 -1
- package/base/lib/osBindings/UnsetInboundParams.js.map +1 -1
- package/base/lib/osBindings/UnsetPublicParams.d.ts +2 -1
- package/base/lib/osBindings/UnsetPublicParams.js +0 -1
- package/base/lib/osBindings/UnsetPublicParams.js.map +1 -1
- package/base/lib/osBindings/UpdatingState.d.ts +1 -0
- package/base/lib/osBindings/index.d.ts +30 -18
- package/base/lib/s9pk/index.d.ts +2 -3
- package/base/lib/s9pk/index.js +9 -15
- package/base/lib/s9pk/index.js.map +1 -1
- package/base/lib/types/ManifestTypes.d.ts +4 -0
- package/base/lib/types.d.ts +23 -34
- package/base/lib/types.js +13 -0
- package/base/lib/types.js.map +1 -1
- package/base/lib/util/Drop.d.ts +47 -0
- package/base/lib/util/Drop.js +130 -0
- package/base/lib/util/Drop.js.map +1 -0
- package/base/lib/util/GetSystemSmtp.d.ts +11 -2
- package/base/lib/util/GetSystemSmtp.js +33 -7
- package/base/lib/util/GetSystemSmtp.js.map +1 -1
- package/base/lib/util/deepMerge.js +6 -1
- package/base/lib/util/deepMerge.js.map +1 -1
- package/base/lib/util/getServiceInterface.d.ts +53 -5
- package/base/lib/util/getServiceInterface.js +54 -19
- package/base/lib/util/getServiceInterface.js.map +1 -1
- package/base/lib/util/getServiceInterfaces.d.ts +11 -2
- package/base/lib/util/getServiceInterfaces.js +33 -7
- package/base/lib/util/getServiceInterfaces.js.map +1 -1
- package/base/lib/util/graph.d.ts +1 -0
- package/base/lib/util/graph.js +12 -0
- package/base/lib/util/graph.js.map +1 -1
- package/base/lib/util/index.d.ts +1 -2
- package/base/lib/util/index.js +5 -8
- package/base/lib/util/index.js.map +1 -1
- package/base/lib/util/ip.d.ts +19 -0
- package/base/lib/util/ip.js +92 -0
- package/base/lib/util/ip.js.map +1 -0
- package/package/lib/StartSdk.d.ts +116 -572
- package/package/lib/StartSdk.js +111 -435
- package/package/lib/StartSdk.js.map +1 -1
- package/package/lib/backup/Backups.d.ts +9 -3
- package/package/lib/backup/Backups.js +38 -28
- package/package/lib/backup/Backups.js.map +1 -1
- package/package/lib/backup/setupBackups.d.ts +5 -2
- package/package/lib/backup/setupBackups.js +7 -5
- package/package/lib/backup/setupBackups.js.map +1 -1
- package/package/lib/health/HealthCheck.d.ts +0 -1
- package/package/lib/health/HealthCheck.js +1 -7
- package/package/lib/health/HealthCheck.js.map +1 -1
- package/package/lib/health/checkFns/runHealthScript.js +1 -1
- package/package/lib/health/checkFns/runHealthScript.js.map +1 -1
- package/package/lib/index.d.ts +0 -3
- package/package/lib/index.js +1 -8
- package/package/lib/index.js.map +1 -1
- package/package/lib/inits/index.d.ts +2 -3
- package/package/lib/inits/index.js +16 -3
- package/package/lib/inits/index.js.map +1 -1
- package/package/lib/inits/setupInit.d.ts +7 -13
- package/package/lib/inits/setupInit.js +22 -48
- package/package/lib/inits/setupInit.js.map +1 -1
- package/package/lib/inits/setupInstall.d.ts +10 -10
- package/package/lib/inits/setupInstall.js.map +1 -1
- package/package/lib/inits/setupUninit.d.ts +7 -0
- package/package/lib/inits/setupUninit.js +14 -0
- package/package/lib/inits/setupUninit.js.map +1 -0
- package/package/lib/inits/setupUninstall.d.ts +5 -5
- package/package/lib/inits/setupUninstall.js.map +1 -1
- package/package/lib/mainFn/CommandController.d.ts +6 -22
- package/package/lib/mainFn/CommandController.js +68 -41
- package/package/lib/mainFn/CommandController.js.map +1 -1
- package/package/lib/mainFn/Daemon.d.ts +15 -20
- package/package/lib/mainFn/Daemon.js +71 -17
- package/package/lib/mainFn/Daemon.js.map +1 -1
- package/package/lib/mainFn/Daemons.d.ts +76 -44
- package/package/lib/mainFn/Daemons.js +105 -29
- package/package/lib/mainFn/Daemons.js.map +1 -1
- package/package/lib/mainFn/HealthDaemon.d.ts +6 -5
- package/package/lib/mainFn/HealthDaemon.js +79 -38
- package/package/lib/mainFn/HealthDaemon.js.map +1 -1
- package/package/lib/mainFn/Mounts.d.ts +32 -45
- package/package/lib/mainFn/Mounts.js +13 -55
- package/package/lib/mainFn/Mounts.js.map +1 -1
- package/package/lib/mainFn/Oneshot.d.ts +12 -0
- package/package/lib/mainFn/Oneshot.js +23 -0
- package/package/lib/mainFn/Oneshot.js.map +1 -0
- package/package/lib/mainFn/index.d.ts +1 -1
- package/package/lib/manifest/setupManifest.js +3 -0
- package/package/lib/manifest/setupManifest.js.map +1 -1
- package/package/lib/test/host.test.js +1 -1
- package/package/lib/test/host.test.js.map +1 -1
- package/package/lib/test/inputSpecBuilder.test.js +153 -158
- package/package/lib/test/inputSpecBuilder.test.js.map +1 -1
- package/package/lib/test/output.d.ts +8 -37
- package/package/lib/test/output.js +41 -40
- package/package/lib/test/output.js.map +1 -1
- package/package/lib/test/output.sdk.d.ts +154 -949
- package/package/lib/test/output.sdk.js +1 -4
- package/package/lib/test/output.sdk.js.map +1 -1
- package/package/lib/test/output.test.js +12 -8
- package/package/lib/test/output.test.js.map +1 -1
- package/package/lib/util/Drop.d.ts +4 -2
- package/package/lib/util/Drop.js +29 -7
- package/package/lib/util/Drop.js.map +1 -1
- package/package/lib/util/GetSslCertificate.d.ts +11 -2
- package/package/lib/util/GetSslCertificate.js +33 -7
- package/package/lib/util/GetSslCertificate.js.map +1 -1
- package/package/lib/util/SubContainer.d.ts +131 -37
- package/package/lib/util/SubContainer.js +155 -42
- package/package/lib/util/SubContainer.js.map +1 -1
- package/package/lib/util/fileHelper.d.ts +50 -17
- package/package/lib/util/fileHelper.js +166 -52
- package/package/lib/util/fileHelper.js.map +1 -1
- package/package/lib/util/index.d.ts +1 -2
- package/package/lib/util/index.js +2 -4
- package/package/lib/util/index.js.map +1 -1
- package/package/lib/version/VersionGraph.d.ts +27 -5
- package/package/lib/version/VersionGraph.js +110 -24
- package/package/lib/version/VersionGraph.js.map +1 -1
- package/package/lib/version/VersionInfo.d.ts +8 -3
- package/package/lib/version/VersionInfo.js.map +1 -1
- package/package/package.json +63 -0
- package/package/scripts/oldSpecToBuilder.js +5 -4
- package/package/scripts/oldSpecToBuilder.js.map +1 -1
- package/package.json +7 -8
|
@@ -1,15 +1,13 @@
|
|
|
1
1
|
import { HealthCheckResult } from "../health/checkFns";
|
|
2
2
|
import { Trigger } from "../trigger";
|
|
3
3
|
import * as T from "../../../base/lib/types";
|
|
4
|
-
import {
|
|
5
|
-
import { ExecSpawnable, SubContainer } from "../util/SubContainer";
|
|
4
|
+
import { SubContainer } from "../util/SubContainer";
|
|
6
5
|
import * as CP from "node:child_process";
|
|
7
6
|
export { Daemon } from "./Daemon";
|
|
8
7
|
export { CommandController } from "./CommandController";
|
|
9
8
|
import { HealthDaemon } from "./HealthDaemon";
|
|
10
9
|
import { Daemon } from "./Daemon";
|
|
11
10
|
import { CommandController } from "./CommandController";
|
|
12
|
-
import { HealthCheck } from "../health/HealthCheck";
|
|
13
11
|
export declare const cpExec: typeof CP.exec.__promisify__;
|
|
14
12
|
export declare const cpExecFile: typeof CP.execFile.__promisify__;
|
|
15
13
|
export type Ready = {
|
|
@@ -29,7 +27,7 @@ export type Ready = {
|
|
|
29
27
|
})
|
|
30
28
|
* ```
|
|
31
29
|
*/
|
|
32
|
-
fn: (
|
|
30
|
+
fn: () => Promise<HealthCheckResult> | HealthCheckResult;
|
|
33
31
|
/**
|
|
34
32
|
* A duration in milliseconds to treat a failing health check as "starting"
|
|
35
33
|
*
|
|
@@ -38,46 +36,50 @@ export type Ready = {
|
|
|
38
36
|
gracePeriod?: number;
|
|
39
37
|
trigger?: Trigger;
|
|
40
38
|
};
|
|
41
|
-
type
|
|
42
|
-
/** The command line command to start the daemon */
|
|
39
|
+
export type ExecCommandOptions = {
|
|
43
40
|
command: T.CommandType;
|
|
44
|
-
/** Information about the subcontainer in which the daemon runs */
|
|
45
|
-
subcontainer: {
|
|
46
|
-
/** The ID of the image. Must be one of the image IDs declared in the manifest */
|
|
47
|
-
imageId: keyof Manifest["images"] & T.ImageId;
|
|
48
|
-
/**
|
|
49
|
-
* Whether or not to share the `/run` directory with the parent container.
|
|
50
|
-
* This is useful if you are trying to connect to a service that exposes a unix domain socket or auth cookie via the `/run` directory
|
|
51
|
-
*/
|
|
52
|
-
sharedRun?: boolean;
|
|
53
|
-
} | SubContainer<Manifest>;
|
|
54
|
-
/** For mounting the necessary volumes. Syntax: sdk.Mounts.of().addVolume() */
|
|
55
|
-
mounts: Mounts<Manifest>;
|
|
56
|
-
env?: Record<string, string>;
|
|
57
|
-
ready: Ready;
|
|
58
|
-
/** An array of IDs of prior daemons whose successful initializations are required before this daemon will initialize */
|
|
59
|
-
requires: Exclude<Ids, Id>[];
|
|
60
|
-
sigtermTimeout?: number;
|
|
61
|
-
onStdout?: (chunk: Buffer | string | any) => void;
|
|
62
|
-
onStderr?: (chunk: Buffer | string | any) => void;
|
|
63
|
-
};
|
|
64
|
-
type ErrorDuplicateId<Id extends string> = `The id '${Id}' is already used`;
|
|
65
|
-
export declare const runCommand: <Manifest extends T.SDKManifest>() => (effects: T.Effects, subcontainer: {
|
|
66
|
-
imageId: keyof Manifest["images"] & string;
|
|
67
|
-
sharedRun?: boolean;
|
|
68
|
-
} | SubContainer<Manifest, T.Effects>, command: T.CommandType, options: {
|
|
69
|
-
subcontainerName?: string;
|
|
70
41
|
sigtermTimeout?: number;
|
|
71
|
-
mounts: Mounts<Manifest, never> | null;
|
|
72
42
|
runAsInit?: boolean;
|
|
73
43
|
env?: {
|
|
74
44
|
[variable: string]: string;
|
|
75
45
|
} | undefined;
|
|
76
46
|
cwd?: string | undefined;
|
|
77
47
|
user?: string | undefined;
|
|
78
|
-
onStdout?: (
|
|
79
|
-
onStderr?: (
|
|
80
|
-
}
|
|
48
|
+
onStdout?: (chunk: Buffer | string | any) => void;
|
|
49
|
+
onStderr?: (chunk: Buffer | string | any) => void;
|
|
50
|
+
};
|
|
51
|
+
export type ExecFnOptions<Manifest extends T.SDKManifest, C extends SubContainer<Manifest> | null> = {
|
|
52
|
+
fn: (subcontainer: C, abort: AbortSignal) => Promise<C extends null ? null : ExecCommandOptions | null>;
|
|
53
|
+
sigtermTimeout?: number;
|
|
54
|
+
};
|
|
55
|
+
export type DaemonCommandType<Manifest extends T.SDKManifest, C extends SubContainer<Manifest> | null> = ExecFnOptions<Manifest, C> | (C extends null ? never : ExecCommandOptions);
|
|
56
|
+
type NewDaemonParams<Manifest extends T.SDKManifest, C extends SubContainer<Manifest> | null> = {
|
|
57
|
+
/** What to run as the daemon: either an async fn or a commandline command to run in the subcontainer */
|
|
58
|
+
exec: DaemonCommandType<Manifest, C>;
|
|
59
|
+
/** The subcontainer in which the daemon runs */
|
|
60
|
+
subcontainer: C;
|
|
61
|
+
};
|
|
62
|
+
type OptionalParamSync<T> = T | (() => T | null);
|
|
63
|
+
type OptionalParamAsync<T> = () => Promise<T | null>;
|
|
64
|
+
type AddDaemonParams<Manifest extends T.SDKManifest, Ids extends string, Id extends string, C extends SubContainer<Manifest> | null> = (NewDaemonParams<Manifest, C> | {
|
|
65
|
+
daemon: Daemon<Manifest>;
|
|
66
|
+
}) & {
|
|
67
|
+
ready: Ready;
|
|
68
|
+
/** An array of IDs of prior daemons whose successful initializations are required before this daemon will initialize */
|
|
69
|
+
requires: Exclude<Ids, Id>[];
|
|
70
|
+
};
|
|
71
|
+
type AddOneshotParams<Manifest extends T.SDKManifest, Ids extends string, Id extends string, C extends SubContainer<Manifest> | null> = NewDaemonParams<Manifest, C> & {
|
|
72
|
+
exec: DaemonCommandType<Manifest, C>;
|
|
73
|
+
/** An array of IDs of prior daemons whose successful initializations are required before this daemon will initialize */
|
|
74
|
+
requires: Exclude<Ids, Id>[];
|
|
75
|
+
};
|
|
76
|
+
type AddHealthCheckParams<Ids extends string, Id extends string> = {
|
|
77
|
+
ready: Ready;
|
|
78
|
+
/** An array of IDs of prior daemons whose successful initializations are required before this daemon will initialize */
|
|
79
|
+
requires: Exclude<Ids, Id>[];
|
|
80
|
+
};
|
|
81
|
+
type ErrorDuplicateId<Id extends string> = `The id '${Id}' is already used`;
|
|
82
|
+
export declare const runCommand: <Manifest extends T.SDKManifest>() => (effects: T.Effects, subcontainer: SubContainer<Manifest, T.Effects>, exec: DaemonCommandType<Manifest, SubContainer<Manifest, T.Effects>>) => Promise<CommandController<Manifest, SubContainer<Manifest, T.Effects>>>;
|
|
81
83
|
/**
|
|
82
84
|
* A class for defining and controlling the service daemons
|
|
83
85
|
```ts
|
|
@@ -103,11 +105,10 @@ Daemons.of({
|
|
|
103
105
|
*/
|
|
104
106
|
export declare class Daemons<Manifest extends T.SDKManifest, Ids extends string> implements T.DaemonBuildable {
|
|
105
107
|
readonly effects: T.Effects;
|
|
106
|
-
readonly started: (onTerm: () => PromiseLike<void>) => PromiseLike<null
|
|
108
|
+
readonly started: ((onTerm: () => PromiseLike<void>) => PromiseLike<null>) | null;
|
|
107
109
|
readonly daemons: Promise<Daemon<Manifest>>[];
|
|
108
110
|
readonly ids: Ids[];
|
|
109
111
|
readonly healthDaemons: HealthDaemon<Manifest>[];
|
|
110
|
-
readonly healthChecks: HealthCheck[];
|
|
111
112
|
private constructor();
|
|
112
113
|
/**
|
|
113
114
|
* Returns an empty new Daemons class with the provided inputSpec.
|
|
@@ -116,21 +117,52 @@ export declare class Daemons<Manifest extends T.SDKManifest, Ids extends string>
|
|
|
116
117
|
*
|
|
117
118
|
* Daemons run in the order they are defined, with latter daemons being capable of
|
|
118
119
|
* depending on prior daemons
|
|
119
|
-
*
|
|
120
|
+
*
|
|
121
|
+
* @param effects
|
|
122
|
+
*
|
|
123
|
+
* @param started
|
|
120
124
|
* @returns
|
|
121
125
|
*/
|
|
122
126
|
static of<Manifest extends T.SDKManifest>(options: {
|
|
123
127
|
effects: T.Effects;
|
|
124
|
-
|
|
125
|
-
|
|
128
|
+
/**
|
|
129
|
+
* A closure to run once the system is launched. If you are in main, provide the `started` argument you receive from the function arguments
|
|
130
|
+
*/
|
|
131
|
+
started: ((onTerm: () => PromiseLike<void>) => PromiseLike<null>) | null;
|
|
126
132
|
}): Daemons<Manifest, never>;
|
|
133
|
+
private addDaemonImpl;
|
|
127
134
|
/**
|
|
128
135
|
* Returns the complete list of daemons, including the one defined here
|
|
129
136
|
* @param id
|
|
130
|
-
* @param
|
|
131
|
-
* @returns
|
|
137
|
+
* @param options
|
|
138
|
+
* @returns a new Daemons object
|
|
139
|
+
*/
|
|
140
|
+
addDaemon<Id extends string, C extends SubContainer<Manifest> | null>(id: "" extends Id ? never : ErrorDuplicateId<Id> extends Id ? never : Id extends Ids ? ErrorDuplicateId<Id> : Id, options: OptionalParamSync<AddDaemonParams<Manifest, Ids, Id, C>>): Daemons<Manifest, Ids | Id>;
|
|
141
|
+
addDaemon<Id extends string, C extends SubContainer<Manifest> | null>(id: "" extends Id ? never : ErrorDuplicateId<Id> extends Id ? never : Id extends Ids ? ErrorDuplicateId<Id> : Id, options: OptionalParamAsync<AddDaemonParams<Manifest, Ids, Id, C>>): Promise<Daemons<Manifest, Ids | Id>>;
|
|
142
|
+
/**
|
|
143
|
+
* Returns the complete list of daemons, including a "oneshot" daemon one defined here
|
|
144
|
+
* a oneshot daemon is a command that executes once when started, and is considered "running" once it exits successfully
|
|
145
|
+
* @param id
|
|
146
|
+
* @param options
|
|
147
|
+
* @returns a new Daemons object
|
|
148
|
+
*/
|
|
149
|
+
addOneshot<Id extends string, C extends SubContainer<Manifest> | null>(id: "" extends Id ? never : ErrorDuplicateId<Id> extends Id ? never : Id extends Ids ? ErrorDuplicateId<Id> : Id, options: OptionalParamSync<AddOneshotParams<Manifest, Ids, Id, C>>): Daemons<Manifest, Ids | Id>;
|
|
150
|
+
addOneshot<Id extends string, C extends SubContainer<Manifest> | null>(id: "" extends Id ? never : ErrorDuplicateId<Id> extends Id ? never : Id extends Ids ? ErrorDuplicateId<Id> : Id, options: OptionalParamAsync<AddOneshotParams<Manifest, Ids, Id, C>>): Promise<Daemons<Manifest, Ids | Id>>;
|
|
151
|
+
/**
|
|
152
|
+
* Returns the complete list of daemons, including a new HealthCheck defined here
|
|
153
|
+
* @param id
|
|
154
|
+
* @param options
|
|
155
|
+
* @returns a new Daemons object
|
|
156
|
+
*/
|
|
157
|
+
addHealthCheck<Id extends string>(id: "" extends Id ? never : ErrorDuplicateId<Id> extends Id ? never : Id extends Ids ? ErrorDuplicateId<Id> : Id, options: OptionalParamSync<AddHealthCheckParams<Ids, Id>>): Daemons<Manifest, Ids | Id>;
|
|
158
|
+
addHealthCheck<Id extends string>(id: "" extends Id ? never : ErrorDuplicateId<Id> extends Id ? never : Id extends Ids ? ErrorDuplicateId<Id> : Id, options: OptionalParamAsync<AddHealthCheckParams<Ids, Id>>): Promise<Daemons<Manifest, Ids | Id>>;
|
|
159
|
+
/**
|
|
160
|
+
* Runs the entire system until all daemons have returned `ready`.
|
|
161
|
+
* @param id
|
|
162
|
+
* @param options
|
|
163
|
+
* @returns a new Daemons object
|
|
132
164
|
*/
|
|
133
|
-
|
|
165
|
+
runUntilSuccess(timeout: number | null): Promise<null>;
|
|
134
166
|
term(): Promise<void>;
|
|
135
167
|
build(): Promise<this>;
|
|
136
168
|
}
|
|
@@ -43,6 +43,8 @@ Object.defineProperty(exports, "CommandController", { enumerable: true, get: fun
|
|
|
43
43
|
const HealthDaemon_1 = require("./HealthDaemon");
|
|
44
44
|
const Daemon_2 = require("./Daemon");
|
|
45
45
|
const CommandController_2 = require("./CommandController");
|
|
46
|
+
const Oneshot_1 = require("./Oneshot");
|
|
47
|
+
const util_1 = require("../util");
|
|
46
48
|
exports.cpExec = (0, node_util_1.promisify)(CP.exec);
|
|
47
49
|
exports.cpExecFile = (0, node_util_1.promisify)(CP.execFile);
|
|
48
50
|
const runCommand = () => CommandController_2.CommandController.of();
|
|
@@ -71,13 +73,12 @@ Daemons.of({
|
|
|
71
73
|
```
|
|
72
74
|
*/
|
|
73
75
|
class Daemons {
|
|
74
|
-
constructor(effects, started, daemons, ids, healthDaemons
|
|
76
|
+
constructor(effects, started, daemons, ids, healthDaemons) {
|
|
75
77
|
this.effects = effects;
|
|
76
78
|
this.started = started;
|
|
77
79
|
this.daemons = daemons;
|
|
78
80
|
this.ids = ids;
|
|
79
81
|
this.healthDaemons = healthDaemons;
|
|
80
|
-
this.healthChecks = healthChecks;
|
|
81
82
|
}
|
|
82
83
|
/**
|
|
83
84
|
* Returns an empty new Daemons class with the provided inputSpec.
|
|
@@ -86,39 +87,114 @@ class Daemons {
|
|
|
86
87
|
*
|
|
87
88
|
* Daemons run in the order they are defined, with latter daemons being capable of
|
|
88
89
|
* depending on prior daemons
|
|
89
|
-
*
|
|
90
|
+
*
|
|
91
|
+
* @param effects
|
|
92
|
+
*
|
|
93
|
+
* @param started
|
|
90
94
|
* @returns
|
|
91
95
|
*/
|
|
92
96
|
static of(options) {
|
|
93
|
-
return new Daemons(options.effects, options.started, [], [], []
|
|
97
|
+
return new Daemons(options.effects, options.started, [], [], []);
|
|
94
98
|
}
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
* @param id
|
|
98
|
-
* @param newDaemon
|
|
99
|
-
* @returns
|
|
100
|
-
*/
|
|
101
|
-
addDaemon(
|
|
102
|
-
// prettier-ignore
|
|
103
|
-
id, options) {
|
|
104
|
-
const daemonIndex = this.daemons.length;
|
|
105
|
-
const daemon = Daemon_2.Daemon.of()(this.effects, options.subcontainer, options.command, {
|
|
106
|
-
...options,
|
|
107
|
-
subcontainerName: id,
|
|
108
|
-
});
|
|
109
|
-
const healthDaemon = new HealthDaemon_1.HealthDaemon(daemon, daemonIndex, options.requires
|
|
99
|
+
addDaemonImpl(id, daemon, requires, ready) {
|
|
100
|
+
const healthDaemon = new HealthDaemon_1.HealthDaemon(daemon, requires
|
|
110
101
|
.map((x) => this.ids.indexOf(x))
|
|
111
102
|
.filter((x) => x >= 0)
|
|
112
|
-
.map((id) => this.healthDaemons[id]), id,
|
|
113
|
-
const daemons = this.daemons.
|
|
103
|
+
.map((id) => this.healthDaemons[id]), id, ready, this.effects);
|
|
104
|
+
const daemons = daemon ? [...this.daemons, daemon] : [...this.daemons];
|
|
114
105
|
const ids = [...this.ids, id];
|
|
115
106
|
const healthDaemons = [...this.healthDaemons, healthDaemon];
|
|
116
|
-
return new Daemons(this.effects, this.started, daemons, ids, healthDaemons
|
|
107
|
+
return new Daemons(this.effects, this.started, daemons, ids, healthDaemons);
|
|
108
|
+
}
|
|
109
|
+
addDaemon(id, options) {
|
|
110
|
+
const prev = this;
|
|
111
|
+
const res = (options) => {
|
|
112
|
+
if (!options)
|
|
113
|
+
return prev;
|
|
114
|
+
const daemon = "daemon" in options
|
|
115
|
+
? Promise.resolve(options.daemon)
|
|
116
|
+
: Daemon_2.Daemon.of()(this.effects, options.subcontainer, options.exec);
|
|
117
|
+
return prev.addDaemonImpl(id, daemon, options.requires, options.ready);
|
|
118
|
+
};
|
|
119
|
+
if (options instanceof Function) {
|
|
120
|
+
const opts = options();
|
|
121
|
+
if (opts instanceof Promise) {
|
|
122
|
+
return opts.then(res);
|
|
123
|
+
}
|
|
124
|
+
return res(opts);
|
|
125
|
+
}
|
|
126
|
+
return res(options);
|
|
127
|
+
}
|
|
128
|
+
addOneshot(id, options) {
|
|
129
|
+
const prev = this;
|
|
130
|
+
const res = (options) => {
|
|
131
|
+
if (!options)
|
|
132
|
+
return prev;
|
|
133
|
+
const daemon = Oneshot_1.Oneshot.of()(this.effects, options.subcontainer, options.exec);
|
|
134
|
+
return prev.addDaemonImpl(id, daemon, options.requires, HealthDaemon_1.EXIT_SUCCESS);
|
|
135
|
+
};
|
|
136
|
+
if (options instanceof Function) {
|
|
137
|
+
const opts = options();
|
|
138
|
+
if (opts instanceof Promise) {
|
|
139
|
+
return opts.then(res);
|
|
140
|
+
}
|
|
141
|
+
return res(opts);
|
|
142
|
+
}
|
|
143
|
+
return res(options);
|
|
144
|
+
}
|
|
145
|
+
addHealthCheck(id, options) {
|
|
146
|
+
const prev = this;
|
|
147
|
+
const res = (options) => {
|
|
148
|
+
if (!options)
|
|
149
|
+
return prev;
|
|
150
|
+
return prev.addDaemonImpl(id, null, options.requires, HealthDaemon_1.EXIT_SUCCESS);
|
|
151
|
+
};
|
|
152
|
+
if (options instanceof Function) {
|
|
153
|
+
const opts = options();
|
|
154
|
+
if (opts instanceof Promise) {
|
|
155
|
+
return opts.then(res);
|
|
156
|
+
}
|
|
157
|
+
return res(opts);
|
|
158
|
+
}
|
|
159
|
+
return res(options);
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Runs the entire system until all daemons have returned `ready`.
|
|
163
|
+
* @param id
|
|
164
|
+
* @param options
|
|
165
|
+
* @returns a new Daemons object
|
|
166
|
+
*/
|
|
167
|
+
async runUntilSuccess(timeout) {
|
|
168
|
+
let resolve = (_) => { };
|
|
169
|
+
const res = new Promise((res, rej) => {
|
|
170
|
+
resolve = res;
|
|
171
|
+
if (timeout)
|
|
172
|
+
setTimeout(() => {
|
|
173
|
+
const notReady = this.healthDaemons
|
|
174
|
+
.filter((d) => !d.isReady)
|
|
175
|
+
.map((d) => d.id);
|
|
176
|
+
rej(new Error(`Timed out waiting for ${notReady}`));
|
|
177
|
+
}, timeout);
|
|
178
|
+
});
|
|
179
|
+
const daemon = Oneshot_1.Oneshot.of()(this.effects, null, {
|
|
180
|
+
fn: async () => {
|
|
181
|
+
resolve();
|
|
182
|
+
return null;
|
|
183
|
+
},
|
|
184
|
+
});
|
|
185
|
+
const healthDaemon = new HealthDaemon_1.HealthDaemon(daemon, [...this.healthDaemons], "__RUN_UNTIL_SUCCESS", "EXIT_SUCCESS", this.effects);
|
|
186
|
+
const daemons = await new Daemons(this.effects, this.started, [...this.daemons, daemon], this.ids, [...this.healthDaemons, healthDaemon]).build();
|
|
187
|
+
try {
|
|
188
|
+
await res;
|
|
189
|
+
}
|
|
190
|
+
finally {
|
|
191
|
+
await daemons.term();
|
|
192
|
+
}
|
|
193
|
+
return null;
|
|
117
194
|
}
|
|
118
195
|
async term() {
|
|
119
196
|
try {
|
|
120
|
-
this.
|
|
121
|
-
for (let result of await Promise.allSettled(this.healthDaemons.map((x) => x.term({ timeout: x.sigtermTimeout })))) {
|
|
197
|
+
for (let result of await Promise.allSettled(this.healthDaemons.map((x) => x.term()))) {
|
|
122
198
|
if (result.status === "rejected") {
|
|
123
199
|
console.error(result.reason);
|
|
124
200
|
}
|
|
@@ -129,13 +205,13 @@ class Daemons {
|
|
|
129
205
|
}
|
|
130
206
|
}
|
|
131
207
|
async build() {
|
|
208
|
+
this.effects.onLeaveContext(() => {
|
|
209
|
+
this.term().catch((e) => console.error((0, util_1.asError)(e)));
|
|
210
|
+
});
|
|
132
211
|
for (const daemon of this.healthDaemons) {
|
|
133
|
-
await daemon.
|
|
134
|
-
}
|
|
135
|
-
for (const health of this.healthChecks) {
|
|
136
|
-
health.start();
|
|
212
|
+
await daemon.init();
|
|
137
213
|
}
|
|
138
|
-
this.started(() => this.term());
|
|
214
|
+
this.started?.(() => this.term());
|
|
139
215
|
return this;
|
|
140
216
|
}
|
|
141
217
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Daemons.js","sourceRoot":"","sources":["../../../../package/lib/mainFn/Daemons.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"Daemons.js","sourceRoot":"","sources":["../../../../package/lib/mainFn/Daemons.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,6 +2,7 @@ import { HealthCheckResult } from "../health/checkFns";
|
|
|
2
2
|
import { Ready } from "./Daemons";
|
|
3
3
|
import { Daemon } from "./Daemon";
|
|
4
4
|
import { Effects, SDKManifest } from "../../../base/lib/types";
|
|
5
|
+
export declare const EXIT_SUCCESS: "EXIT_SUCCESS";
|
|
5
6
|
/**
|
|
6
7
|
* Wanted a structure that deals with controlling daemons by their health status
|
|
7
8
|
* States:
|
|
@@ -11,20 +12,18 @@ import { Effects, SDKManifest } from "../../../base/lib/types";
|
|
|
11
12
|
*/
|
|
12
13
|
export declare class HealthDaemon<Manifest extends SDKManifest> {
|
|
13
14
|
private readonly daemon;
|
|
14
|
-
readonly daemonIndex: number;
|
|
15
15
|
private readonly dependencies;
|
|
16
16
|
readonly id: string;
|
|
17
|
-
readonly
|
|
18
|
-
readonly ready: Ready;
|
|
17
|
+
readonly ready: Ready | typeof EXIT_SUCCESS;
|
|
19
18
|
readonly effects: Effects;
|
|
20
|
-
readonly sigtermTimeout: number;
|
|
21
19
|
private _health;
|
|
22
20
|
private healthWatchers;
|
|
23
21
|
private running;
|
|
24
22
|
private started?;
|
|
25
23
|
private resolveReady;
|
|
24
|
+
private resolvedReady;
|
|
26
25
|
private readyPromise;
|
|
27
|
-
constructor(daemon: Promise<Daemon<Manifest
|
|
26
|
+
constructor(daemon: Promise<Daemon<Manifest>> | null, dependencies: HealthDaemon<Manifest>[], id: string, ready: Ready | typeof EXIT_SUCCESS, effects: Effects);
|
|
28
27
|
/** Run after we want to do cleanup */
|
|
29
28
|
term(termOptions?: {
|
|
30
29
|
signal?: NodeJS.Signals | undefined;
|
|
@@ -38,6 +37,8 @@ export declare class HealthDaemon<Manifest extends SDKManifest> {
|
|
|
38
37
|
private turnOffHealthCheck;
|
|
39
38
|
private setupHealthCheck;
|
|
40
39
|
onReady(): Promise<void>;
|
|
40
|
+
get isReady(): boolean;
|
|
41
41
|
private setHealth;
|
|
42
42
|
updateStatus(): Promise<void>;
|
|
43
|
+
init(): Promise<void>;
|
|
43
44
|
}
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.HealthDaemon = void 0;
|
|
3
|
+
exports.HealthDaemon = exports.EXIT_SUCCESS = void 0;
|
|
4
4
|
const defaultTrigger_1 = require("../trigger/defaultTrigger");
|
|
5
|
-
const _1 = require(".");
|
|
6
5
|
const asError_1 = require("../../../base/lib/util/asError");
|
|
7
6
|
const oncePromise = () => {
|
|
8
7
|
let resolve;
|
|
@@ -11,6 +10,7 @@ const oncePromise = () => {
|
|
|
11
10
|
});
|
|
12
11
|
return { resolve: resolve, promise };
|
|
13
12
|
};
|
|
13
|
+
exports.EXIT_SUCCESS = "EXIT_SUCCESS";
|
|
14
14
|
/**
|
|
15
15
|
* Wanted a structure that deals with controlling daemons by their health status
|
|
16
16
|
* States:
|
|
@@ -19,20 +19,21 @@ const oncePromise = () => {
|
|
|
19
19
|
*
|
|
20
20
|
*/
|
|
21
21
|
class HealthDaemon {
|
|
22
|
-
constructor(daemon,
|
|
22
|
+
constructor(daemon, dependencies, id, ready, effects) {
|
|
23
23
|
this.daemon = daemon;
|
|
24
|
-
this.daemonIndex = daemonIndex;
|
|
25
24
|
this.dependencies = dependencies;
|
|
26
25
|
this.id = id;
|
|
27
|
-
this.ids = ids;
|
|
28
26
|
this.ready = ready;
|
|
29
27
|
this.effects = effects;
|
|
30
|
-
this.sigtermTimeout = sigtermTimeout;
|
|
31
28
|
this._health = { result: "starting", message: null };
|
|
32
29
|
this.healthWatchers = [];
|
|
33
30
|
this.running = false;
|
|
31
|
+
this.resolvedReady = false;
|
|
34
32
|
this.healthCheckCleanup = null;
|
|
35
|
-
this.readyPromise = new Promise((resolve) => (this.resolveReady =
|
|
33
|
+
this.readyPromise = new Promise((resolve) => (this.resolveReady = () => {
|
|
34
|
+
resolve();
|
|
35
|
+
this.resolvedReady = true;
|
|
36
|
+
}));
|
|
36
37
|
this.dependencies.forEach((d) => d.addWatcher(() => this.updateStatus()));
|
|
37
38
|
}
|
|
38
39
|
/** Run after we want to do cleanup */
|
|
@@ -40,8 +41,7 @@ class HealthDaemon {
|
|
|
40
41
|
this.healthWatchers = [];
|
|
41
42
|
this.running = false;
|
|
42
43
|
this.healthCheckCleanup?.();
|
|
43
|
-
await this.daemon
|
|
44
|
-
timeout: this.sigtermTimeout,
|
|
44
|
+
await this.daemon?.then((d) => d.term({
|
|
45
45
|
...termOptions,
|
|
46
46
|
}));
|
|
47
47
|
}
|
|
@@ -57,22 +57,47 @@ class HealthDaemon {
|
|
|
57
57
|
return;
|
|
58
58
|
this.running = newStatus;
|
|
59
59
|
if (newStatus) {
|
|
60
|
-
;
|
|
61
|
-
(await this.daemon).start();
|
|
62
|
-
this.started = performance.now();
|
|
60
|
+
console.debug(`Launching ${this.id}...`);
|
|
63
61
|
this.setupHealthCheck();
|
|
62
|
+
(await this.daemon)?.start();
|
|
63
|
+
this.started = performance.now();
|
|
64
64
|
}
|
|
65
65
|
else {
|
|
66
|
-
;
|
|
67
|
-
(await this.daemon)
|
|
66
|
+
console.debug(`Stopping ${this.id}...`);
|
|
67
|
+
(await this.daemon)?.stop();
|
|
68
68
|
this.turnOffHealthCheck();
|
|
69
69
|
this.setHealth({ result: "starting", message: null });
|
|
70
70
|
}
|
|
71
71
|
}
|
|
72
72
|
turnOffHealthCheck() {
|
|
73
73
|
this.healthCheckCleanup?.();
|
|
74
|
+
this.resolvedReady = false;
|
|
75
|
+
this.readyPromise = new Promise((resolve) => (this.resolveReady = () => {
|
|
76
|
+
resolve();
|
|
77
|
+
this.resolvedReady = true;
|
|
78
|
+
}));
|
|
74
79
|
}
|
|
75
80
|
async setupHealthCheck() {
|
|
81
|
+
const daemon = await this.daemon;
|
|
82
|
+
daemon?.onExit((success) => {
|
|
83
|
+
if (success && this.ready === "EXIT_SUCCESS") {
|
|
84
|
+
this.setHealth({ result: "success", message: null });
|
|
85
|
+
}
|
|
86
|
+
else if (!success) {
|
|
87
|
+
this.setHealth({
|
|
88
|
+
result: "failure",
|
|
89
|
+
message: `${this.id} daemon crashed`,
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
else if (!daemon.isOneshot()) {
|
|
93
|
+
this.setHealth({
|
|
94
|
+
result: "failure",
|
|
95
|
+
message: `${this.id} daemon exited`,
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
});
|
|
99
|
+
if (this.ready === "EXIT_SUCCESS")
|
|
100
|
+
return;
|
|
76
101
|
if (this.healthCheckCleanup)
|
|
77
102
|
return;
|
|
78
103
|
const trigger = (this.ready.trigger ?? defaultTrigger_1.defaultTrigger)(() => ({
|
|
@@ -80,28 +105,17 @@ class HealthDaemon {
|
|
|
80
105
|
}));
|
|
81
106
|
const { promise: status, resolve: setStatus } = oncePromise();
|
|
82
107
|
new Promise(async () => {
|
|
108
|
+
if (this.ready === "EXIT_SUCCESS")
|
|
109
|
+
return;
|
|
83
110
|
for (let res = await Promise.race([status, trigger.next()]); !res.done; res = await Promise.race([status, trigger.next()])) {
|
|
84
|
-
const
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
console.error((0, asError_1.asError)(err));
|
|
88
|
-
return {
|
|
89
|
-
result: "failure",
|
|
90
|
-
message: "message" in err ? err.message : String(err),
|
|
91
|
-
};
|
|
92
|
-
});
|
|
93
|
-
if (this.resolveReady &&
|
|
94
|
-
(response.result === "success" || response.result === "disabled")) {
|
|
95
|
-
this.resolveReady();
|
|
96
|
-
}
|
|
97
|
-
await this.setHealth(response);
|
|
98
|
-
}
|
|
99
|
-
else {
|
|
100
|
-
await this.setHealth({
|
|
111
|
+
const response = await Promise.resolve(this.ready.fn()).catch((err) => {
|
|
112
|
+
console.error((0, asError_1.asError)(err));
|
|
113
|
+
return {
|
|
101
114
|
result: "failure",
|
|
102
|
-
message: "
|
|
103
|
-
}
|
|
104
|
-
}
|
|
115
|
+
message: "message" in err ? err.message : String(err),
|
|
116
|
+
};
|
|
117
|
+
});
|
|
118
|
+
await this.setHealth(response);
|
|
105
119
|
}
|
|
106
120
|
}).catch((err) => console.error(`Daemon ${this.id} failed: ${err}`));
|
|
107
121
|
this.healthCheckCleanup = () => {
|
|
@@ -113,9 +127,19 @@ class HealthDaemon {
|
|
|
113
127
|
onReady() {
|
|
114
128
|
return this.readyPromise;
|
|
115
129
|
}
|
|
130
|
+
get isReady() {
|
|
131
|
+
return this.resolvedReady;
|
|
132
|
+
}
|
|
116
133
|
async setHealth(health) {
|
|
134
|
+
const changed = this._health.result !== health.result;
|
|
117
135
|
this._health = health;
|
|
118
|
-
this.
|
|
136
|
+
if (this.resolveReady && health.result === "success") {
|
|
137
|
+
this.resolveReady();
|
|
138
|
+
}
|
|
139
|
+
if (changed)
|
|
140
|
+
this.healthWatchers.forEach((watcher) => watcher());
|
|
141
|
+
if (this.ready === "EXIT_SUCCESS")
|
|
142
|
+
return;
|
|
119
143
|
const display = this.ready.display;
|
|
120
144
|
if (!display) {
|
|
121
145
|
return;
|
|
@@ -123,7 +147,7 @@ class HealthDaemon {
|
|
|
123
147
|
let result = health.result;
|
|
124
148
|
if (result === "failure" &&
|
|
125
149
|
this.started &&
|
|
126
|
-
performance.now() - this.started <= (this.ready.gracePeriod ??
|
|
150
|
+
performance.now() - this.started <= (this.ready.gracePeriod ?? 10_000))
|
|
127
151
|
result = "starting";
|
|
128
152
|
await this.effects.setHealth({
|
|
129
153
|
...health,
|
|
@@ -133,8 +157,25 @@ class HealthDaemon {
|
|
|
133
157
|
});
|
|
134
158
|
}
|
|
135
159
|
async updateStatus() {
|
|
136
|
-
const healths = this.dependencies.map((d) =>
|
|
137
|
-
|
|
160
|
+
const healths = this.dependencies.map((d) => ({
|
|
161
|
+
health: d.running && d._health,
|
|
162
|
+
id: d.id,
|
|
163
|
+
}));
|
|
164
|
+
const waitingOn = healths.filter((h) => !h.health || h.health.result !== "success");
|
|
165
|
+
if (waitingOn.length)
|
|
166
|
+
console.debug(`daemon ${this.id} waiting on ${waitingOn.map((w) => w.id)}`);
|
|
167
|
+
this.changeRunning(!waitingOn.length);
|
|
168
|
+
}
|
|
169
|
+
async init() {
|
|
170
|
+
if (this.ready !== "EXIT_SUCCESS" && this.ready.display) {
|
|
171
|
+
this.effects.setHealth({
|
|
172
|
+
id: this.id,
|
|
173
|
+
message: null,
|
|
174
|
+
name: this.ready.display,
|
|
175
|
+
result: "starting",
|
|
176
|
+
});
|
|
177
|
+
}
|
|
178
|
+
await this.updateStatus();
|
|
138
179
|
}
|
|
139
180
|
}
|
|
140
181
|
exports.HealthDaemon = HealthDaemon;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HealthDaemon.js","sourceRoot":"","sources":["../../../../package/lib/mainFn/HealthDaemon.ts"],"names":[],"mappings":";;;AACA,8DAA0D;
|
|
1
|
+
{"version":3,"file":"HealthDaemon.js","sourceRoot":"","sources":["../../../../package/lib/mainFn/HealthDaemon.ts"],"names":[],"mappings":"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"}
|