@nosana/node 1.0.0-rc
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/README.md +92 -0
- package/dist/.env +7 -0
- package/dist/.env.dev +5 -0
- package/dist/.env.prd +4 -0
- package/dist/NodeManager/client/index.d.ts +4 -0
- package/dist/NodeManager/client/index.js +14 -0
- package/dist/NodeManager/configs/NodeConfigs.d.ts +14 -0
- package/dist/NodeManager/configs/NodeConfigs.js +32 -0
- package/dist/NodeManager/configs/__tests__/NodeConfigs.spec.d.ts +1 -0
- package/dist/NodeManager/configs/__tests__/NodeConfigs.spec.js +161 -0
- package/dist/NodeManager/configs/configs.d.ts +21 -0
- package/dist/NodeManager/configs/configs.js +23 -0
- package/dist/NodeManager/db/__tests__/index.spec.d.ts +1 -0
- package/dist/NodeManager/db/__tests__/index.spec.js +65 -0
- package/dist/NodeManager/db/index.d.ts +50 -0
- package/dist/NodeManager/db/index.js +64 -0
- package/dist/NodeManager/errors/NodeAlreadyActiveError.d.ts +3 -0
- package/dist/NodeManager/errors/NodeAlreadyActiveError.js +6 -0
- package/dist/NodeManager/index.d.ts +24 -0
- package/dist/NodeManager/index.js +317 -0
- package/dist/NodeManager/jobs/index.d.ts +6 -0
- package/dist/NodeManager/jobs/index.js +45 -0
- package/dist/NodeManager/monitoring/LogMonitoringRegistry.d.ts +9 -0
- package/dist/NodeManager/monitoring/LogMonitoringRegistry.js +23 -0
- package/dist/NodeManager/monitoring/log/NodeLog.d.ts +56 -0
- package/dist/NodeManager/monitoring/log/NodeLog.js +1357 -0
- package/dist/NodeManager/monitoring/log/console/ConsoleLogger.d.ts +20 -0
- package/dist/NodeManager/monitoring/log/console/ConsoleLogger.js +290 -0
- package/dist/NodeManager/monitoring/ping/PingHandler.d.ts +13 -0
- package/dist/NodeManager/monitoring/ping/PingHandler.js +68 -0
- package/dist/NodeManager/monitoring/proxy/loggingProxy.d.ts +15 -0
- package/dist/NodeManager/monitoring/proxy/loggingProxy.js +145 -0
- package/dist/NodeManager/monitoring/state/NodeState.d.ts +29 -0
- package/dist/NodeManager/monitoring/state/NodeState.js +680 -0
- package/dist/NodeManager/monitoring/state/classifyState.d.ts +14 -0
- package/dist/NodeManager/monitoring/state/classifyState.js +57 -0
- package/dist/NodeManager/monitoring/streaming/LogStreamer.d.ts +14 -0
- package/dist/NodeManager/monitoring/streaming/LogStreamer.js +58 -0
- package/dist/NodeManager/monitoring/streaming/StateStreamer.d.ts +15 -0
- package/dist/NodeManager/monitoring/streaming/StateStreamer.js +59 -0
- package/dist/NodeManager/node/Node.d.ts +44 -0
- package/dist/NodeManager/node/Node.js +321 -0
- package/dist/NodeManager/node/abort/NodeAbortController.d.ts +6 -0
- package/dist/NodeManager/node/abort/NodeAbortController.js +12 -0
- package/dist/NodeManager/node/abort/abortControllerSelector.d.ts +3 -0
- package/dist/NodeManager/node/abort/abortControllerSelector.js +13 -0
- package/dist/NodeManager/node/api/ApiEventEmitter.d.ts +8 -0
- package/dist/NodeManager/node/api/ApiEventEmitter.js +13 -0
- package/dist/NodeManager/node/api/ApiHandler.d.ts +28 -0
- package/dist/NodeManager/node/api/ApiHandler.js +193 -0
- package/dist/NodeManager/node/api/eventsource/index.d.ts +6 -0
- package/dist/NodeManager/node/api/eventsource/index.js +35 -0
- package/dist/NodeManager/node/api/middlewares/index.d.ts +5 -0
- package/dist/NodeManager/node/api/middlewares/index.js +7 -0
- package/dist/NodeManager/node/api/middlewares/rest/verifyBackendSignatureMiddleware.d.ts +3 -0
- package/dist/NodeManager/node/api/middlewares/rest/verifyBackendSignatureMiddleware.js +20 -0
- package/dist/NodeManager/node/api/middlewares/rest/verifyJobOwnerSignatureMiddleware.d.ts +5 -0
- package/dist/NodeManager/node/api/middlewares/rest/verifyJobOwnerSignatureMiddleware.js +28 -0
- package/dist/NodeManager/node/api/middlewares/ws/verifyWSJobOwnerSignatureMiddleware.d.ts +6 -0
- package/dist/NodeManager/node/api/middlewares/ws/verifyWSJobOwnerSignatureMiddleware.js +30 -0
- package/dist/NodeManager/node/api/middlewares/ws/verifyWSMiddleware.d.ts +6 -0
- package/dist/NodeManager/node/api/middlewares/ws/verifyWSMiddleware.js +20 -0
- package/dist/NodeManager/node/api/middlewares/ws/verifyWSNodeOrJobOwnerSignatureMiddleware.d.ts +6 -0
- package/dist/NodeManager/node/api/middlewares/ws/verifyWSNodeOrJobOwnerSignatureMiddleware.js +33 -0
- package/dist/NodeManager/node/api/routes/get/index.d.ts +6 -0
- package/dist/NodeManager/node/api/routes/get/index.js +6 -0
- package/dist/NodeManager/node/api/routes/get/job-definition.d.ts +5 -0
- package/dist/NodeManager/node/api/routes/get/job-definition.js +16 -0
- package/dist/NodeManager/node/api/routes/get/job-info/buildInfoObject.d.ts +17 -0
- package/dist/NodeManager/node/api/routes/get/job-info/buildInfoObject.js +15 -0
- package/dist/NodeManager/node/api/routes/get/job-info/job-info.d.ts +5 -0
- package/dist/NodeManager/node/api/routes/get/job-info/job-info.js +18 -0
- package/dist/NodeManager/node/api/routes/get/job-info/pollActiveJob.d.ts +6 -0
- package/dist/NodeManager/node/api/routes/get/job-info/pollActiveJob.js +42 -0
- package/dist/NodeManager/node/api/routes/get/job-operation-info.d.ts +28 -0
- package/dist/NodeManager/node/api/routes/get/job-operation-info.js +53 -0
- package/dist/NodeManager/node/api/routes/get/job-results.d.ts +5 -0
- package/dist/NodeManager/node/api/routes/get/job-results.js +15 -0
- package/dist/NodeManager/node/api/routes/get/node-info.d.ts +3 -0
- package/dist/NodeManager/node/api/routes/get/node-info.js +23 -0
- package/dist/NodeManager/node/api/routes/get/service-url.d.ts +5 -0
- package/dist/NodeManager/node/api/routes/get/service-url.js +27 -0
- package/dist/NodeManager/node/api/routes/index.d.ts +3 -0
- package/dist/NodeManager/node/api/routes/index.js +3 -0
- package/dist/NodeManager/node/api/routes/post/index.d.ts +4 -0
- package/dist/NodeManager/node/api/routes/post/index.js +4 -0
- package/dist/NodeManager/node/api/routes/post/job-definition.d.ts +6 -0
- package/dist/NodeManager/node/api/routes/post/job-definition.js +15 -0
- package/dist/NodeManager/node/api/routes/post/job-operation-actions.d.ts +24 -0
- package/dist/NodeManager/node/api/routes/post/job-operation-actions.js +79 -0
- package/dist/NodeManager/node/api/routes/post/node-validation.d.ts +4 -0
- package/dist/NodeManager/node/api/routes/post/node-validation.js +1783 -0
- package/dist/NodeManager/node/api/routes/post/service-stop.d.ts +5 -0
- package/dist/NodeManager/node/api/routes/post/service-stop.js +13 -0
- package/dist/NodeManager/node/api/routes/wss/index.d.ts +2 -0
- package/dist/NodeManager/node/api/routes/wss/index.js +2 -0
- package/dist/NodeManager/node/api/routes/wss/log.d.ts +14 -0
- package/dist/NodeManager/node/api/routes/wss/log.js +34 -0
- package/dist/NodeManager/node/api/routes/wss/status.d.ts +8 -0
- package/dist/NodeManager/node/api/routes/wss/status.js +11 -0
- package/dist/NodeManager/node/api/types/index.d.ts +12 -0
- package/dist/NodeManager/node/api/types/index.js +1 -0
- package/dist/NodeManager/node/balance/balanceHandler.d.ts +12 -0
- package/dist/NodeManager/node/balance/balanceHandler.js +52 -0
- package/dist/NodeManager/node/expiry/expiryHandler.d.ts +24 -0
- package/dist/NodeManager/node/expiry/expiryHandler.js +99 -0
- package/dist/NodeManager/node/grid/gridHandler.d.ts +19 -0
- package/dist/NodeManager/node/grid/gridHandler.js +168 -0
- package/dist/NodeManager/node/health/healthHandler.d.ts +16 -0
- package/dist/NodeManager/node/health/healthHandler.js +69 -0
- package/dist/NodeManager/node/job/JobRegistry.d.ts +14 -0
- package/dist/NodeManager/node/job/JobRegistry.js +48 -0
- package/dist/NodeManager/node/job/defination/JobDefinitionStrategy.d.ts +13 -0
- package/dist/NodeManager/node/job/defination/JobDefinitionStrategy.js +21 -0
- package/dist/NodeManager/node/job/defination/strategy/ApiJobDefinitionStrategy.d.ts +8 -0
- package/dist/NodeManager/node/job/defination/strategy/ApiJobDefinitionStrategy.js +40 -0
- package/dist/NodeManager/node/job/defination/strategy/ApiListenJobDefinitionStrategy.d.ts +9 -0
- package/dist/NodeManager/node/job/defination/strategy/ApiListenJobDefinitionStrategy.js +16 -0
- package/dist/NodeManager/node/job/defination/strategy/IpfsJobDefinitionStrategy.d.ts +7 -0
- package/dist/NodeManager/node/job/defination/strategy/IpfsJobDefinitionStrategy.js +13 -0
- package/dist/NodeManager/node/job/jobExternalUtil.d.ts +10 -0
- package/dist/NodeManager/node/job/jobExternalUtil.js +82 -0
- package/dist/NodeManager/node/job/jobHandler.d.ts +43 -0
- package/dist/NodeManager/node/job/jobHandler.js +193 -0
- package/dist/NodeManager/node/job/result/ResultReturnStrategy.d.ts +13 -0
- package/dist/NodeManager/node/job/result/ResultReturnStrategy.js +21 -0
- package/dist/NodeManager/node/job/result/startegy/ApiListenResultReturnStrategy.d.ts +8 -0
- package/dist/NodeManager/node/job/result/startegy/ApiListenResultReturnStrategy.js +22 -0
- package/dist/NodeManager/node/job/result/startegy/ApiResultReturnStrategy.d.ts +8 -0
- package/dist/NodeManager/node/job/result/startegy/ApiResultReturnStrategy.js +42 -0
- package/dist/NodeManager/node/key/keyHandler.d.ts +16 -0
- package/dist/NodeManager/node/key/keyHandler.js +74 -0
- package/dist/NodeManager/node/market/marketHandler.d.ts +30 -0
- package/dist/NodeManager/node/market/marketHandler.js +137 -0
- package/dist/NodeManager/node/register/index.d.ts +16 -0
- package/dist/NodeManager/node/register/index.js +88 -0
- package/dist/NodeManager/node/resource/definition/index.d.ts +2 -0
- package/dist/NodeManager/node/resource/definition/index.js +2 -0
- package/dist/NodeManager/node/resource/helpers/createHFArgs.d.ts +6 -0
- package/dist/NodeManager/node/resource/helpers/createHFArgs.js +26 -0
- package/dist/NodeManager/node/resource/helpers/createOllamaArgs.d.ts +2 -0
- package/dist/NodeManager/node/resource/helpers/createOllamaArgs.js +20 -0
- package/dist/NodeManager/node/resource/helpers/createResourceName.d.ts +2 -0
- package/dist/NodeManager/node/resource/helpers/createResourceName.js +18 -0
- package/dist/NodeManager/node/resource/helpers/createS3Args.d.ts +7 -0
- package/dist/NodeManager/node/resource/helpers/createS3Args.js +32 -0
- package/dist/NodeManager/node/resource/helpers/hasDockerVolume.d.ts +2 -0
- package/dist/NodeManager/node/resource/helpers/hasDockerVolume.js +3 -0
- package/dist/NodeManager/node/resource/helpers/hoursSunceDate.d.ts +1 -0
- package/dist/NodeManager/node/resource/helpers/hoursSunceDate.js +3 -0
- package/dist/NodeManager/node/resource/helpers/repoTagsContainsImage.d.ts +1 -0
- package/dist/NodeManager/node/resource/helpers/repoTagsContainsImage.js +13 -0
- package/dist/NodeManager/node/resource/image/imageManager.d.ts +13 -0
- package/dist/NodeManager/node/resource/image/imageManager.js +66 -0
- package/dist/NodeManager/node/resource/resourceManager.d.ts +21 -0
- package/dist/NodeManager/node/resource/resourceManager.js +57 -0
- package/dist/NodeManager/node/resource/volume/volumeManager.d.ts +20 -0
- package/dist/NodeManager/node/resource/volume/volumeManager.js +228 -0
- package/dist/NodeManager/node/run/runHandler.d.ts +18 -0
- package/dist/NodeManager/node/run/runHandler.js +139 -0
- package/dist/NodeManager/node/specs/specsHandler.d.ts +17 -0
- package/dist/NodeManager/node/specs/specsHandler.js +135 -0
- package/dist/NodeManager/node/specs/type.d.ts +15 -0
- package/dist/NodeManager/node/specs/type.js +1 -0
- package/dist/NodeManager/node/stake/StakeHandler.d.ts +22 -0
- package/dist/NodeManager/node/stake/StakeHandler.js +111 -0
- package/dist/NodeManager/node/task/TaskManager.d.ts +267 -0
- package/dist/NodeManager/node/task/TaskManager.js +480 -0
- package/dist/NodeManager/node/task/TaskManagerRegistry.d.ts +49 -0
- package/dist/NodeManager/node/task/TaskManagerRegistry.js +68 -0
- package/dist/NodeManager/node/task/executions/createDependencyMap.d.ts +18 -0
- package/dist/NodeManager/node/task/executions/createDependencyMap.js +32 -0
- package/dist/NodeManager/node/task/executions/createExecutionPlan.d.ts +14 -0
- package/dist/NodeManager/node/task/executions/createExecutionPlan.js +36 -0
- package/dist/NodeManager/node/task/executions/createOperationMap.d.ts +11 -0
- package/dist/NodeManager/node/task/executions/createOperationMap.js +34 -0
- package/dist/NodeManager/node/task/executions/validateExecutionPlan.d.ts +12 -0
- package/dist/NodeManager/node/task/executions/validateExecutionPlan.js +48 -0
- package/dist/NodeManager/node/task/globalStore/finalizeEnv.d.ts +2 -0
- package/dist/NodeManager/node/task/globalStore/finalizeEnv.js +30 -0
- package/dist/NodeManager/node/task/globalStore/getByPath.d.ts +2 -0
- package/dist/NodeManager/node/task/globalStore/getByPath.js +12 -0
- package/dist/NodeManager/node/task/globalStore/index.d.ts +9 -0
- package/dist/NodeManager/node/task/globalStore/index.js +9 -0
- package/dist/NodeManager/node/task/globalStore/interpolate.d.ts +2 -0
- package/dist/NodeManager/node/task/globalStore/interpolate.js +16 -0
- package/dist/NodeManager/node/task/globalStore/interpolateOperation.d.ts +3 -0
- package/dist/NodeManager/node/task/globalStore/interpolateOperation.js +221 -0
- package/dist/NodeManager/node/task/globalStore/resolveLiteralsInString.d.ts +2 -0
- package/dist/NodeManager/node/task/globalStore/resolveLiteralsInString.js +7 -0
- package/dist/NodeManager/node/task/globalStore/setDefaults.d.ts +4 -0
- package/dist/NodeManager/node/task/globalStore/setDefaults.js +65 -0
- package/dist/NodeManager/node/task/globalStore/setHost.d.ts +2 -0
- package/dist/NodeManager/node/task/globalStore/setHost.js +9 -0
- package/dist/NodeManager/node/task/globalStore/setResult.d.ts +2 -0
- package/dist/NodeManager/node/task/globalStore/setResult.js +10 -0
- package/dist/NodeManager/node/task/globalStore/setResults.d.ts +2 -0
- package/dist/NodeManager/node/task/globalStore/setResults.js +9 -0
- package/dist/NodeManager/node/task/globalStore/stanatizeArrays.d.ts +2 -0
- package/dist/NodeManager/node/task/globalStore/stanatizeArrays.js +14 -0
- package/dist/NodeManager/node/task/globalStore/transformCollections.d.ts +13 -0
- package/dist/NodeManager/node/task/globalStore/transformCollections.js +152 -0
- package/dist/NodeManager/node/task/helpers/createDefaultOpState.d.ts +2 -0
- package/dist/NodeManager/node/task/helpers/createDefaultOpState.js +20 -0
- package/dist/NodeManager/node/task/helpers/createInitialFlow.d.ts +8 -0
- package/dist/NodeManager/node/task/helpers/createInitialFlow.js +24 -0
- package/dist/NodeManager/node/task/loggers/logManager.d.ts +8 -0
- package/dist/NodeManager/node/task/loggers/logManager.js +54 -0
- package/dist/NodeManager/node/task/operations/getOperationsInfos.d.ts +6 -0
- package/dist/NodeManager/node/task/operations/getOperationsInfos.js +33 -0
- package/dist/NodeManager/node/task/operations/moveTaskManagerGroupOperation.d.ts +2 -0
- package/dist/NodeManager/node/task/operations/moveTaskManagerGroupOperation.js +65 -0
- package/dist/NodeManager/node/task/operations/restartTaskManagerGroupOperation.d.ts +10 -0
- package/dist/NodeManager/node/task/operations/restartTaskManagerGroupOperation.js +37 -0
- package/dist/NodeManager/node/task/operations/restartTaskManagerOperation.d.ts +14 -0
- package/dist/NodeManager/node/task/operations/restartTaskManagerOperation.js +117 -0
- package/dist/NodeManager/node/task/operations/runTaskManagerOperation.d.ts +21 -0
- package/dist/NodeManager/node/task/operations/runTaskManagerOperation.js +488 -0
- package/dist/NodeManager/node/task/operations/stopAllTaskManagerOperations.d.ts +21 -0
- package/dist/NodeManager/node/task/operations/stopAllTaskManagerOperations.js +54 -0
- package/dist/NodeManager/node/task/operations/stopTaskManagerGroupOperation.d.ts +10 -0
- package/dist/NodeManager/node/task/operations/stopTaskManagerGroupOperation.js +43 -0
- package/dist/NodeManager/node/task/operations/stopTaskManagerOperation.d.ts +14 -0
- package/dist/NodeManager/node/task/operations/stopTaskManagerOperation.js +137 -0
- package/dist/NodeManager/node/utils/convertFromBytes.d.ts +4 -0
- package/dist/NodeManager/node/utils/convertFromBytes.js +11 -0
- package/dist/NodeManager/node/utils/extractLogsAndResultsFromLogBuffer.d.ts +7 -0
- package/dist/NodeManager/node/utils/extractLogsAndResultsFromLogBuffer.js +34 -0
- package/dist/NodeManager/node/utils/extractResultsFromLogs.d.ts +18 -0
- package/dist/NodeManager/node/utils/extractResultsFromLogs.js +37 -0
- package/dist/NodeManager/node/utils/generateRandomId.d.ts +1 -0
- package/dist/NodeManager/node/utils/generateRandomId.js +3 -0
- package/dist/NodeManager/node/utils/multiProgressBarReporter.d.ts +16 -0
- package/dist/NodeManager/node/utils/multiProgressBarReporter.js +22 -0
- package/dist/NodeManager/node/utils/poll.d.ts +5 -0
- package/dist/NodeManager/node/utils/poll.js +25 -0
- package/dist/NodeManager/node/utils/progressBarReporter.d.ts +9 -0
- package/dist/NodeManager/node/utils/progressBarReporter.js +28 -0
- package/dist/NodeManager/provider/ContainerStateManager.d.ts +24 -0
- package/dist/NodeManager/provider/ContainerStateManager.js +122 -0
- package/dist/NodeManager/provider/ExposedPortHealthCheck.d.ts +29 -0
- package/dist/NodeManager/provider/ExposedPortHealthCheck.js +183 -0
- package/dist/NodeManager/provider/Provider.d.ts +70 -0
- package/dist/NodeManager/provider/Provider.js +457 -0
- package/dist/NodeManager/provider/__tests__/Provider.spec.d.ts +1 -0
- package/dist/NodeManager/provider/__tests__/Provider.spec.js +337 -0
- package/dist/NodeManager/provider/containerOrchestration/docker/dockerExtended/index.d.ts +6 -0
- package/dist/NodeManager/provider/containerOrchestration/docker/dockerExtended/index.js +45 -0
- package/dist/NodeManager/provider/containerOrchestration/docker/index.d.ts +43 -0
- package/dist/NodeManager/provider/containerOrchestration/docker/index.js +366 -0
- package/dist/NodeManager/provider/containerOrchestration/docker/utils/createServerObject.d.ts +5 -0
- package/dist/NodeManager/provider/containerOrchestration/docker/utils/createServerObject.js +15 -0
- package/dist/NodeManager/provider/containerOrchestration/docker/utils/deadline.d.ts +1 -0
- package/dist/NodeManager/provider/containerOrchestration/docker/utils/deadline.js +15 -0
- package/dist/NodeManager/provider/containerOrchestration/docker/utils/repoTagsContainsImage.d.ts +1 -0
- package/dist/NodeManager/provider/containerOrchestration/docker/utils/repoTagsContainsImage.js +13 -0
- package/dist/NodeManager/provider/containerOrchestration/interface.d.ts +53 -0
- package/dist/NodeManager/provider/containerOrchestration/interface.js +1 -0
- package/dist/NodeManager/provider/containerOrchestration/podman/index.d.ts +11 -0
- package/dist/NodeManager/provider/containerOrchestration/podman/index.js +69 -0
- package/dist/NodeManager/provider/containerOrchestration/podman/utils/createPodmanRunOptions.d.ts +103 -0
- package/dist/NodeManager/provider/containerOrchestration/podman/utils/createPodmanRunOptions.js +66 -0
- package/dist/NodeManager/provider/containerOrchestration/selectContainerOrchestration.d.ts +2 -0
- package/dist/NodeManager/provider/containerOrchestration/selectContainerOrchestration.js +11 -0
- package/dist/NodeManager/provider/types.d.ts +18 -0
- package/dist/NodeManager/provider/types.js +1 -0
- package/dist/NodeManager/provider/utils/parseBuffer.d.ts +4 -0
- package/dist/NodeManager/provider/utils/parseBuffer.js +19 -0
- package/dist/NodeManager/repository/NodeRepository.d.ts +53 -0
- package/dist/NodeManager/repository/NodeRepository.js +153 -0
- package/dist/NodeManager/sdk/index.d.ts +9 -0
- package/dist/NodeManager/sdk/index.js +146 -0
- package/dist/NodeManager/types/index.d.ts +27 -0
- package/dist/NodeManager/types/index.js +1 -0
- package/dist/NodeManager/utils/convertFromBytes.d.ts +4 -0
- package/dist/NodeManager/utils/convertFromBytes.js +11 -0
- package/dist/NodeManager/utils/expose-util.d.ts +14 -0
- package/dist/NodeManager/utils/expose-util.js +88 -0
- package/dist/NodeManager/utils/jobDefinitionParser.d.ts +12 -0
- package/dist/NodeManager/utils/jobDefinitionParser.js +31 -0
- package/dist/NodeManager/utils/ops-util.d.ts +3 -0
- package/dist/NodeManager/utils/ops-util.js +19 -0
- package/dist/NodeManager/utils/timeoutPromiseWrapper.d.ts +1 -0
- package/dist/NodeManager/utils/timeoutPromiseWrapper.js +27 -0
- package/dist/NodeManager/utils/utils.d.ts +39 -0
- package/dist/NodeManager/utils/utils.js +107 -0
- package/dist/NodeManager/utils/wslCheck.d.ts +14 -0
- package/dist/NodeManager/utils/wslCheck.js +54 -0
- package/dist/cli/address/__tests__/command.spec.d.ts +1 -0
- package/dist/cli/address/__tests__/command.spec.js +33 -0
- package/dist/cli/address/action.d.ts +4 -0
- package/dist/cli/address/action.js +4 -0
- package/dist/cli/address/command.d.ts +2 -0
- package/dist/cli/address/command.js +9 -0
- package/dist/cli/createNosanaCli.d.ts +2 -0
- package/dist/cli/createNosanaCli.js +32 -0
- package/dist/cli/index.d.ts +1 -0
- package/dist/cli/index.js +16 -0
- package/dist/cli/node/__tests__/index.spec.d.ts +1 -0
- package/dist/cli/node/__tests__/index.spec.js +10 -0
- package/dist/cli/node/index.d.ts +5 -0
- package/dist/cli/node/index.js +12 -0
- package/dist/cli/node/prune/action.d.ts +4 -0
- package/dist/cli/node/prune/action.js +18 -0
- package/dist/cli/node/prune/command.d.ts +2 -0
- package/dist/cli/node/prune/command.js +10 -0
- package/dist/cli/node/run/__tests__/command.spec.d.ts +1 -0
- package/dist/cli/node/run/__tests__/command.spec.js +38 -0
- package/dist/cli/node/run/action.d.ts +3 -0
- package/dist/cli/node/run/action.js +82 -0
- package/dist/cli/node/run/command.d.ts +3 -0
- package/dist/cli/node/run/command.js +17 -0
- package/dist/cli/node/run/generateDeploymentEndpointsTable.d.ts +2 -0
- package/dist/cli/node/run/generateDeploymentEndpointsTable.js +45 -0
- package/dist/cli/node/start/__tests__/command.spec.d.ts +1 -0
- package/dist/cli/node/start/__tests__/command.spec.js +39 -0
- package/dist/cli/node/start/action.d.ts +4 -0
- package/dist/cli/node/start/action.js +48 -0
- package/dist/cli/node/start/command.d.ts +3 -0
- package/dist/cli/node/start/command.js +19 -0
- package/dist/cli/sharedOptions/--api.d.ts +2 -0
- package/dist/cli/sharedOptions/--api.js +2 -0
- package/dist/cli/sharedOptions/--format.d.ts +2 -0
- package/dist/cli/sharedOptions/--format.js +4 -0
- package/dist/cli/sharedOptions/--gpu.d.ts +2 -0
- package/dist/cli/sharedOptions/--gpu.js +12 -0
- package/dist/cli/sharedOptions/--network.d.ts +2 -0
- package/dist/cli/sharedOptions/--network.js +4 -0
- package/dist/cli/sharedOptions/--port.d.ts +2 -0
- package/dist/cli/sharedOptions/--port.js +2 -0
- package/dist/cli/sharedOptions/--rpc.d.ts +2 -0
- package/dist/cli/sharedOptions/--rpc.js +2 -0
- package/dist/cli/sharedOptions/--timeout.d.ts +2 -0
- package/dist/cli/sharedOptions/--timeout.js +12 -0
- package/dist/cli/sharedOptions/--verbose.d.ts +2 -0
- package/dist/cli/sharedOptions/--verbose.js +2 -0
- package/dist/cli/sharedOptions/--wallet.d.ts +2 -0
- package/dist/cli/sharedOptions/--wallet.js +2 -0
- package/dist/cli/sharedOptions/index.d.ts +7 -0
- package/dist/cli/sharedOptions/index.js +8 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.js +7 -0
- package/dist/output-formatter/OutputFormatter.d.ts +61 -0
- package/dist/output-formatter/OutputFormatter.js +58 -0
- package/dist/output-formatter/OutputFormatterFactory.d.ts +4 -0
- package/dist/output-formatter/OutputFormatterFactory.js +18 -0
- package/dist/output-formatter/__mocks__/outputEvents.mock.d.ts +42 -0
- package/dist/output-formatter/__mocks__/outputEvents.mock.js +45 -0
- package/dist/output-formatter/__mocks__/outputFormatter.mock.d.ts +0 -0
- package/dist/output-formatter/__mocks__/outputFormatter.mock.js +21 -0
- package/dist/output-formatter/__tests__/OutputFormatter.spec.d.ts +1 -0
- package/dist/output-formatter/__tests__/OutputFormatter.spec.js +34 -0
- package/dist/output-formatter/__tests__/OutputFormatterFactory.spec.d.ts +1 -0
- package/dist/output-formatter/__tests__/OutputFormatterFactory.spec.js +26 -0
- package/dist/output-formatter/__tests__/outputFormatSelector.spec.d.ts +1 -0
- package/dist/output-formatter/__tests__/outputFormatSelector.spec.js +21 -0
- package/dist/output-formatter/json/JsonOutputEventHandlers.d.ts +8 -0
- package/dist/output-formatter/json/JsonOutputEventHandlers.js +191 -0
- package/dist/output-formatter/json/JsonOutputFormatter.d.ts +47 -0
- package/dist/output-formatter/json/JsonOutputFormatter.js +12 -0
- package/dist/output-formatter/json/__tests__/JsonOutputFormatter.spec.d.ts +1 -0
- package/dist/output-formatter/json/__tests__/JsonOutputFormatter.spec.js +36 -0
- package/dist/output-formatter/outputEvents.d.ts +213 -0
- package/dist/output-formatter/outputEvents.js +63 -0
- package/dist/output-formatter/outputFormatArgumentParser.d.ts +1 -0
- package/dist/output-formatter/outputFormatArgumentParser.js +10 -0
- package/dist/output-formatter/outputFormatSelector.d.ts +15 -0
- package/dist/output-formatter/outputFormatSelector.js +23 -0
- package/dist/output-formatter/text/TextOutputEventHandlers.d.ts +7 -0
- package/dist/output-formatter/text/TextOutputEventHandlers.js +128 -0
- package/dist/output-formatter/text/TextOutputFormatter.d.ts +6 -0
- package/dist/output-formatter/text/TextOutputFormatter.js +7 -0
- package/dist/output-formatter/text/VerboseTextOutputEventHandlers.d.ts +7 -0
- package/dist/output-formatter/text/VerboseTextOutputEventHandlers.js +138 -0
- package/dist/output-formatter/text/VerboseTextOutputFormatter.d.ts +6 -0
- package/dist/output-formatter/text/VerboseTextOutputFormatter.js +7 -0
- package/dist/output-formatter/text/__tests__/TextOutputFormatter.spec.d.ts +1 -0
- package/dist/output-formatter/text/__tests__/TextOutputFormatter.spec.js +25 -0
- package/dist/static/index.d.ts +7 -0
- package/dist/static/index.js +12 -0
- package/dist/version/index.d.ts +1 -0
- package/dist/version/index.js +47 -0
- package/npm-shrinkwrap.json +9928 -0
- package/package.json +102 -0
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
import { OperationProgressStatuses, StopReasons, } from '../TaskManager.js';
|
|
2
|
+
/**
|
|
3
|
+
* Publicly exposed method to stop a running operation within the active group.
|
|
4
|
+
*
|
|
5
|
+
* This:
|
|
6
|
+
* - Validates the operation belongs to the current group
|
|
7
|
+
* - Prevents concurrent mutation using `lockedOperations`
|
|
8
|
+
* - Aborts the operation's container execution
|
|
9
|
+
* - Waits for full cleanup (exit/error + container teardown)
|
|
10
|
+
* - Ensures promise is resolved before continuing
|
|
11
|
+
*
|
|
12
|
+
* Usage: await taskManager.stopTaskOperation(groupId, opId)
|
|
13
|
+
*/
|
|
14
|
+
export async function stopTaskManagerOperation(group, opId) {
|
|
15
|
+
/**
|
|
16
|
+
* Check if the provided group exists in the execution plan.
|
|
17
|
+
* If not, the group name is invalid or unregistered.
|
|
18
|
+
*/
|
|
19
|
+
const groupExists = this.executionPlan.some((ctx) => ctx.group === group);
|
|
20
|
+
if (!groupExists) {
|
|
21
|
+
throw new Error(`GROUP_NOT_FOUND`);
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* If the provided group is not currently active, we still allow a stop attempt
|
|
25
|
+
*/
|
|
26
|
+
const inProvidedGroup = this.executionPlan
|
|
27
|
+
.find((ctx) => ctx.group === group)
|
|
28
|
+
?.ops.includes(opId);
|
|
29
|
+
if (!inProvidedGroup) {
|
|
30
|
+
throw new Error('GROUP_NOT_FOUND');
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Prevent concurrent stop or restart operations on the same op.
|
|
34
|
+
* This lock guards against race conditions or double-aborts.
|
|
35
|
+
*/
|
|
36
|
+
if (this.lockedOperations.has(opId)) {
|
|
37
|
+
throw new Error(`OPERATION_${this.lockedOperations.get(opId)}`);
|
|
38
|
+
}
|
|
39
|
+
const currentStatus = this.operationStatus.get(opId);
|
|
40
|
+
if (currentStatus == OperationProgressStatuses.STOPPED) {
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
this.lockedOperations.set(opId, 'STOPPING');
|
|
44
|
+
this.operationStatus.set(opId, OperationProgressStatuses.STOPPING);
|
|
45
|
+
const emitter = this.operationsEventEmitters.get(opId);
|
|
46
|
+
if (emitter) {
|
|
47
|
+
emitter.emit('log', 'Stopping Operation', 'info');
|
|
48
|
+
}
|
|
49
|
+
// notify listeners that flow state changed to reflect STOPPING
|
|
50
|
+
this.events.emit('flow:updated', {
|
|
51
|
+
jobId: this.job,
|
|
52
|
+
opId,
|
|
53
|
+
type: 'status:stopping',
|
|
54
|
+
});
|
|
55
|
+
/**
|
|
56
|
+
* Retrieve the AbortController for this op.
|
|
57
|
+
* If it's missing, something went wrong during registration or setup.
|
|
58
|
+
*/
|
|
59
|
+
const controller = this.abortControllerMap.get(opId);
|
|
60
|
+
/**
|
|
61
|
+
* Abort the operation — this will trigger cleanup via its lifecycle handlers.
|
|
62
|
+
* The container will be stopped and teardown will run automatically.
|
|
63
|
+
*/
|
|
64
|
+
controller?.abort(StopReasons.STOPPED);
|
|
65
|
+
/**
|
|
66
|
+
* Wait for the original promise tied to this operation to resolve.
|
|
67
|
+
* Even if it fails (e.g., due to abort), we silently swallow the error
|
|
68
|
+
* since the focus here is cleanup, not success.
|
|
69
|
+
*/
|
|
70
|
+
const originalPromise = this.currentGroupOperationsPromises.get(opId);
|
|
71
|
+
if (originalPromise) {
|
|
72
|
+
try {
|
|
73
|
+
await originalPromise;
|
|
74
|
+
}
|
|
75
|
+
catch {
|
|
76
|
+
// swallow error, we're only waiting for cleanup
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Ensure we clean up the operation's reference in the promise map
|
|
81
|
+
* to avoid holding stale references or leaking memory.
|
|
82
|
+
*/
|
|
83
|
+
this.currentGroupOperationsPromises.delete(opId);
|
|
84
|
+
// Unlock the operation so it can be restarted or reused later
|
|
85
|
+
this.lockedOperations.delete(opId);
|
|
86
|
+
// Ensure final STOPPED state is reflected in memory and repository
|
|
87
|
+
this.operationStatus.set(opId, OperationProgressStatuses.STOPPED);
|
|
88
|
+
const index = this.getOpStateIndex(opId);
|
|
89
|
+
const opState = this.repository.getOpState(this.job, index);
|
|
90
|
+
const alreadyEnded = !!opState.endTime;
|
|
91
|
+
if (!alreadyEnded) {
|
|
92
|
+
this.repository.updateOpState(this.job, index, {
|
|
93
|
+
status: this.getStatus(StopReasons.STOPPED, 'ops'),
|
|
94
|
+
endTime: Date.now(),
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
this.events.emit('flow:updated', {
|
|
98
|
+
jobId: this.job,
|
|
99
|
+
opId,
|
|
100
|
+
type: 'status:stopped',
|
|
101
|
+
});
|
|
102
|
+
try {
|
|
103
|
+
const flow = this.repository.getFlow(this.job);
|
|
104
|
+
const secrets = flow?.state?.secrets;
|
|
105
|
+
let jobSecrets = {};
|
|
106
|
+
if (secrets &&
|
|
107
|
+
typeof secrets[this.job] === 'object' &&
|
|
108
|
+
secrets[this.job] !== 'private' &&
|
|
109
|
+
secrets[this.job] !== 'public' &&
|
|
110
|
+
secrets[this.job]) {
|
|
111
|
+
jobSecrets = secrets[this.job];
|
|
112
|
+
}
|
|
113
|
+
let updated = false;
|
|
114
|
+
const newJobSecrets = {};
|
|
115
|
+
for (const [exposeId, value] of Object.entries(jobSecrets)) {
|
|
116
|
+
const v = value;
|
|
117
|
+
if (v && typeof v === 'object' && v.opID === opId) {
|
|
118
|
+
newJobSecrets[exposeId] = { ...v, status: 'OFFLINE' };
|
|
119
|
+
updated = true;
|
|
120
|
+
}
|
|
121
|
+
else {
|
|
122
|
+
newJobSecrets[exposeId] = v;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
if (updated) {
|
|
126
|
+
this.repository.updateflowStateSecret(this.job, {
|
|
127
|
+
[this.job]: newJobSecrets,
|
|
128
|
+
});
|
|
129
|
+
this.events.emit('flow:updated', {
|
|
130
|
+
jobId: this.job,
|
|
131
|
+
opId,
|
|
132
|
+
type: 'flow:secrets-updated',
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
catch { }
|
|
137
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export function convertFromBytes(bytes, toFormat) {
|
|
2
|
+
let value = bytes / 1024;
|
|
3
|
+
if ((value < 1024 && !toFormat) || toFormat === 'kb') {
|
|
4
|
+
return { value: Number(value.toFixed(2)), format: 'kb' };
|
|
5
|
+
}
|
|
6
|
+
value = value / 1024;
|
|
7
|
+
if ((value < 1024 && !toFormat) || toFormat === 'mb') {
|
|
8
|
+
return { value: Number(value.toFixed(2)), format: 'mb' };
|
|
9
|
+
}
|
|
10
|
+
return { value: Number((value / 1024).toFixed(2)), format: 'gb' };
|
|
11
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
/// <reference types="node" />
|
|
3
|
+
import type { OperationResults, Log } from '@nosana/sdk';
|
|
4
|
+
export declare function extractLogsAndResultsFromLogBuffer(logBuffer: Buffer, operationResults: OperationResults | undefined, expiryTimeout?: number): {
|
|
5
|
+
logs: Log[];
|
|
6
|
+
results: {} | undefined;
|
|
7
|
+
};
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { parseBuffer } from '../../provider/utils/parseBuffer.js';
|
|
2
|
+
import { createResultsObject, extractResultFromLog, } from './extractResultsFromLogs.js';
|
|
3
|
+
export function extractLogsAndResultsFromLogBuffer(logBuffer, operationResults, expiryTimeout = 180) {
|
|
4
|
+
const logs = [];
|
|
5
|
+
const results = operationResults
|
|
6
|
+
? createResultsObject(operationResults)
|
|
7
|
+
: undefined;
|
|
8
|
+
let index = 0, running = true;
|
|
9
|
+
const timer = setTimeout(() => {
|
|
10
|
+
running = false;
|
|
11
|
+
logs.push({
|
|
12
|
+
type: 'nodeerr',
|
|
13
|
+
log: 'Took too long to retrive all logs',
|
|
14
|
+
timestamp: new Date().toISOString(),
|
|
15
|
+
});
|
|
16
|
+
}, expiryTimeout);
|
|
17
|
+
while (index < logBuffer.length && running) {
|
|
18
|
+
const log = parseBuffer(logBuffer, index);
|
|
19
|
+
logs.push(log);
|
|
20
|
+
if (results && operationResults) {
|
|
21
|
+
extractResultFromLog(results, log, operationResults);
|
|
22
|
+
}
|
|
23
|
+
if (logs.length >= 25000) {
|
|
24
|
+
running = false;
|
|
25
|
+
logs.push({
|
|
26
|
+
type: 'nodeerr',
|
|
27
|
+
log: 'Found too many logs...',
|
|
28
|
+
timestamp: new Date().toISOString(),
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
clearTimeout(timer);
|
|
33
|
+
return { logs, results };
|
|
34
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { OperationResults, Log } from '@nosana/sdk';
|
|
2
|
+
/**
|
|
3
|
+
* Initiates results object to retain order from job definition
|
|
4
|
+
* @param operationResults OperationResults | undefined
|
|
5
|
+
* @returns {Object.<string, string | string[]>} initiated object
|
|
6
|
+
*/
|
|
7
|
+
export declare function createResultsObject(operationResults: OperationResults): {
|
|
8
|
+
[key: string]: string | string[];
|
|
9
|
+
};
|
|
10
|
+
/**
|
|
11
|
+
* extracts operation results from log
|
|
12
|
+
* @param resultObj
|
|
13
|
+
* @param logObj
|
|
14
|
+
* @param operationResults OperationResults
|
|
15
|
+
*/
|
|
16
|
+
export declare function extractResultFromLog(resultObj: {
|
|
17
|
+
[key: string]: string | string[];
|
|
18
|
+
}, logObj: Log, operationResults: OperationResults): void;
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Initiates results object to retain order from job definition
|
|
3
|
+
* @param operationResults OperationResults | undefined
|
|
4
|
+
* @returns {Object.<string, string | string[]>} initiated object
|
|
5
|
+
*/
|
|
6
|
+
export function createResultsObject(operationResults) {
|
|
7
|
+
return Object.keys(operationResults).reduce((obj, key) => ((obj[key] = []), obj), {});
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* extracts operation results from log
|
|
11
|
+
* @param resultObj
|
|
12
|
+
* @param logObj
|
|
13
|
+
* @param operationResults OperationResults
|
|
14
|
+
*/
|
|
15
|
+
export function extractResultFromLog(resultObj, logObj, operationResults) {
|
|
16
|
+
const { type, log } = logObj;
|
|
17
|
+
for (let [filterName, filter] of Object.entries(operationResults)) {
|
|
18
|
+
let regex;
|
|
19
|
+
let logType;
|
|
20
|
+
if (typeof filter === 'string')
|
|
21
|
+
regex = filter;
|
|
22
|
+
else
|
|
23
|
+
(regex = filter.regex), (logType = filter.logType);
|
|
24
|
+
if ((logType === undefined || logType?.includes(type)) && log) {
|
|
25
|
+
try {
|
|
26
|
+
const regexExp = new RegExp(regex === '*' ? '/*' : regex);
|
|
27
|
+
resultObj[filterName] = [
|
|
28
|
+
...resultObj[filterName],
|
|
29
|
+
...(log.match(regexExp) || []),
|
|
30
|
+
];
|
|
31
|
+
}
|
|
32
|
+
catch (err) {
|
|
33
|
+
resultObj[filterName] = `${err}`;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function generateRandomId(length: number): string;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { Options } from 'cli-progress';
|
|
2
|
+
export declare class MultiProgressBarReporter {
|
|
3
|
+
private running;
|
|
4
|
+
private current;
|
|
5
|
+
start(name: string, optProgressBar: Options): void;
|
|
6
|
+
update(event: {
|
|
7
|
+
status: 'Pulling fs layer' | 'Downloading' | 'Download complete';
|
|
8
|
+
progressDetail: {
|
|
9
|
+
current: number;
|
|
10
|
+
total: number;
|
|
11
|
+
};
|
|
12
|
+
id: string;
|
|
13
|
+
}): void;
|
|
14
|
+
stop(name: string): string;
|
|
15
|
+
completed(): Promise<void>;
|
|
16
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
export class MultiProgressBarReporter {
|
|
2
|
+
constructor() {
|
|
3
|
+
this.running = false;
|
|
4
|
+
this.current = {
|
|
5
|
+
optProgressBar: null,
|
|
6
|
+
};
|
|
7
|
+
}
|
|
8
|
+
start(name, optProgressBar) {
|
|
9
|
+
this.current = {
|
|
10
|
+
optProgressBar,
|
|
11
|
+
};
|
|
12
|
+
this.running = true;
|
|
13
|
+
}
|
|
14
|
+
update(event) { }
|
|
15
|
+
stop(name) {
|
|
16
|
+
this.running = false;
|
|
17
|
+
return name;
|
|
18
|
+
}
|
|
19
|
+
async completed() {
|
|
20
|
+
this.running = false;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
export function pollForRun(getRun, interval = 200) {
|
|
2
|
+
let poll;
|
|
3
|
+
let cancelled = false;
|
|
4
|
+
const promise = new Promise((resolve) => {
|
|
5
|
+
poll = setInterval(() => {
|
|
6
|
+
if (cancelled)
|
|
7
|
+
return;
|
|
8
|
+
try {
|
|
9
|
+
const run = getRun();
|
|
10
|
+
if (run) {
|
|
11
|
+
clearInterval(poll);
|
|
12
|
+
resolve(run);
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
catch { }
|
|
16
|
+
}, interval);
|
|
17
|
+
});
|
|
18
|
+
return {
|
|
19
|
+
promise,
|
|
20
|
+
cancel: () => {
|
|
21
|
+
cancelled = true;
|
|
22
|
+
clearInterval(poll);
|
|
23
|
+
},
|
|
24
|
+
};
|
|
25
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { Options, Preset } from 'cli-progress';
|
|
2
|
+
export declare class ProgressBarReporter {
|
|
3
|
+
private running;
|
|
4
|
+
private current;
|
|
5
|
+
start(name: string, optProgressBar: Options, total: number, startValue: number, payload?: object, progressBarPreset?: Preset): Promise<void>;
|
|
6
|
+
update(current: number, payload?: object): Promise<void>;
|
|
7
|
+
stop(name: string): Promise<string>;
|
|
8
|
+
completed(): Promise<void>;
|
|
9
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
export class ProgressBarReporter {
|
|
2
|
+
constructor() {
|
|
3
|
+
this.running = false;
|
|
4
|
+
this.current = {
|
|
5
|
+
optProgressBar: null,
|
|
6
|
+
total: 0,
|
|
7
|
+
startValue: 0,
|
|
8
|
+
};
|
|
9
|
+
}
|
|
10
|
+
async start(name, optProgressBar, total, startValue, payload, progressBarPreset) {
|
|
11
|
+
this.current = {
|
|
12
|
+
optProgressBar,
|
|
13
|
+
total,
|
|
14
|
+
startValue,
|
|
15
|
+
payload,
|
|
16
|
+
progressBarPreset,
|
|
17
|
+
};
|
|
18
|
+
this.running = true;
|
|
19
|
+
}
|
|
20
|
+
async update(current, payload) { }
|
|
21
|
+
async stop(name) {
|
|
22
|
+
this.running = false;
|
|
23
|
+
return name;
|
|
24
|
+
}
|
|
25
|
+
async completed() {
|
|
26
|
+
this.running = false;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
import type EventEmitter from 'events';
|
|
3
|
+
import type Dockerode from 'dockerode';
|
|
4
|
+
import type { RestartPolicy } from '@nosana/sdk';
|
|
5
|
+
type ContainerState = 'starting' | 'running' | 'exited' | 'restarting';
|
|
6
|
+
export declare class ContainerStateManager {
|
|
7
|
+
private container;
|
|
8
|
+
private controller;
|
|
9
|
+
private emitter;
|
|
10
|
+
private restartPolicy;
|
|
11
|
+
private state;
|
|
12
|
+
private exitedCheckCount;
|
|
13
|
+
private lastLogTimestamp;
|
|
14
|
+
private readonly EXITED_CHECKS_REQUIRED;
|
|
15
|
+
private currentLogStream;
|
|
16
|
+
private pollingInterval;
|
|
17
|
+
constructor(container: Dockerode.Container, controller: AbortController, emitter: EventEmitter, restartPolicy: RestartPolicy | undefined);
|
|
18
|
+
getState(): ContainerState;
|
|
19
|
+
startMonitoring(): Promise<void>;
|
|
20
|
+
private attachLogStream;
|
|
21
|
+
waitForExit(): Promise<void>;
|
|
22
|
+
stopMonitoring(): void;
|
|
23
|
+
}
|
|
24
|
+
export {};
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
import { parseBuffer } from './utils/parseBuffer.js';
|
|
2
|
+
export class ContainerStateManager {
|
|
3
|
+
constructor(container, controller, emitter, restartPolicy) {
|
|
4
|
+
this.container = container;
|
|
5
|
+
this.controller = controller;
|
|
6
|
+
this.emitter = emitter;
|
|
7
|
+
this.restartPolicy = restartPolicy;
|
|
8
|
+
this.state = 'starting';
|
|
9
|
+
this.exitedCheckCount = 0;
|
|
10
|
+
this.lastLogTimestamp = 0; // Unix timestamp in seconds from actual container logs
|
|
11
|
+
this.EXITED_CHECKS_REQUIRED = 3; // Require 3 consecutive checks before confirming exit
|
|
12
|
+
this.currentLogStream = null;
|
|
13
|
+
this.pollingInterval = null;
|
|
14
|
+
}
|
|
15
|
+
getState() {
|
|
16
|
+
return this.state;
|
|
17
|
+
}
|
|
18
|
+
async startMonitoring() {
|
|
19
|
+
await this.attachLogStream();
|
|
20
|
+
if (!this.restartPolicy) {
|
|
21
|
+
this.container
|
|
22
|
+
.wait({ abortSignal: this.controller.signal })
|
|
23
|
+
.finally(() => {
|
|
24
|
+
this.state = 'exited';
|
|
25
|
+
});
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
this.pollingInterval = setInterval(async () => {
|
|
29
|
+
if (this.controller.signal.aborted) {
|
|
30
|
+
this.stopMonitoring();
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
try {
|
|
34
|
+
const inspectInfo = await this.container.inspect();
|
|
35
|
+
let inspectedState = inspectInfo.State.Status.toLowerCase();
|
|
36
|
+
if (['running', 'restarting'].includes(inspectedState)) {
|
|
37
|
+
this.exitedCheckCount = 0;
|
|
38
|
+
this.state = inspectedState;
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
this.exitedCheckCount++;
|
|
42
|
+
if (this.exitedCheckCount >= this.EXITED_CHECKS_REQUIRED) {
|
|
43
|
+
this.state = 'exited';
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
catch (error) {
|
|
47
|
+
this.exitedCheckCount++;
|
|
48
|
+
if (this.exitedCheckCount >= this.EXITED_CHECKS_REQUIRED) {
|
|
49
|
+
this.state = 'exited';
|
|
50
|
+
this.stopMonitoring();
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}, 1000);
|
|
54
|
+
}
|
|
55
|
+
async attachLogStream() {
|
|
56
|
+
try {
|
|
57
|
+
this.currentLogStream = await this.container.logs({
|
|
58
|
+
stdout: true,
|
|
59
|
+
stderr: true,
|
|
60
|
+
follow: true,
|
|
61
|
+
timestamps: true,
|
|
62
|
+
since: this.lastLogTimestamp + 1,
|
|
63
|
+
abortSignal: this.controller.signal,
|
|
64
|
+
});
|
|
65
|
+
this.currentLogStream.on('data', (data) => {
|
|
66
|
+
const { log, type, timestamp } = parseBuffer(data);
|
|
67
|
+
if (!log)
|
|
68
|
+
return;
|
|
69
|
+
this.lastLogTimestamp = Math.floor(new Date(timestamp).getTime() / 1000);
|
|
70
|
+
this.emitter.emit('log', log, type, 'container', timestamp);
|
|
71
|
+
});
|
|
72
|
+
this.currentLogStream.on('close', () => {
|
|
73
|
+
this.currentLogStream = null;
|
|
74
|
+
if (this.state === 'running' && !this.controller.signal.aborted) {
|
|
75
|
+
setTimeout(() => this.attachLogStream(), 100);
|
|
76
|
+
}
|
|
77
|
+
});
|
|
78
|
+
// Clean up on abort
|
|
79
|
+
const abortHandler = () => {
|
|
80
|
+
this.currentLogStream?.removeAllListeners();
|
|
81
|
+
if (this.currentLogStream &&
|
|
82
|
+
'destroy' in this.currentLogStream &&
|
|
83
|
+
typeof this.currentLogStream.destroy === 'function') {
|
|
84
|
+
this.currentLogStream.destroy();
|
|
85
|
+
}
|
|
86
|
+
this.currentLogStream = null;
|
|
87
|
+
};
|
|
88
|
+
this.controller.signal.addEventListener('abort', abortHandler, {
|
|
89
|
+
once: true,
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
catch (error) {
|
|
93
|
+
if (this.state === 'running' && !this.controller.signal.aborted) {
|
|
94
|
+
setTimeout(() => this.attachLogStream(), 1000);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
async waitForExit() {
|
|
99
|
+
return new Promise((resolve) => {
|
|
100
|
+
const checkInterval = setInterval(() => {
|
|
101
|
+
if (this.state === 'exited' || this.controller.signal.aborted) {
|
|
102
|
+
clearInterval(checkInterval);
|
|
103
|
+
resolve();
|
|
104
|
+
}
|
|
105
|
+
}, 500);
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
stopMonitoring() {
|
|
109
|
+
if (this.pollingInterval) {
|
|
110
|
+
clearInterval(this.pollingInterval);
|
|
111
|
+
this.pollingInterval = null;
|
|
112
|
+
}
|
|
113
|
+
if (this.currentLogStream) {
|
|
114
|
+
this.currentLogStream.removeAllListeners();
|
|
115
|
+
if ('destroy' in this.currentLogStream &&
|
|
116
|
+
typeof this.currentLogStream.destroy === 'function') {
|
|
117
|
+
this.currentLogStream.destroy();
|
|
118
|
+
}
|
|
119
|
+
this.currentLogStream = null;
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
import { ExposedPort } from '@nosana/sdk';
|
|
3
|
+
import Dockerode from 'dockerode';
|
|
4
|
+
import EventEmitter from 'events';
|
|
5
|
+
export declare class ExposedPortHealthCheck {
|
|
6
|
+
private exposedPortMap;
|
|
7
|
+
private frpcContainer;
|
|
8
|
+
private containerName;
|
|
9
|
+
private startupIntervalMs;
|
|
10
|
+
private continuousIntervalMs;
|
|
11
|
+
/**
|
|
12
|
+
* Tracks job previous state to show change in state of job mainly when going from failed to success.
|
|
13
|
+
*/
|
|
14
|
+
private healthStatus;
|
|
15
|
+
private jobEmitter;
|
|
16
|
+
private intervals;
|
|
17
|
+
private flowId;
|
|
18
|
+
constructor(flowId: string, frpcContainer: Dockerode.Container, jobEmitter: EventEmitter, containerName: string, startupIntervalMs?: number, continuousIntervalMs?: number);
|
|
19
|
+
addExposedPortsMap(exposedPortMap: Map<string, ExposedPort>): void;
|
|
20
|
+
startServiceExposedUrlHealthCheck(): void;
|
|
21
|
+
private startStartupHealthCheck;
|
|
22
|
+
private startContinuousHealthCheck;
|
|
23
|
+
stopHealthCheckForId(id: string): void;
|
|
24
|
+
stopAllHealthChecks(): void;
|
|
25
|
+
private checkPortHealth;
|
|
26
|
+
private runHttpHealthCheck;
|
|
27
|
+
private runWebSocketHealthCheck;
|
|
28
|
+
private execCommand;
|
|
29
|
+
}
|