@omnitron-dev/omnitron 0.2.0 → 0.3.1
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 +4 -0
- package/dist/BUILD.json +5 -0
- package/dist/cli/omnitron.js +375 -29
- package/dist/cli/omnitron.js.map +1 -1
- package/dist/cluster/cluster.rpc-service.d.ts +40 -0
- package/dist/cluster/cluster.rpc-service.d.ts.map +1 -1
- package/dist/cluster/cluster.rpc-service.js +49 -3
- package/dist/cluster/cluster.rpc-service.js.map +1 -1
- package/dist/cluster/config-sync.d.ts.map +1 -1
- package/dist/cluster/config-sync.js.map +1 -1
- package/dist/cluster/leader-election.d.ts +90 -2
- package/dist/cluster/leader-election.d.ts.map +1 -1
- package/dist/cluster/leader-election.js +176 -22
- package/dist/cluster/leader-election.js.map +1 -1
- package/dist/cluster/mesh-link.d.ts +136 -0
- package/dist/cluster/mesh-link.d.ts.map +1 -0
- package/dist/cluster/mesh-link.js +212 -0
- package/dist/cluster/mesh-link.js.map +1 -0
- package/dist/cluster/mesh.d.ts +59 -0
- package/dist/cluster/mesh.d.ts.map +1 -0
- package/dist/cluster/mesh.js +117 -0
- package/dist/cluster/mesh.js.map +1 -0
- package/dist/cluster/slave-connector.d.ts +193 -9
- package/dist/cluster/slave-connector.d.ts.map +1 -1
- package/dist/cluster/slave-connector.js +409 -37
- package/dist/cluster/slave-connector.js.map +1 -1
- package/dist/commands/audit.d.ts +65 -0
- package/dist/commands/audit.d.ts.map +1 -0
- package/dist/commands/audit.js +233 -0
- package/dist/commands/audit.js.map +1 -0
- package/dist/commands/backup.d.ts +4 -0
- package/dist/commands/backup.d.ts.map +1 -1
- package/dist/commands/backup.js +255 -33
- package/dist/commands/backup.js.map +1 -1
- package/dist/commands/cluster.d.ts.map +1 -1
- package/dist/commands/cluster.js +78 -47
- package/dist/commands/cluster.js.map +1 -1
- package/dist/commands/daemon-cmd.d.ts +7 -1
- package/dist/commands/daemon-cmd.d.ts.map +1 -1
- package/dist/commands/daemon-cmd.js +87 -21
- package/dist/commands/daemon-cmd.js.map +1 -1
- package/dist/commands/daemon-required.d.ts +34 -0
- package/dist/commands/daemon-required.d.ts.map +1 -0
- package/dist/commands/daemon-required.js +92 -0
- package/dist/commands/daemon-required.js.map +1 -0
- package/dist/commands/deploy.d.ts +70 -8
- package/dist/commands/deploy.d.ts.map +1 -1
- package/dist/commands/deploy.js +99 -64
- package/dist/commands/deploy.js.map +1 -1
- package/dist/commands/discover.d.ts +25 -4
- package/dist/commands/discover.d.ts.map +1 -1
- package/dist/commands/discover.js +155 -102
- package/dist/commands/discover.js.map +1 -1
- package/dist/commands/doctor.d.ts +293 -0
- package/dist/commands/doctor.d.ts.map +1 -0
- package/dist/commands/doctor.js +1706 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/env.d.ts +8 -1
- package/dist/commands/env.d.ts.map +1 -1
- package/dist/commands/env.js +13 -8
- package/dist/commands/env.js.map +1 -1
- package/dist/commands/exec.d.ts.map +1 -1
- package/dist/commands/exec.js +3 -2
- package/dist/commands/exec.js.map +1 -1
- package/dist/commands/fleet-asking.d.ts +87 -0
- package/dist/commands/fleet-asking.d.ts.map +1 -0
- package/dist/commands/fleet-asking.js +176 -0
- package/dist/commands/fleet-asking.js.map +1 -0
- package/dist/commands/fleet-recover.d.ts +2 -0
- package/dist/commands/fleet-recover.d.ts.map +1 -0
- package/dist/commands/fleet-recover.js +30 -0
- package/dist/commands/fleet-recover.js.map +1 -0
- package/dist/commands/fleet.d.ts +18 -0
- package/dist/commands/fleet.d.ts.map +1 -1
- package/dist/commands/fleet.js +314 -74
- package/dist/commands/fleet.js.map +1 -1
- package/dist/commands/health-check.d.ts +8 -6
- package/dist/commands/health-check.d.ts.map +1 -1
- package/dist/commands/health-check.js +26 -23
- package/dist/commands/health-check.js.map +1 -1
- package/dist/commands/health.d.ts.map +1 -1
- package/dist/commands/health.js +22 -8
- package/dist/commands/health.js.map +1 -1
- package/dist/commands/host-ingress.d.ts +3 -0
- package/dist/commands/host-ingress.d.ts.map +1 -0
- package/dist/commands/host-ingress.js +31 -0
- package/dist/commands/host-ingress.js.map +1 -0
- package/dist/commands/infra.d.ts +42 -1
- package/dist/commands/infra.d.ts.map +1 -1
- package/dist/commands/infra.js +418 -49
- package/dist/commands/infra.js.map +1 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +21 -36
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/inspect-graph.d.ts.map +1 -1
- package/dist/commands/inspect-graph.js +2 -6
- package/dist/commands/inspect-graph.js.map +1 -1
- package/dist/commands/inspect.d.ts.map +1 -1
- package/dist/commands/inspect.js +110 -14
- package/dist/commands/inspect.js.map +1 -1
- package/dist/commands/k8s.d.ts.map +1 -1
- package/dist/commands/k8s.js +23 -18
- package/dist/commands/k8s.js.map +1 -1
- package/dist/commands/kb.d.ts.map +1 -1
- package/dist/commands/kb.js +88 -29
- package/dist/commands/kb.js.map +1 -1
- package/dist/commands/list.d.ts.map +1 -1
- package/dist/commands/list.js +21 -9
- package/dist/commands/list.js.map +1 -1
- package/dist/commands/log-health.d.ts +120 -0
- package/dist/commands/log-health.d.ts.map +1 -0
- package/dist/commands/log-health.js +212 -0
- package/dist/commands/log-health.js.map +1 -0
- package/dist/commands/logs.d.ts +96 -2
- package/dist/commands/logs.d.ts.map +1 -1
- package/dist/commands/logs.js +522 -196
- package/dist/commands/logs.js.map +1 -1
- package/dist/commands/metrics.d.ts.map +1 -1
- package/dist/commands/metrics.js +35 -17
- package/dist/commands/metrics.js.map +1 -1
- package/dist/commands/monit.d.ts.map +1 -1
- package/dist/commands/monit.js +3 -2
- package/dist/commands/monit.js.map +1 -1
- package/dist/commands/node.d.ts +56 -0
- package/dist/commands/node.d.ts.map +1 -1
- package/dist/commands/node.js +297 -69
- package/dist/commands/node.js.map +1 -1
- package/dist/commands/output.d.ts +10 -0
- package/dist/commands/output.d.ts.map +1 -1
- package/dist/commands/output.js +41 -1
- package/dist/commands/output.js.map +1 -1
- package/dist/commands/pipeline.d.ts.map +1 -1
- package/dist/commands/pipeline.js +33 -19
- package/dist/commands/pipeline.js.map +1 -1
- package/dist/commands/project.d.ts +19 -0
- package/dist/commands/project.d.ts.map +1 -1
- package/dist/commands/project.js +125 -27
- package/dist/commands/project.js.map +1 -1
- package/dist/commands/release-store.d.ts +28 -0
- package/dist/commands/release-store.d.ts.map +1 -0
- package/dist/commands/release-store.js +158 -0
- package/dist/commands/release-store.js.map +1 -0
- package/dist/commands/release.d.ts +61 -0
- package/dist/commands/release.d.ts.map +1 -0
- package/dist/commands/release.js +555 -0
- package/dist/commands/release.js.map +1 -0
- package/dist/commands/reload.d.ts +16 -0
- package/dist/commands/reload.d.ts.map +1 -1
- package/dist/commands/reload.js +21 -5
- package/dist/commands/reload.js.map +1 -1
- package/dist/commands/remote.d.ts +40 -0
- package/dist/commands/remote.d.ts.map +1 -1
- package/dist/commands/remote.js +146 -35
- package/dist/commands/remote.js.map +1 -1
- package/dist/commands/restart.d.ts +16 -0
- package/dist/commands/restart.d.ts.map +1 -1
- package/dist/commands/restart.js +21 -5
- package/dist/commands/restart.js.map +1 -1
- package/dist/commands/scale.d.ts.map +1 -1
- package/dist/commands/scale.js +4 -3
- package/dist/commands/scale.js.map +1 -1
- package/dist/commands/secret.d.ts +54 -0
- package/dist/commands/secret.d.ts.map +1 -1
- package/dist/commands/secret.js +236 -34
- package/dist/commands/secret.js.map +1 -1
- package/dist/commands/service-units.d.ts +181 -0
- package/dist/commands/service-units.d.ts.map +1 -0
- package/dist/commands/service-units.js +291 -0
- package/dist/commands/service-units.js.map +1 -0
- package/dist/commands/service.d.ts +39 -0
- package/dist/commands/service.d.ts.map +1 -0
- package/dist/commands/service.js +370 -0
- package/dist/commands/service.js.map +1 -0
- package/dist/commands/spinner.d.ts +29 -0
- package/dist/commands/spinner.d.ts.map +1 -0
- package/dist/commands/spinner.js +44 -0
- package/dist/commands/spinner.js.map +1 -0
- package/dist/commands/stack.d.ts +49 -1
- package/dist/commands/stack.d.ts.map +1 -1
- package/dist/commands/stack.js +325 -12
- package/dist/commands/stack.js.map +1 -1
- package/dist/commands/start.d.ts +16 -0
- package/dist/commands/start.d.ts.map +1 -1
- package/dist/commands/start.js +20 -3
- package/dist/commands/start.js.map +1 -1
- package/dist/commands/status.d.ts +9 -0
- package/dist/commands/status.d.ts.map +1 -1
- package/dist/commands/status.js +45 -29
- package/dist/commands/status.js.map +1 -1
- package/dist/commands/stop.d.ts +16 -0
- package/dist/commands/stop.d.ts.map +1 -1
- package/dist/commands/stop.js +34 -6
- package/dist/commands/stop.js.map +1 -1
- package/dist/commands/tor.d.ts +14 -7
- package/dist/commands/tor.d.ts.map +1 -1
- package/dist/commands/tor.js +113 -33
- package/dist/commands/tor.js.map +1 -1
- package/dist/commands/up.d.ts +85 -1
- package/dist/commands/up.d.ts.map +1 -1
- package/dist/commands/up.js +180 -32
- package/dist/commands/up.js.map +1 -1
- package/dist/commands/webapp.d.ts.map +1 -1
- package/dist/commands/webapp.js +2 -1
- package/dist/commands/webapp.js.map +1 -1
- package/dist/config/defaults.d.ts +16 -0
- package/dist/config/defaults.d.ts.map +1 -1
- package/dist/config/defaults.js +26 -3
- package/dist/config/defaults.js.map +1 -1
- package/dist/config/define-ecosystem.d.ts.map +1 -1
- package/dist/config/define-ecosystem.js +2 -0
- package/dist/config/define-ecosystem.js.map +1 -1
- package/dist/config/index.d.ts +1 -1
- package/dist/config/index.d.ts.map +1 -1
- package/dist/config/index.js +1 -1
- package/dist/config/index.js.map +1 -1
- package/dist/config/loader.d.ts +45 -1
- package/dist/config/loader.d.ts.map +1 -1
- package/dist/config/loader.js +64 -6
- package/dist/config/loader.js.map +1 -1
- package/dist/config/omnitron-config.schema.d.ts.map +1 -1
- package/dist/config/omnitron-config.schema.js +16 -0
- package/dist/config/omnitron-config.schema.js.map +1 -1
- package/dist/config/types.d.ts +416 -44
- package/dist/config/types.d.ts.map +1 -1
- package/dist/daemon/config-reload.d.ts +27 -0
- package/dist/daemon/config-reload.d.ts.map +1 -0
- package/dist/daemon/config-reload.js +42 -0
- package/dist/daemon/config-reload.js.map +1 -0
- package/dist/daemon/daemon-client.d.ts +136 -2
- package/dist/daemon/daemon-client.d.ts.map +1 -1
- package/dist/daemon/daemon-client.js +307 -21
- package/dist/daemon/daemon-client.js.map +1 -1
- package/dist/daemon/daemon-entry.js +90 -30
- package/dist/daemon/daemon-entry.js.map +1 -1
- package/dist/daemon/daemon-scheduler.d.ts +4 -0
- package/dist/daemon/daemon-scheduler.d.ts.map +1 -1
- package/dist/daemon/daemon-scheduler.js +137 -7
- package/dist/daemon/daemon-scheduler.js.map +1 -1
- package/dist/daemon/daemon-state-store.service.d.ts +263 -0
- package/dist/daemon/daemon-state-store.service.d.ts.map +1 -0
- package/dist/daemon/daemon-state-store.service.js +446 -0
- package/dist/daemon/daemon-state-store.service.js.map +1 -0
- package/dist/daemon/daemon.d.ts +194 -4
- package/dist/daemon/daemon.d.ts.map +1 -1
- package/dist/daemon/daemon.js +1160 -157
- package/dist/daemon/daemon.js.map +1 -1
- package/dist/daemon/daemon.module.d.ts.map +1 -1
- package/dist/daemon/daemon.module.js +163 -85
- package/dist/daemon/daemon.module.js.map +1 -1
- package/dist/daemon/daemon.rpc-service.d.ts +90 -1
- package/dist/daemon/daemon.rpc-service.d.ts.map +1 -1
- package/dist/daemon/daemon.rpc-service.js +439 -97
- package/dist/daemon/daemon.rpc-service.js.map +1 -1
- package/dist/daemon/pid-manager.d.ts +16 -3
- package/dist/daemon/pid-manager.d.ts.map +1 -1
- package/dist/daemon/pid-manager.js +31 -4
- package/dist/daemon/pid-manager.js.map +1 -1
- package/dist/daemon/spawn-daemon.d.ts +73 -0
- package/dist/daemon/spawn-daemon.d.ts.map +1 -0
- package/dist/daemon/spawn-daemon.js +101 -0
- package/dist/daemon/spawn-daemon.js.map +1 -0
- package/dist/daemon/state-store.d.ts +65 -3
- package/dist/daemon/state-store.d.ts.map +1 -1
- package/dist/daemon/state-store.js +100 -58
- package/dist/daemon/state-store.js.map +1 -1
- package/dist/database/connection.d.ts +71 -0
- package/dist/database/connection.d.ts.map +1 -0
- package/dist/database/connection.js +129 -0
- package/dist/database/connection.js.map +1 -0
- package/dist/database/dialect.d.ts +60 -0
- package/dist/database/dialect.d.ts.map +1 -0
- package/dist/database/dialect.js +80 -0
- package/dist/database/dialect.js.map +1 -0
- package/dist/database/migrate.d.ts +5 -2
- package/dist/database/migrate.d.ts.map +1 -1
- package/dist/database/migrate.js +23 -33
- package/dist/database/migrate.js.map +1 -1
- package/dist/database/migration-runner.d.ts +50 -0
- package/dist/database/migration-runner.d.ts.map +1 -0
- package/dist/database/migration-runner.js +143 -0
- package/dist/database/migration-runner.js.map +1 -0
- package/dist/database/migrations/006_login_throttle.d.ts +17 -0
- package/dist/database/migrations/006_login_throttle.d.ts.map +1 -0
- package/dist/database/migrations/006_login_throttle.js +33 -0
- package/dist/database/migrations/006_login_throttle.js.map +1 -0
- package/dist/database/migrations/007_sync_ingested.d.ts +21 -0
- package/dist/database/migrations/007_sync_ingested.d.ts.map +1 -0
- package/dist/database/migrations/007_sync_ingested.js +39 -0
- package/dist/database/migrations/007_sync_ingested.js.map +1 -0
- package/dist/database/migrations/008_node_health_version_text.d.ts +24 -0
- package/dist/database/migrations/008_node_health_version_text.d.ts.map +1 -0
- package/dist/database/migrations/008_node_health_version_text.js +35 -0
- package/dist/database/migrations/008_node_health_version_text.js.map +1 -0
- package/dist/database/migrations/009_node_health_unmeasured.d.ts +40 -0
- package/dist/database/migrations/009_node_health_unmeasured.d.ts.map +1 -0
- package/dist/database/migrations/009_node_health_unmeasured.js +63 -0
- package/dist/database/migrations/009_node_health_unmeasured.js.map +1 -0
- package/dist/database/migrations/010_metrics_raw_had_no_reader.d.ts +22 -0
- package/dist/database/migrations/010_metrics_raw_had_no_reader.d.ts.map +1 -0
- package/dist/database/migrations/010_metrics_raw_had_no_reader.js +26 -0
- package/dist/database/migrations/010_metrics_raw_had_no_reader.js.map +1 -0
- package/dist/database/migrations/011_alerts_nobody_had_to_write.d.ts +56 -0
- package/dist/database/migrations/011_alerts_nobody_had_to_write.d.ts.map +1 -0
- package/dist/database/migrations/011_alerts_nobody_had_to_write.js +79 -0
- package/dist/database/migrations/011_alerts_nobody_had_to_write.js.map +1 -0
- package/dist/database/migrations/012_a_disk_nobody_watched.d.ts +26 -0
- package/dist/database/migrations/012_a_disk_nobody_watched.d.ts.map +1 -0
- package/dist/database/migrations/012_a_disk_nobody_watched.js +40 -0
- package/dist/database/migrations/012_a_disk_nobody_watched.js.map +1 -0
- package/dist/database/migrations/013_an_alarm_delivered.d.ts +14 -0
- package/dist/database/migrations/013_an_alarm_delivered.d.ts.map +1 -0
- package/dist/database/migrations/013_an_alarm_delivered.js +28 -0
- package/dist/database/migrations/013_an_alarm_delivered.js.map +1 -0
- package/dist/database/migrations/index.d.ts +21 -0
- package/dist/database/migrations/index.d.ts.map +1 -0
- package/dist/database/migrations/index.js +47 -0
- package/dist/database/migrations/index.js.map +1 -0
- package/dist/database/schema.d.ts +27 -11
- package/dist/database/schema.d.ts.map +1 -1
- package/dist/database/sqlite-date-binding.d.ts +71 -0
- package/dist/database/sqlite-date-binding.d.ts.map +1 -0
- package/dist/database/sqlite-date-binding.js +174 -0
- package/dist/database/sqlite-date-binding.js.map +1 -0
- package/dist/execution/data-channel.d.ts +48 -0
- package/dist/execution/data-channel.d.ts.map +1 -0
- package/dist/execution/data-channel.js +55 -0
- package/dist/execution/data-channel.js.map +1 -0
- package/dist/execution/execution.service.d.ts +146 -0
- package/dist/execution/execution.service.d.ts.map +1 -1
- package/dist/execution/execution.service.js +330 -10
- package/dist/execution/execution.service.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/infrastructure/bare-metal-plan.d.ts +208 -0
- package/dist/infrastructure/bare-metal-plan.d.ts.map +1 -0
- package/dist/infrastructure/bare-metal-plan.js +363 -0
- package/dist/infrastructure/bare-metal-plan.js.map +1 -0
- package/dist/infrastructure/bare-metal-runner.d.ts +65 -0
- package/dist/infrastructure/bare-metal-runner.d.ts.map +1 -0
- package/dist/infrastructure/bare-metal-runner.js +354 -0
- package/dist/infrastructure/bare-metal-runner.js.map +1 -0
- package/dist/infrastructure/config-payload.d.ts +149 -0
- package/dist/infrastructure/config-payload.d.ts.map +1 -0
- package/dist/infrastructure/config-payload.js +235 -0
- package/dist/infrastructure/config-payload.js.map +1 -0
- package/dist/infrastructure/container-runtime.d.ts +170 -10
- package/dist/infrastructure/container-runtime.d.ts.map +1 -1
- package/dist/infrastructure/container-runtime.js +565 -52
- package/dist/infrastructure/container-runtime.js.map +1 -1
- package/dist/infrastructure/gateway-reachability.d.ts +85 -0
- package/dist/infrastructure/gateway-reachability.d.ts.map +1 -0
- package/dist/infrastructure/gateway-reachability.js +116 -0
- package/dist/infrastructure/gateway-reachability.js.map +1 -0
- package/dist/infrastructure/gateway-redis-db.d.ts +29 -0
- package/dist/infrastructure/gateway-redis-db.d.ts.map +1 -0
- package/dist/infrastructure/gateway-redis-db.js +32 -0
- package/dist/infrastructure/gateway-redis-db.js.map +1 -0
- package/dist/infrastructure/host-ingress-config.d.ts +12 -0
- package/dist/infrastructure/host-ingress-config.d.ts.map +1 -0
- package/dist/infrastructure/host-ingress-config.js +197 -0
- package/dist/infrastructure/host-ingress-config.js.map +1 -0
- package/dist/infrastructure/host-ingress-lock.d.ts +4 -0
- package/dist/infrastructure/host-ingress-lock.d.ts.map +1 -0
- package/dist/infrastructure/host-ingress-lock.js +36 -0
- package/dist/infrastructure/host-ingress-lock.js.map +1 -0
- package/dist/infrastructure/host-ingress-runtime.d.ts +25 -0
- package/dist/infrastructure/host-ingress-runtime.d.ts.map +1 -0
- package/dist/infrastructure/host-ingress-runtime.js +114 -0
- package/dist/infrastructure/host-ingress-runtime.js.map +1 -0
- package/dist/infrastructure/host-ingress-takeover.d.ts +18 -0
- package/dist/infrastructure/host-ingress-takeover.d.ts.map +1 -0
- package/dist/infrastructure/host-ingress-takeover.js +142 -0
- package/dist/infrastructure/host-ingress-takeover.js.map +1 -0
- package/dist/infrastructure/host-ingress-types.d.ts +173 -0
- package/dist/infrastructure/host-ingress-types.d.ts.map +1 -0
- package/dist/infrastructure/host-ingress-types.js +2 -0
- package/dist/infrastructure/host-ingress-types.js.map +1 -0
- package/dist/infrastructure/host-ingress.service.d.ts +47 -0
- package/dist/infrastructure/host-ingress.service.d.ts.map +1 -0
- package/dist/infrastructure/host-ingress.service.js +514 -0
- package/dist/infrastructure/host-ingress.service.js.map +1 -0
- package/dist/infrastructure/host-inspection.d.ts +223 -0
- package/dist/infrastructure/host-inspection.d.ts.map +1 -0
- package/dist/infrastructure/host-inspection.js +501 -0
- package/dist/infrastructure/host-inspection.js.map +1 -0
- package/dist/infrastructure/infrastructure-gate.d.ts.map +1 -1
- package/dist/infrastructure/infrastructure.service.d.ts +223 -7
- package/dist/infrastructure/infrastructure.service.d.ts.map +1 -1
- package/dist/infrastructure/infrastructure.service.js +500 -93
- package/dist/infrastructure/infrastructure.service.js.map +1 -1
- package/dist/infrastructure/known-machines.d.ts +76 -0
- package/dist/infrastructure/known-machines.d.ts.map +1 -0
- package/dist/infrastructure/known-machines.js +94 -0
- package/dist/infrastructure/known-machines.js.map +1 -0
- package/dist/infrastructure/node-credentials.d.ts +45 -0
- package/dist/infrastructure/node-credentials.d.ts.map +1 -0
- package/dist/infrastructure/node-credentials.js +80 -0
- package/dist/infrastructure/node-credentials.js.map +1 -0
- package/dist/infrastructure/orphan-containers.d.ts +99 -0
- package/dist/infrastructure/orphan-containers.d.ts.map +1 -0
- package/dist/infrastructure/orphan-containers.js +106 -0
- package/dist/infrastructure/orphan-containers.js.map +1 -0
- package/dist/infrastructure/phantom-endpoint-janitor.d.ts +20 -0
- package/dist/infrastructure/phantom-endpoint-janitor.d.ts.map +1 -1
- package/dist/infrastructure/phantom-endpoint-janitor.js +56 -6
- package/dist/infrastructure/phantom-endpoint-janitor.js.map +1 -1
- package/dist/infrastructure/presets/gateway-openresty.d.ts.map +1 -1
- package/dist/infrastructure/presets/gateway-openresty.js +29 -3
- package/dist/infrastructure/presets/gateway-openresty.js.map +1 -1
- package/dist/infrastructure/presets/minio.d.ts.map +1 -1
- package/dist/infrastructure/presets/minio.js +36 -3
- package/dist/infrastructure/presets/minio.js.map +1 -1
- package/dist/infrastructure/presets/postgres.d.ts.map +1 -1
- package/dist/infrastructure/presets/postgres.js +69 -2
- package/dist/infrastructure/presets/postgres.js.map +1 -1
- package/dist/infrastructure/presets/redis.d.ts.map +1 -1
- package/dist/infrastructure/presets/redis.js +13 -0
- package/dist/infrastructure/presets/redis.js.map +1 -1
- package/dist/infrastructure/presets/registry.d.ts.map +1 -1
- package/dist/infrastructure/presets/registry.js +81 -12
- package/dist/infrastructure/presets/registry.js.map +1 -1
- package/dist/infrastructure/presets/tor.d.ts +38 -0
- package/dist/infrastructure/presets/tor.d.ts.map +1 -1
- package/dist/infrastructure/presets/tor.js +78 -69
- package/dist/infrastructure/presets/tor.js.map +1 -1
- package/dist/infrastructure/presets/torrc.d.ts +54 -0
- package/dist/infrastructure/presets/torrc.d.ts.map +1 -0
- package/dist/infrastructure/presets/torrc.js +153 -0
- package/dist/infrastructure/presets/torrc.js.map +1 -0
- package/dist/infrastructure/presets/types.d.ts +17 -0
- package/dist/infrastructure/presets/types.d.ts.map +1 -1
- package/dist/infrastructure/provisioning-outcome.d.ts +85 -0
- package/dist/infrastructure/provisioning-outcome.d.ts.map +1 -0
- package/dist/infrastructure/provisioning-outcome.js +122 -0
- package/dist/infrastructure/provisioning-outcome.js.map +1 -0
- package/dist/infrastructure/server-registry.d.ts +27 -0
- package/dist/infrastructure/server-registry.d.ts.map +1 -1
- package/dist/infrastructure/server-registry.js +60 -5
- package/dist/infrastructure/server-registry.js.map +1 -1
- package/dist/infrastructure/service-binding.d.ts +60 -0
- package/dist/infrastructure/service-binding.d.ts.map +1 -0
- package/dist/infrastructure/service-binding.js +90 -0
- package/dist/infrastructure/service-binding.js.map +1 -0
- package/dist/infrastructure/service-credentials.d.ts +105 -0
- package/dist/infrastructure/service-credentials.d.ts.map +1 -0
- package/dist/infrastructure/service-credentials.js +141 -0
- package/dist/infrastructure/service-credentials.js.map +1 -0
- package/dist/infrastructure/service-resolver.d.ts +166 -12
- package/dist/infrastructure/service-resolver.d.ts.map +1 -1
- package/dist/infrastructure/service-resolver.js +535 -82
- package/dist/infrastructure/service-resolver.js.map +1 -1
- package/dist/infrastructure/shipped-config.d.ts +43 -0
- package/dist/infrastructure/shipped-config.d.ts.map +1 -0
- package/dist/infrastructure/shipped-config.js +159 -0
- package/dist/infrastructure/shipped-config.js.map +1 -0
- package/dist/infrastructure/stack-infra-manager.d.ts +16 -1
- package/dist/infrastructure/stack-infra-manager.d.ts.map +1 -1
- package/dist/infrastructure/stack-infra-manager.js +81 -53
- package/dist/infrastructure/stack-infra-manager.js.map +1 -1
- package/dist/infrastructure/types.d.ts +263 -6
- package/dist/infrastructure/types.d.ts.map +1 -1
- package/dist/mcp/mcp-bridge.d.ts.map +1 -1
- package/dist/mcp/mcp-bridge.js.map +1 -1
- package/dist/mcp/tool-groups/apps.tools.d.ts +2 -1
- package/dist/mcp/tool-groups/apps.tools.d.ts.map +1 -1
- package/dist/mcp/tool-groups/apps.tools.js +2 -2
- package/dist/mcp/tool-groups/apps.tools.js.map +1 -1
- package/dist/mcp/tool-groups/infra.tools.d.ts +16 -2
- package/dist/mcp/tool-groups/infra.tools.d.ts.map +1 -1
- package/dist/mcp/tool-groups/infra.tools.js +51 -41
- package/dist/mcp/tool-groups/infra.tools.js.map +1 -1
- package/dist/mcp/tool-groups/kb.tools.d.ts.map +1 -1
- package/dist/mcp/tool-groups/kb.tools.js +4 -6
- package/dist/mcp/tool-groups/kb.tools.js.map +1 -1
- package/dist/mcp/tool-groups/management.tools.d.ts +20 -3
- package/dist/mcp/tool-groups/management.tools.d.ts.map +1 -1
- package/dist/mcp/tool-groups/management.tools.js +158 -125
- package/dist/mcp/tool-groups/management.tools.js.map +1 -1
- package/dist/mcp/tool-groups/monitoring.tools.d.ts +10 -1
- package/dist/mcp/tool-groups/monitoring.tools.d.ts.map +1 -1
- package/dist/mcp/tool-groups/monitoring.tools.js +65 -18
- package/dist/mcp/tool-groups/monitoring.tools.js.map +1 -1
- package/dist/mcp/unavailable-tools.d.ts +35 -0
- package/dist/mcp/unavailable-tools.d.ts.map +1 -0
- package/dist/mcp/unavailable-tools.js +59 -0
- package/dist/mcp/unavailable-tools.js.map +1 -0
- package/dist/monitoring/app-health.indicator.d.ts.map +1 -1
- package/dist/monitoring/app-health.indicator.js +12 -0
- package/dist/monitoring/app-health.indicator.js.map +1 -1
- package/dist/monitoring/desktop-notifier.d.ts +26 -0
- package/dist/monitoring/desktop-notifier.d.ts.map +1 -0
- package/dist/monitoring/desktop-notifier.js +49 -0
- package/dist/monitoring/desktop-notifier.js.map +1 -0
- package/dist/monitoring/docker-health.indicator.d.ts +17 -1
- package/dist/monitoring/docker-health.indicator.d.ts.map +1 -1
- package/dist/monitoring/docker-health.indicator.js +38 -8
- package/dist/monitoring/docker-health.indicator.js.map +1 -1
- package/dist/monitoring/event-loop-stall.indicator.d.ts +26 -0
- package/dist/monitoring/event-loop-stall.indicator.d.ts.map +1 -0
- package/dist/monitoring/event-loop-stall.indicator.js +47 -0
- package/dist/monitoring/event-loop-stall.indicator.js.map +1 -0
- package/dist/monitoring/event-loop-watch.d.ts +124 -0
- package/dist/monitoring/event-loop-watch.d.ts.map +1 -0
- package/dist/monitoring/event-loop-watch.js +179 -0
- package/dist/monitoring/event-loop-watch.js.map +1 -0
- package/dist/monitoring/host-disk.d.ts +6 -0
- package/dist/monitoring/host-disk.d.ts.map +1 -0
- package/dist/monitoring/host-disk.js +26 -0
- package/dist/monitoring/host-disk.js.map +1 -0
- package/dist/monitoring/log-line.d.ts +188 -0
- package/dist/monitoring/log-line.d.ts.map +1 -0
- package/dist/monitoring/log-line.js +458 -0
- package/dist/monitoring/log-line.js.map +1 -0
- package/dist/monitoring/log-manager.d.ts +89 -8
- package/dist/monitoring/log-manager.d.ts.map +1 -1
- package/dist/monitoring/log-manager.js +246 -77
- package/dist/monitoring/log-manager.js.map +1 -1
- package/dist/observability/metrics-bridge.d.ts.map +1 -1
- package/dist/observability/metrics-server.d.ts.map +1 -1
- package/dist/operations.d.ts +16 -0
- package/dist/operations.d.ts.map +1 -0
- package/dist/operations.js +13 -0
- package/dist/operations.js.map +1 -0
- package/dist/orchestrator/app-handle.d.ts +157 -2
- package/dist/orchestrator/app-handle.d.ts.map +1 -1
- package/dist/orchestrator/app-handle.js +165 -3
- package/dist/orchestrator/app-handle.js.map +1 -1
- package/dist/orchestrator/app-health.d.ts +33 -0
- package/dist/orchestrator/app-health.d.ts.map +1 -0
- package/dist/orchestrator/app-health.js +74 -0
- package/dist/orchestrator/app-health.js.map +1 -0
- package/dist/orchestrator/app-traffic.d.ts +14 -0
- package/dist/orchestrator/app-traffic.d.ts.map +1 -0
- package/dist/orchestrator/app-traffic.js +33 -0
- package/dist/orchestrator/app-traffic.js.map +1 -0
- package/dist/orchestrator/bootstrap-loader-child.d.ts +19 -0
- package/dist/orchestrator/bootstrap-loader-child.d.ts.map +1 -0
- package/dist/orchestrator/bootstrap-loader-child.js +43 -0
- package/dist/orchestrator/bootstrap-loader-child.js.map +1 -0
- package/dist/orchestrator/bootstrap-loader.d.ts +72 -0
- package/dist/orchestrator/bootstrap-loader.d.ts.map +1 -1
- package/dist/orchestrator/bootstrap-loader.js +350 -5
- package/dist/orchestrator/bootstrap-loader.js.map +1 -1
- package/dist/orchestrator/bootstrap-process.d.ts +99 -4
- package/dist/orchestrator/bootstrap-process.d.ts.map +1 -1
- package/dist/orchestrator/bootstrap-process.js +332 -20
- package/dist/orchestrator/bootstrap-process.js.map +1 -1
- package/dist/orchestrator/build-service.d.ts +6 -12
- package/dist/orchestrator/build-service.d.ts.map +1 -1
- package/dist/orchestrator/build-service.js +120 -83
- package/dist/orchestrator/build-service.js.map +1 -1
- package/dist/orchestrator/call-exposed-service.d.ts +7 -0
- package/dist/orchestrator/call-exposed-service.d.ts.map +1 -0
- package/dist/orchestrator/call-exposed-service.js +50 -0
- package/dist/orchestrator/call-exposed-service.js.map +1 -0
- package/dist/orchestrator/classic-launcher.d.ts +1 -0
- package/dist/orchestrator/classic-launcher.d.ts.map +1 -1
- package/dist/orchestrator/classic-launcher.js +40 -4
- package/dist/orchestrator/classic-launcher.js.map +1 -1
- package/dist/orchestrator/file-watcher.d.ts +79 -1
- package/dist/orchestrator/file-watcher.d.ts.map +1 -1
- package/dist/orchestrator/file-watcher.js +193 -7
- package/dist/orchestrator/file-watcher.js.map +1 -1
- package/dist/orchestrator/http-routes.d.ts +4 -0
- package/dist/orchestrator/http-routes.d.ts.map +1 -0
- package/dist/orchestrator/http-routes.js +19 -0
- package/dist/orchestrator/http-routes.js.map +1 -0
- package/dist/orchestrator/module-worker-process.d.ts.map +1 -1
- package/dist/orchestrator/module-worker-process.js +10 -0
- package/dist/orchestrator/module-worker-process.js.map +1 -1
- package/dist/orchestrator/orchestrator.service.d.ts +385 -11
- package/dist/orchestrator/orchestrator.service.d.ts.map +1 -1
- package/dist/orchestrator/orchestrator.service.js +1738 -364
- package/dist/orchestrator/orchestrator.service.js.map +1 -1
- package/dist/orchestrator/owned-pids.d.ts +83 -0
- package/dist/orchestrator/owned-pids.d.ts.map +1 -0
- package/dist/orchestrator/owned-pids.js +93 -0
- package/dist/orchestrator/owned-pids.js.map +1 -0
- package/dist/orchestrator/port-conflict.d.ts +102 -0
- package/dist/orchestrator/port-conflict.d.ts.map +1 -0
- package/dist/orchestrator/port-conflict.js +131 -0
- package/dist/orchestrator/port-conflict.js.map +1 -0
- package/dist/orchestrator/process-janitor.d.ts +78 -4
- package/dist/orchestrator/process-janitor.d.ts.map +1 -1
- package/dist/orchestrator/process-janitor.js +246 -30
- package/dist/orchestrator/process-janitor.js.map +1 -1
- package/dist/orchestrator/ps-metrics.d.ts +37 -0
- package/dist/orchestrator/ps-metrics.d.ts.map +1 -0
- package/dist/orchestrator/ps-metrics.js +60 -0
- package/dist/orchestrator/ps-metrics.js.map +1 -0
- package/dist/orchestrator/service-router.d.ts +58 -2
- package/dist/orchestrator/service-router.d.ts.map +1 -1
- package/dist/orchestrator/service-router.js +157 -25
- package/dist/orchestrator/service-router.js.map +1 -1
- package/dist/orchestrator/topology-query.d.ts +49 -0
- package/dist/orchestrator/topology-query.d.ts.map +1 -0
- package/dist/orchestrator/topology-query.js +54 -0
- package/dist/orchestrator/topology-query.js.map +1 -0
- package/dist/project/artifact-builder.d.ts +174 -3
- package/dist/project/artifact-builder.d.ts.map +1 -1
- package/dist/project/artifact-builder.js +454 -42
- package/dist/project/artifact-builder.js.map +1 -1
- package/dist/project/build-decision.d.ts +58 -0
- package/dist/project/build-decision.d.ts.map +1 -0
- package/dist/project/build-decision.js +59 -0
- package/dist/project/build-decision.js.map +1 -0
- package/dist/project/config-resolver.d.ts +6 -4
- package/dist/project/config-resolver.d.ts.map +1 -1
- package/dist/project/config-resolver.js +128 -74
- package/dist/project/config-resolver.js.map +1 -1
- package/dist/project/declared-config.d.ts +42 -0
- package/dist/project/declared-config.d.ts.map +1 -0
- package/dist/project/declared-config.js +60 -0
- package/dist/project/declared-config.js.map +1 -0
- package/dist/project/dependency-analyzer.d.ts.map +1 -1
- package/dist/project/dependency-analyzer.js.map +1 -1
- package/dist/project/deploy-phases.d.ts +35 -0
- package/dist/project/deploy-phases.d.ts.map +1 -0
- package/dist/project/deploy-phases.js +75 -0
- package/dist/project/deploy-phases.js.map +1 -0
- package/dist/project/exec-in-group.d.ts +49 -0
- package/dist/project/exec-in-group.d.ts.map +1 -0
- package/dist/project/exec-in-group.js +100 -0
- package/dist/project/exec-in-group.js.map +1 -0
- package/dist/project/node-app-config.d.ts +101 -0
- package/dist/project/node-app-config.d.ts.map +1 -0
- package/dist/project/node-app-config.js +134 -0
- package/dist/project/node-app-config.js.map +1 -0
- package/dist/project/node-app-health.d.ts +76 -0
- package/dist/project/node-app-health.d.ts.map +1 -0
- package/dist/project/node-app-health.js +119 -0
- package/dist/project/node-app-health.js.map +1 -0
- package/dist/project/operator-account.d.ts +293 -0
- package/dist/project/operator-account.d.ts.map +1 -0
- package/dist/project/operator-account.js +373 -0
- package/dist/project/operator-account.js.map +1 -0
- package/dist/project/registry.d.ts +45 -8
- package/dist/project/registry.d.ts.map +1 -1
- package/dist/project/registry.js +214 -64
- package/dist/project/registry.js.map +1 -1
- package/dist/project/requirements-scanner.d.ts +1 -0
- package/dist/project/requirements-scanner.d.ts.map +1 -1
- package/dist/project/requirements-scanner.js +28 -3
- package/dist/project/requirements-scanner.js.map +1 -1
- package/dist/project/stack-env.d.ts +37 -0
- package/dist/project/stack-env.d.ts.map +1 -0
- package/dist/project/stack-env.js +85 -0
- package/dist/project/stack-env.js.map +1 -0
- package/dist/project/stand-containers.d.ts +11 -0
- package/dist/project/stand-containers.d.ts.map +1 -0
- package/dist/project/stand-containers.js +27 -0
- package/dist/project/stand-containers.js.map +1 -0
- package/dist/project/working-tree.d.ts +62 -0
- package/dist/project/working-tree.d.ts.map +1 -0
- package/dist/project/working-tree.js +101 -0
- package/dist/project/working-tree.js.map +1 -0
- package/dist/release/artifact-store.d.ts +360 -0
- package/dist/release/artifact-store.d.ts.map +1 -0
- package/dist/release/artifact-store.js +1040 -0
- package/dist/release/artifact-store.js.map +1 -0
- package/dist/release/attest-on-node.d.ts +93 -0
- package/dist/release/attest-on-node.d.ts.map +1 -0
- package/dist/release/attest-on-node.js +207 -0
- package/dist/release/attest-on-node.js.map +1 -0
- package/dist/release/attest.d.ts +135 -0
- package/dist/release/attest.d.ts.map +1 -0
- package/dist/release/attest.js +199 -0
- package/dist/release/attest.js.map +1 -0
- package/dist/release/build-run.d.ts +151 -0
- package/dist/release/build-run.d.ts.map +1 -0
- package/dist/release/build-run.js +609 -0
- package/dist/release/build-run.js.map +1 -0
- package/dist/release/builder.d.ts +57 -0
- package/dist/release/builder.d.ts.map +1 -0
- package/dist/release/builder.js +120 -0
- package/dist/release/builder.js.map +1 -0
- package/dist/release/daemon-omni.d.ts +41 -0
- package/dist/release/daemon-omni.d.ts.map +1 -0
- package/dist/release/daemon-omni.js +59 -0
- package/dist/release/daemon-omni.js.map +1 -0
- package/dist/release/definition-inputs.d.ts +34 -0
- package/dist/release/definition-inputs.d.ts.map +1 -0
- package/dist/release/definition-inputs.js +90 -0
- package/dist/release/definition-inputs.js.map +1 -0
- package/dist/release/delivered.d.ts +53 -0
- package/dist/release/delivered.d.ts.map +1 -0
- package/dist/release/delivered.js +81 -0
- package/dist/release/delivered.js.map +1 -0
- package/dist/release/layout.d.ts +61 -0
- package/dist/release/layout.d.ts.map +1 -0
- package/dist/release/layout.js +114 -0
- package/dist/release/layout.js.map +1 -0
- package/dist/release/load.d.ts +44 -0
- package/dist/release/load.d.ts.map +1 -0
- package/dist/release/load.js +84 -0
- package/dist/release/load.js.map +1 -0
- package/dist/release/manifest.d.ts +299 -0
- package/dist/release/manifest.d.ts.map +1 -0
- package/dist/release/manifest.js +176 -0
- package/dist/release/manifest.js.map +1 -0
- package/dist/release/migrations.d.ts +32 -0
- package/dist/release/migrations.d.ts.map +1 -0
- package/dist/release/migrations.js +51 -0
- package/dist/release/migrations.js.map +1 -0
- package/dist/release/publish.d.ts +71 -0
- package/dist/release/publish.d.ts.map +1 -0
- package/dist/release/publish.js +102 -0
- package/dist/release/publish.js.map +1 -0
- package/dist/release/store.d.ts +174 -0
- package/dist/release/store.d.ts.map +1 -0
- package/dist/release/store.js +257 -0
- package/dist/release/store.js.map +1 -0
- package/dist/services/alert.rpc-service.d.ts +11 -15
- package/dist/services/alert.rpc-service.d.ts.map +1 -1
- package/dist/services/alert.rpc-service.js +29 -14
- package/dist/services/alert.rpc-service.js.map +1 -1
- package/dist/services/alert.service.d.ts +96 -59
- package/dist/services/alert.service.d.ts.map +1 -1
- package/dist/services/alert.service.js +455 -70
- package/dist/services/alert.service.js.map +1 -1
- package/dist/services/anonymous-input.d.ts +26 -0
- package/dist/services/anonymous-input.d.ts.map +1 -0
- package/dist/services/anonymous-input.js +44 -0
- package/dist/services/anonymous-input.js.map +1 -0
- package/dist/services/audit.rpc-service.d.ts +27 -0
- package/dist/services/audit.rpc-service.d.ts.map +1 -0
- package/dist/services/audit.rpc-service.js +57 -0
- package/dist/services/audit.rpc-service.js.map +1 -0
- package/dist/services/audit.service.d.ts +165 -0
- package/dist/services/audit.service.d.ts.map +1 -0
- package/dist/services/audit.service.js +242 -0
- package/dist/services/audit.service.js.map +1 -0
- package/dist/services/auth-context.d.ts +21 -1
- package/dist/services/auth-context.d.ts.map +1 -1
- package/dist/services/auth-context.js +51 -5
- package/dist/services/auth-context.js.map +1 -1
- package/dist/services/auth.rpc-service.d.ts +0 -1
- package/dist/services/auth.rpc-service.d.ts.map +1 -1
- package/dist/services/auth.rpc-service.js +23 -9
- package/dist/services/auth.rpc-service.js.map +1 -1
- package/dist/services/auth.service.d.ts +47 -33
- package/dist/services/auth.service.d.ts.map +1 -1
- package/dist/services/auth.service.js +155 -23
- package/dist/services/auth.service.js.map +1 -1
- package/dist/services/backup-pipeline.d.ts +97 -0
- package/dist/services/backup-pipeline.d.ts.map +1 -0
- package/dist/services/backup-pipeline.js +286 -0
- package/dist/services/backup-pipeline.js.map +1 -0
- package/dist/services/backup-schedule.d.ts +69 -0
- package/dist/services/backup-schedule.d.ts.map +1 -0
- package/dist/services/backup-schedule.js +132 -0
- package/dist/services/backup-schedule.js.map +1 -0
- package/dist/services/backup.rpc-service.d.ts +31 -2
- package/dist/services/backup.rpc-service.d.ts.map +1 -1
- package/dist/services/backup.rpc-service.js +53 -0
- package/dist/services/backup.rpc-service.js.map +1 -1
- package/dist/services/backup.service.d.ts +458 -14
- package/dist/services/backup.service.d.ts.map +1 -1
- package/dist/services/backup.service.js +1368 -170
- package/dist/services/backup.service.js.map +1 -1
- package/dist/services/bundle-build-worker.d.ts +19 -0
- package/dist/services/bundle-build-worker.d.ts.map +1 -0
- package/dist/services/bundle-build-worker.js +40 -0
- package/dist/services/bundle-build-worker.js.map +1 -0
- package/dist/services/bundle-builder.d.ts +490 -0
- package/dist/services/bundle-builder.d.ts.map +1 -0
- package/dist/services/bundle-builder.js +1159 -0
- package/dist/services/bundle-builder.js.map +1 -0
- package/dist/services/bundle-worker-protocol.d.ts +19 -0
- package/dist/services/bundle-worker-protocol.d.ts.map +1 -0
- package/dist/services/bundle-worker-protocol.js +32 -0
- package/dist/services/bundle-worker-protocol.js.map +1 -0
- package/dist/services/deploy.rpc-service.d.ts +4 -1
- package/dist/services/deploy.rpc-service.d.ts.map +1 -1
- package/dist/services/deploy.rpc-service.js +10 -0
- package/dist/services/deploy.rpc-service.js.map +1 -1
- package/dist/services/deploy.service.d.ts +14 -24
- package/dist/services/deploy.service.d.ts.map +1 -1
- package/dist/services/deploy.service.js +46 -5
- package/dist/services/deploy.service.js.map +1 -1
- package/dist/services/discovery.rpc-service.d.ts +2 -1
- package/dist/services/discovery.rpc-service.d.ts.map +1 -1
- package/dist/services/discovery.rpc-service.js.map +1 -1
- package/dist/services/discovery.service.d.ts +32 -28
- package/dist/services/discovery.service.d.ts.map +1 -1
- package/dist/services/discovery.service.js +108 -133
- package/dist/services/discovery.service.js.map +1 -1
- package/dist/services/event-broadcaster.rpc-service.d.ts +36 -23
- package/dist/services/event-broadcaster.rpc-service.d.ts.map +1 -1
- package/dist/services/event-broadcaster.rpc-service.js +70 -32
- package/dist/services/event-broadcaster.rpc-service.js.map +1 -1
- package/dist/services/event-broadcaster.service.d.ts.map +1 -1
- package/dist/services/event-broadcaster.service.js.map +1 -1
- package/dist/services/fleet.rpc-service.d.ts +2 -1
- package/dist/services/fleet.rpc-service.d.ts.map +1 -1
- package/dist/services/fleet.rpc-service.js +3 -1
- package/dist/services/fleet.rpc-service.js.map +1 -1
- package/dist/services/fleet.service.d.ts +32 -34
- package/dist/services/fleet.service.d.ts.map +1 -1
- package/dist/services/fleet.service.js +66 -10
- package/dist/services/fleet.service.js.map +1 -1
- package/dist/services/health-check.rpc-service.d.ts +2 -1
- package/dist/services/health-check.rpc-service.d.ts.map +1 -1
- package/dist/services/health-check.rpc-service.js.map +1 -1
- package/dist/services/health-check.service.d.ts +50 -36
- package/dist/services/health-check.service.d.ts.map +1 -1
- package/dist/services/health-check.service.js +179 -182
- package/dist/services/health-check.service.js.map +1 -1
- package/dist/services/host-operation-barrier.d.ts +8 -0
- package/dist/services/host-operation-barrier.d.ts.map +1 -0
- package/dist/services/host-operation-barrier.js +44 -0
- package/dist/services/host-operation-barrier.js.map +1 -0
- package/dist/services/host-upgrade.d.ts +129 -0
- package/dist/services/host-upgrade.d.ts.map +1 -0
- package/dist/services/host-upgrade.js +352 -0
- package/dist/services/host-upgrade.js.map +1 -0
- package/dist/services/infrastructure.rpc-service.d.ts +312 -2
- package/dist/services/infrastructure.rpc-service.d.ts.map +1 -1
- package/dist/services/infrastructure.rpc-service.js +584 -11
- package/dist/services/infrastructure.rpc-service.js.map +1 -1
- package/dist/services/kubernetes.rpc-service.d.ts +2 -1
- package/dist/services/kubernetes.rpc-service.d.ts.map +1 -1
- package/dist/services/kubernetes.rpc-service.js.map +1 -1
- package/dist/services/kubernetes.service.d.ts +5 -39
- package/dist/services/kubernetes.service.d.ts.map +1 -1
- package/dist/services/kubernetes.service.js +29 -5
- package/dist/services/kubernetes.service.js.map +1 -1
- package/dist/services/local-bundle.d.ts +160 -0
- package/dist/services/local-bundle.d.ts.map +1 -0
- package/dist/services/local-bundle.js +242 -0
- package/dist/services/local-bundle.js.map +1 -0
- package/dist/services/lockout.d.ts +28 -0
- package/dist/services/lockout.d.ts.map +1 -0
- package/dist/services/lockout.js +41 -0
- package/dist/services/lockout.js.map +1 -0
- package/dist/services/log-collector.rpc-service.d.ts +16 -0
- package/dist/services/log-collector.rpc-service.d.ts.map +1 -1
- package/dist/services/log-collector.rpc-service.js +16 -0
- package/dist/services/log-collector.rpc-service.js.map +1 -1
- package/dist/services/log-collector.service.d.ts +172 -54
- package/dist/services/log-collector.service.d.ts.map +1 -1
- package/dist/services/log-collector.service.js +492 -102
- package/dist/services/log-collector.service.js.map +1 -1
- package/dist/services/log-retention.d.ts +50 -0
- package/dist/services/log-retention.d.ts.map +1 -0
- package/dist/services/log-retention.js +52 -0
- package/dist/services/log-retention.js.map +1 -0
- package/dist/services/maintenance-lock.d.ts +162 -0
- package/dist/services/maintenance-lock.d.ts.map +1 -0
- package/dist/services/maintenance-lock.js +316 -0
- package/dist/services/maintenance-lock.js.map +1 -0
- package/dist/services/master-address.d.ts +107 -0
- package/dist/services/master-address.d.ts.map +1 -0
- package/dist/services/master-address.js +154 -0
- package/dist/services/master-address.js.map +1 -0
- package/dist/services/migration-output.d.ts +16 -0
- package/dist/services/migration-output.d.ts.map +1 -0
- package/dist/services/migration-output.js +22 -0
- package/dist/services/migration-output.js.map +1 -0
- package/dist/services/netron-telemetry-transport.d.ts.map +1 -1
- package/dist/services/netron-telemetry-transport.js.map +1 -1
- package/dist/services/node-deploy-lease.d.ts +171 -0
- package/dist/services/node-deploy-lease.d.ts.map +1 -0
- package/dist/services/node-deploy-lease.js +460 -0
- package/dist/services/node-deploy-lease.js.map +1 -0
- package/dist/services/node-health.repository.d.ts +63 -4
- package/dist/services/node-health.repository.d.ts.map +1 -1
- package/dist/services/node-health.repository.js +108 -67
- package/dist/services/node-health.repository.js.map +1 -1
- package/dist/services/node-manager.rpc-service.d.ts +360 -10
- package/dist/services/node-manager.rpc-service.d.ts.map +1 -1
- package/dist/services/node-manager.rpc-service.js +754 -34
- package/dist/services/node-manager.rpc-service.js.map +1 -1
- package/dist/services/node-manager.service.d.ts +267 -95
- package/dist/services/node-manager.service.d.ts.map +1 -1
- package/dist/services/node-manager.service.js +805 -103
- package/dist/services/node-manager.service.js.map +1 -1
- package/dist/services/node-upgrade.d.ts +129 -0
- package/dist/services/node-upgrade.d.ts.map +1 -0
- package/dist/services/node-upgrade.js +161 -0
- package/dist/services/node-upgrade.js.map +1 -0
- package/dist/services/node-upgrade.service.d.ts +232 -0
- package/dist/services/node-upgrade.service.d.ts.map +1 -0
- package/dist/services/node-upgrade.service.js +468 -0
- package/dist/services/node-upgrade.service.js.map +1 -0
- package/dist/services/pipeline.rpc-service.d.ts +6 -1
- package/dist/services/pipeline.rpc-service.d.ts.map +1 -1
- package/dist/services/pipeline.rpc-service.js +9 -0
- package/dist/services/pipeline.rpc-service.js.map +1 -1
- package/dist/services/pipeline.service.d.ts +17 -46
- package/dist/services/pipeline.service.d.ts.map +1 -1
- package/dist/services/pipeline.service.js +84 -9
- package/dist/services/pipeline.service.js.map +1 -1
- package/dist/services/project.rpc-service.d.ts +140 -5
- package/dist/services/project.rpc-service.d.ts.map +1 -1
- package/dist/services/project.rpc-service.js +260 -22
- package/dist/services/project.rpc-service.js.map +1 -1
- package/dist/services/project.service.d.ts +687 -15
- package/dist/services/project.service.d.ts.map +1 -1
- package/dist/services/project.service.js +2846 -337
- package/dist/services/project.service.js.map +1 -1
- package/dist/services/redeploy-decision.d.ts +176 -0
- package/dist/services/redeploy-decision.d.ts.map +1 -0
- package/dist/services/redeploy-decision.js +142 -0
- package/dist/services/redeploy-decision.js.map +1 -0
- package/dist/services/release.rpc-service.d.ts +159 -0
- package/dist/services/release.rpc-service.d.ts.map +1 -0
- package/dist/services/release.rpc-service.js +395 -0
- package/dist/services/release.rpc-service.js.map +1 -0
- package/dist/services/release.service.d.ts +114 -0
- package/dist/services/release.service.d.ts.map +1 -0
- package/dist/services/release.service.js +208 -0
- package/dist/services/release.service.js.map +1 -0
- package/dist/services/remote-deployer.service.d.ts +580 -8
- package/dist/services/remote-deployer.service.d.ts.map +1 -1
- package/dist/services/remote-deployer.service.js +1786 -169
- package/dist/services/remote-deployer.service.js.map +1 -1
- package/dist/services/remote-ops.service.d.ts +51 -9
- package/dist/services/remote-ops.service.d.ts.map +1 -1
- package/dist/services/remote-ops.service.js +235 -39
- package/dist/services/remote-ops.service.js.map +1 -1
- package/dist/services/remote-provisioner.d.ts +124 -0
- package/dist/services/remote-provisioner.d.ts.map +1 -0
- package/dist/services/remote-provisioner.js +258 -0
- package/dist/services/remote-provisioner.js.map +1 -0
- package/dist/services/secrets.rpc-service.d.ts +51 -2
- package/dist/services/secrets.rpc-service.d.ts.map +1 -1
- package/dist/services/secrets.rpc-service.js +81 -2
- package/dist/services/secrets.rpc-service.js.map +1 -1
- package/dist/services/secrets.service.d.ts +108 -9
- package/dist/services/secrets.service.d.ts.map +1 -1
- package/dist/services/secrets.service.js +313 -48
- package/dist/services/secrets.service.js.map +1 -1
- package/dist/services/slave-storage.service.d.ts +107 -0
- package/dist/services/slave-storage.service.d.ts.map +1 -1
- package/dist/services/slave-storage.service.js +171 -2
- package/dist/services/slave-storage.service.js.map +1 -1
- package/dist/services/static-carry-forward.d.ts +110 -0
- package/dist/services/static-carry-forward.d.ts.map +1 -0
- package/dist/services/static-carry-forward.js +433 -0
- package/dist/services/static-carry-forward.js.map +1 -0
- package/dist/services/sync-policy.d.ts +167 -0
- package/dist/services/sync-policy.d.ts.map +1 -0
- package/dist/services/sync-policy.js +161 -0
- package/dist/services/sync-policy.js.map +1 -0
- package/dist/services/sync-summary.d.ts +39 -0
- package/dist/services/sync-summary.d.ts.map +1 -0
- package/dist/services/sync-summary.js +62 -0
- package/dist/services/sync-summary.js.map +1 -0
- package/dist/services/sync.rpc-service.d.ts +19 -7
- package/dist/services/sync.rpc-service.d.ts.map +1 -1
- package/dist/services/sync.rpc-service.js +36 -5
- package/dist/services/sync.rpc-service.js.map +1 -1
- package/dist/services/sync.service.d.ts +350 -18
- package/dist/services/sync.service.d.ts.map +1 -1
- package/dist/services/sync.service.js +864 -116
- package/dist/services/sync.service.js.map +1 -1
- package/dist/services/system-info.rpc-service.d.ts +2 -1
- package/dist/services/system-info.rpc-service.d.ts.map +1 -1
- package/dist/services/system-info.rpc-service.js.map +1 -1
- package/dist/services/system-info.service.d.ts +56 -68
- package/dist/services/system-info.service.d.ts.map +1 -1
- package/dist/services/system-info.service.js +240 -127
- package/dist/services/system-info.service.js.map +1 -1
- package/dist/services/telemetry.rpc-service.d.ts.map +1 -1
- package/dist/services/telemetry.rpc-service.js +9 -3
- package/dist/services/telemetry.rpc-service.js.map +1 -1
- package/dist/services/telemetry.service.d.ts +4 -2
- package/dist/services/telemetry.service.d.ts.map +1 -1
- package/dist/services/telemetry.service.js +4 -2
- package/dist/services/telemetry.service.js.map +1 -1
- package/dist/services/trace-collector.rpc-service.d.ts +2 -1
- package/dist/services/trace-collector.rpc-service.d.ts.map +1 -1
- package/dist/services/trace-collector.rpc-service.js.map +1 -1
- package/dist/services/trace-collector.service.d.ts +2 -41
- package/dist/services/trace-collector.service.d.ts.map +1 -1
- package/dist/services/trace-collector.service.js +27 -7
- package/dist/services/trace-collector.service.js.map +1 -1
- package/dist/services/wait-for-postgres.d.ts +28 -0
- package/dist/services/wait-for-postgres.d.ts.map +1 -0
- package/dist/services/wait-for-postgres.js +77 -0
- package/dist/services/wait-for-postgres.js.map +1 -0
- package/dist/shared/alert-expression.d.ts +60 -0
- package/dist/shared/alert-expression.d.ts.map +1 -0
- package/dist/shared/alert-expression.js +124 -0
- package/dist/shared/alert-expression.js.map +1 -0
- package/dist/shared/audit-outcome.d.ts +39 -0
- package/dist/shared/audit-outcome.d.ts.map +1 -0
- package/dist/shared/audit-outcome.js +45 -0
- package/dist/shared/audit-outcome.js.map +1 -0
- package/dist/shared/build-freshness.d.ts +59 -0
- package/dist/shared/build-freshness.d.ts.map +1 -0
- package/dist/shared/build-freshness.js +113 -0
- package/dist/shared/build-freshness.js.map +1 -0
- package/dist/shared/build-stamp.d.ts +26 -0
- package/dist/shared/build-stamp.d.ts.map +1 -0
- package/dist/shared/build-stamp.js +36 -0
- package/dist/shared/build-stamp.js.map +1 -0
- package/dist/shared/describe-error.d.ts +22 -0
- package/dist/shared/describe-error.d.ts.map +1 -0
- package/dist/shared/describe-error.js +39 -0
- package/dist/shared/describe-error.js.map +1 -0
- package/dist/shared/dto/alerts.d.ts +101 -0
- package/dist/shared/dto/alerts.d.ts.map +1 -0
- package/dist/shared/dto/alerts.js +9 -0
- package/dist/shared/dto/alerts.js.map +1 -0
- package/dist/shared/dto/auth.d.ts +49 -0
- package/dist/shared/dto/auth.d.ts.map +1 -0
- package/dist/shared/dto/auth.js +14 -0
- package/dist/shared/dto/auth.js.map +1 -0
- package/dist/shared/dto/backups.d.ts +16 -0
- package/dist/shared/dto/backups.d.ts.map +1 -0
- package/dist/shared/dto/backups.js +9 -0
- package/dist/shared/dto/backups.js.map +1 -0
- package/dist/shared/dto/deploy.d.ts +28 -0
- package/dist/shared/dto/deploy.d.ts.map +1 -0
- package/dist/shared/dto/deploy.js +8 -0
- package/dist/shared/dto/deploy.js.map +1 -0
- package/dist/shared/dto/discovery.d.ts +24 -0
- package/dist/shared/dto/discovery.d.ts.map +1 -0
- package/dist/shared/dto/discovery.js +9 -0
- package/dist/shared/dto/discovery.js.map +1 -0
- package/dist/shared/dto/fleet.d.ts +35 -0
- package/dist/shared/dto/fleet.d.ts.map +1 -0
- package/dist/shared/dto/fleet.js +8 -0
- package/dist/shared/dto/fleet.js.map +1 -0
- package/dist/shared/dto/health.d.ts +26 -0
- package/dist/shared/dto/health.d.ts.map +1 -0
- package/dist/shared/dto/health.js +9 -0
- package/dist/shared/dto/health.js.map +1 -0
- package/dist/shared/dto/kubernetes.d.ts +44 -0
- package/dist/shared/dto/kubernetes.d.ts.map +1 -0
- package/dist/shared/dto/kubernetes.js +9 -0
- package/dist/shared/dto/kubernetes.js.map +1 -0
- package/dist/shared/dto/logs.d.ts +77 -0
- package/dist/shared/dto/logs.d.ts.map +1 -0
- package/dist/shared/dto/logs.js +10 -0
- package/dist/shared/dto/logs.js.map +1 -0
- package/dist/shared/dto/metrics.d.ts +65 -0
- package/dist/shared/dto/metrics.d.ts.map +1 -0
- package/dist/shared/dto/metrics.js +17 -0
- package/dist/shared/dto/metrics.js.map +1 -0
- package/dist/shared/dto/nodes.d.ts +347 -0
- package/dist/shared/dto/nodes.d.ts.map +1 -0
- package/dist/shared/dto/nodes.js +8 -0
- package/dist/shared/dto/nodes.js.map +1 -0
- package/dist/shared/dto/pipelines.d.ts +53 -0
- package/dist/shared/dto/pipelines.d.ts.map +1 -0
- package/dist/shared/dto/pipelines.js +9 -0
- package/dist/shared/dto/pipelines.js.map +1 -0
- package/dist/shared/dto/project.d.ts +142 -8
- package/dist/shared/dto/project.d.ts.map +1 -1
- package/dist/shared/dto/services.d.ts +858 -7
- package/dist/shared/dto/services.d.ts.map +1 -1
- package/dist/shared/dto/system-info.d.ts +93 -0
- package/dist/shared/dto/system-info.d.ts.map +1 -0
- package/dist/shared/dto/system-info.js +9 -0
- package/dist/shared/dto/system-info.js.map +1 -0
- package/dist/shared/dto/traces.d.ts +49 -0
- package/dist/shared/dto/traces.d.ts.map +1 -0
- package/dist/shared/dto/traces.js +9 -0
- package/dist/shared/dto/traces.js.map +1 -0
- package/dist/shared/env-config.d.ts +74 -0
- package/dist/shared/env-config.d.ts.map +1 -0
- package/dist/shared/env-config.js +99 -0
- package/dist/shared/env-config.js.map +1 -0
- package/dist/shared/events.d.ts +45 -39
- package/dist/shared/events.d.ts.map +1 -1
- package/dist/shared/events.js +6 -0
- package/dist/shared/events.js.map +1 -1
- package/dist/shared/format.d.ts +1 -1
- package/dist/shared/format.d.ts.map +1 -1
- package/dist/shared/format.js +4 -0
- package/dist/shared/format.js.map +1 -1
- package/dist/shared/local-infra-host.d.ts +28 -0
- package/dist/shared/local-infra-host.d.ts.map +1 -0
- package/dist/shared/local-infra-host.js +28 -0
- package/dist/shared/local-infra-host.js.map +1 -0
- package/dist/shared/node-check.d.ts +37 -0
- package/dist/shared/node-check.d.ts.map +1 -0
- package/dist/shared/node-check.js +41 -0
- package/dist/shared/node-check.js.map +1 -0
- package/dist/shared/paths.d.ts +29 -0
- package/dist/shared/paths.d.ts.map +1 -0
- package/dist/shared/paths.js +54 -0
- package/dist/shared/paths.js.map +1 -0
- package/dist/shared/pnpm.d.ts +29 -0
- package/dist/shared/pnpm.d.ts.map +1 -0
- package/dist/shared/pnpm.js +57 -0
- package/dist/shared/pnpm.js.map +1 -0
- package/dist/shared/private-files.d.ts +29 -0
- package/dist/shared/private-files.d.ts.map +1 -0
- package/dist/shared/private-files.js +109 -0
- package/dist/shared/private-files.js.map +1 -0
- package/dist/shared/redact-env.d.ts +24 -0
- package/dist/shared/redact-env.d.ts.map +1 -0
- package/dist/shared/redact-env.js +36 -0
- package/dist/shared/redact-env.js.map +1 -0
- package/dist/shared/release-reading.d.ts +85 -0
- package/dist/shared/release-reading.d.ts.map +1 -0
- package/dist/shared/release-reading.js +81 -0
- package/dist/shared/release-reading.js.map +1 -0
- package/dist/shared/roles.d.ts +58 -3
- package/dist/shared/roles.d.ts.map +1 -1
- package/dist/shared/roles.js +55 -0
- package/dist/shared/roles.js.map +1 -1
- package/dist/shared/rpcauth.d.ts +13 -0
- package/dist/shared/rpcauth.d.ts.map +1 -0
- package/dist/shared/rpcauth.js +23 -0
- package/dist/shared/rpcauth.js.map +1 -0
- package/dist/shared/shell-escape.d.ts +9 -0
- package/dist/shared/shell-escape.d.ts.map +1 -0
- package/dist/shared/shell-escape.js +11 -0
- package/dist/shared/shell-escape.js.map +1 -0
- package/dist/shared/sync-reading.d.ts +45 -0
- package/dist/shared/sync-reading.d.ts.map +1 -0
- package/dist/shared/sync-reading.js +42 -0
- package/dist/shared/sync-reading.js.map +1 -0
- package/dist/shared/tokens.d.ts +19 -0
- package/dist/shared/tokens.d.ts.map +1 -1
- package/dist/shared/tokens.js +28 -0
- package/dist/shared/tokens.js.map +1 -1
- package/dist/webapp/webapp.service.d.ts +33 -2
- package/dist/webapp/webapp.service.d.ts.map +1 -1
- package/dist/webapp/webapp.service.js +143 -31
- package/dist/webapp/webapp.service.js.map +1 -1
- package/dist/workers/health-monitor-process.d.ts.map +1 -1
- package/dist/workers/health-monitor-process.js +10 -0
- package/dist/workers/health-monitor-process.js.map +1 -1
- package/dist/workers/health-monitor.service.d.ts +45 -3
- package/dist/workers/health-monitor.service.d.ts.map +1 -1
- package/dist/workers/health-monitor.service.js +152 -25
- package/dist/workers/health-monitor.service.js.map +1 -1
- package/dist/workers/system-worker-manager.d.ts +43 -0
- package/dist/workers/system-worker-manager.d.ts.map +1 -1
- package/dist/workers/system-worker-manager.js +150 -3
- package/dist/workers/system-worker-manager.js.map +1 -1
- package/dist/workers/types.d.ts +8 -2
- package/dist/workers/types.d.ts.map +1 -1
- package/package.json +68 -30
- package/webapp/dist/BUILD.json +5 -0
- package/webapp/dist/assets/FormControlLabel-BbSxpQwN.js +1 -0
- package/webapp/dist/assets/Grid-DizFZYue.js +1 -0
- package/webapp/dist/assets/Switch-Bfiqzx8l.js +1 -0
- package/webapp/dist/assets/alerts-DH_RVRS3.js +1 -0
- package/webapp/dist/assets/apps-B96355sz.js +1 -0
- package/webapp/dist/assets/audit-CYGtbi4k.js +1 -0
- package/webapp/dist/assets/client-BmqFExWT.js +1 -0
- package/webapp/dist/assets/constants-veKGFkC6.js +1 -0
- package/webapp/dist/assets/containers-B_TpThln.js +2 -0
- package/webapp/dist/assets/daemon-memory-CCPZ4cV_.js +1 -0
- package/webapp/dist/assets/dashboard-DHf2_65N.js +1 -0
- package/webapp/dist/assets/dashboard-builder-CWY2pjeG.js +1 -0
- package/webapp/dist/assets/deploy-release-dialog-Dp-zpSAd.js +1 -0
- package/webapp/dist/assets/deployments-tJI6O3fK.js +1 -0
- package/webapp/dist/assets/detail-B2zP1Hto.js +8 -0
- package/webapp/dist/assets/detail-CoIrwmsy.js +1 -0
- package/webapp/dist/assets/detail-DWaGaOtL.js +2 -0
- package/webapp/dist/assets/formatters-BqjL73N3.js +1 -0
- package/webapp/dist/assets/index-Dvo0iprx.css +1 -0
- package/webapp/dist/assets/index-vMnY_4jR.js +412 -0
- package/webapp/dist/assets/logs-DTRjOfX8.js +12 -0
- package/webapp/dist/assets/maplibre-gl-DowHoZAx.js +814 -0
- package/webapp/dist/assets/metrics-UCajtdox.js +2 -0
- package/webapp/dist/assets/nodes-DuTVU0f6.js +7 -0
- package/webapp/dist/assets/pipelines-C8BeDcAl.js +4 -0
- package/webapp/dist/assets/projects-Dp_zFfLY.js +1 -0
- package/webapp/dist/assets/react-DlmbjZJV.js +1 -0
- package/webapp/dist/assets/react-apexcharts.esm-C8pn45ml.js +97 -0
- package/webapp/dist/assets/release-bits-BzTKz5fM.js +1 -0
- package/webapp/dist/assets/release-build-panel-DcW9YcXQ.js +1 -0
- package/webapp/dist/assets/releases-B4hcr1bE.js +2 -0
- package/webapp/dist/assets/rolldown-runtime-XKyaHtl9.js +1 -0
- package/webapp/dist/assets/settings-DIteZTbe.js +1 -0
- package/webapp/dist/assets/settled-pair-C7SjZuns.js +1 -0
- package/webapp/dist/assets/sign-in-D4kMBOHp.js +1 -0
- package/webapp/dist/assets/stacks-Brnf-EB7.js +1 -0
- package/webapp/dist/assets/sync-reading-C3PnJ7AX.js +1 -0
- package/webapp/dist/assets/system-info-CFDNVKkU.js +1 -0
- package/webapp/dist/assets/topology-7WeTUsDN.js +12 -0
- package/webapp/dist/assets/topology-DLioOiRN.css +1 -0
- package/webapp/dist/assets/traces-9c3gwCN-.js +1 -0
- package/webapp/dist/assets/use-stack-context-CnA5FTHu.js +1 -0
- package/webapp/dist/index.html +6 -6
- package/dist/commands/dev.d.ts +0 -23
- package/dist/commands/dev.d.ts.map +0 -1
- package/dist/commands/dev.js +0 -76
- package/dist/commands/dev.js.map +0 -1
- package/dist/config/define-app.d.ts +0 -6
- package/dist/config/define-app.d.ts.map +0 -1
- package/dist/config/define-app.js +0 -38
- package/dist/config/define-app.js.map +0 -1
- package/dist/infrastructure/gateway-generator.d.ts +0 -63
- package/dist/infrastructure/gateway-generator.d.ts.map +0 -1
- package/dist/infrastructure/gateway-generator.js +0 -253
- package/dist/infrastructure/gateway-generator.js.map +0 -1
- package/dist/monitoring/health.service.d.ts +0 -14
- package/dist/monitoring/health.service.d.ts.map +0 -1
- package/dist/monitoring/health.service.js +0 -50
- package/dist/monitoring/health.service.js.map +0 -1
- package/dist/monitoring/metrics.service.d.ts +0 -14
- package/dist/monitoring/metrics.service.d.ts.map +0 -1
- package/dist/monitoring/metrics.service.js +0 -40
- package/dist/monitoring/metrics.service.js.map +0 -1
- package/dist/orchestrator/bootstrap-runner.d.ts +0 -15
- package/dist/orchestrator/bootstrap-runner.d.ts.map +0 -1
- package/dist/orchestrator/bootstrap-runner.js +0 -152
- package/dist/orchestrator/bootstrap-runner.js.map +0 -1
- package/dist/orchestrator/topology-proxy.d.ts +0 -65
- package/dist/orchestrator/topology-proxy.d.ts.map +0 -1
- package/dist/orchestrator/topology-proxy.js +0 -209
- package/dist/orchestrator/topology-proxy.js.map +0 -1
- package/dist/orchestrator/topology-relay.d.ts +0 -111
- package/dist/orchestrator/topology-relay.d.ts.map +0 -1
- package/dist/orchestrator/topology-relay.js +0 -255
- package/dist/orchestrator/topology-relay.js.map +0 -1
- package/dist/services/auth-middleware.d.ts +0 -47
- package/dist/services/auth-middleware.d.ts.map +0 -1
- package/dist/services/auth-middleware.js +0 -158
- package/dist/services/auth-middleware.js.map +0 -1
- package/dist/services/environment.rpc-service.d.ts +0 -22
- package/dist/services/environment.rpc-service.d.ts.map +0 -1
- package/dist/services/environment.rpc-service.js +0 -65
- package/dist/services/environment.rpc-service.js.map +0 -1
- package/dist/services/environment.service.d.ts +0 -87
- package/dist/services/environment.service.d.ts.map +0 -1
- package/dist/services/environment.service.js +0 -220
- package/dist/services/environment.service.js.map +0 -1
- package/dist/services/metrics-collector.service.d.ts +0 -103
- package/dist/services/metrics-collector.service.d.ts.map +0 -1
- package/dist/services/metrics-collector.service.js +0 -235
- package/dist/services/metrics-collector.service.js.map +0 -1
- package/dist/services/metrics.rpc-service.d.ts +0 -41
- package/dist/services/metrics.rpc-service.d.ts.map +0 -1
- package/dist/services/metrics.rpc-service.js +0 -90
- package/dist/services/metrics.rpc-service.js.map +0 -1
- package/dist/services/metrics.service.d.ts +0 -72
- package/dist/services/metrics.service.d.ts.map +0 -1
- package/dist/services/metrics.service.js +0 -185
- package/dist/services/metrics.service.js.map +0 -1
- package/dist/supervisor/omnitron-supervisor.d.ts +0 -21
- package/dist/supervisor/omnitron-supervisor.d.ts.map +0 -1
- package/dist/supervisor/omnitron-supervisor.js +0 -43
- package/dist/supervisor/omnitron-supervisor.js.map +0 -1
- package/dist/webapp/static-server.d.ts +0 -24
- package/dist/webapp/static-server.d.ts.map +0 -1
- package/dist/webapp/static-server.js +0 -152
- package/dist/webapp/static-server.js.map +0 -1
- package/webapp/dist/assets/Badge-D2ZBP5iK.js +0 -1
- package/webapp/dist/assets/Card-vO88g06B.js +0 -1
- package/webapp/dist/assets/CardActions-C9h7Q2wW.js +0 -1
- package/webapp/dist/assets/CardContent-BA_Xmmhk.js +0 -1
- package/webapp/dist/assets/CardHeader-ceIs__6x.js +0 -1
- package/webapp/dist/assets/Chip-Ckk0xUhK.js +0 -1
- package/webapp/dist/assets/DialogActions-BhHM7hov.js +0 -1
- package/webapp/dist/assets/DialogContentText-BT2JQRmK.js +0 -1
- package/webapp/dist/assets/FormControlLabel-CcQByVS8.js +0 -1
- package/webapp/dist/assets/Grid-14PETRQW.js +0 -1
- package/webapp/dist/assets/InputAdornment-B8aHIsQ7.js +0 -1
- package/webapp/dist/assets/Skeleton-B74-Ds6O.js +0 -37
- package/webapp/dist/assets/Switch-DvWD2wh4.js +0 -1
- package/webapp/dist/assets/SwitchBase-CDU4nY8O.js +0 -1
- package/webapp/dist/assets/Tab-DcCOYYp5.js +0 -1
- package/webapp/dist/assets/TableContainer-CzTh4mu-.js +0 -1
- package/webapp/dist/assets/TableRow-BySEreZR.js +0 -2
- package/webapp/dist/assets/TextField-BLf-BHz2.js +0 -1
- package/webapp/dist/assets/alerts-DnRbT41C.js +0 -1
- package/webapp/dist/assets/apps-CdR0VH2d.js +0 -1
- package/webapp/dist/assets/chunk-DtcAfS_W.js +0 -1
- package/webapp/dist/assets/client-DU8I_lDc.js +0 -2
- package/webapp/dist/assets/constants-BgnT-Xdy.js +0 -1
- package/webapp/dist/assets/containers-Dw-rRXV1.js +0 -1
- package/webapp/dist/assets/dashboard-CzgB0uZz.js +0 -1
- package/webapp/dist/assets/dashboard-builder-DsA0yg33.js +0 -1
- package/webapp/dist/assets/deployments-DtQAoIcQ.js +0 -1
- package/webapp/dist/assets/detail-BJR-G7JG.js +0 -1
- package/webapp/dist/assets/detail-nlCeSltl.js +0 -8
- package/webapp/dist/assets/formatters-Do41SRmE.js +0 -1
- package/webapp/dist/assets/index-ByQDwp2r.js +0 -566
- package/webapp/dist/assets/index-CHVXOsTS.css +0 -1
- package/webapp/dist/assets/isMuiElement-DwF2naaF.js +0 -1
- package/webapp/dist/assets/logs-Kn8o4H7k.js +0 -11
- package/webapp/dist/assets/metrics-DN8Zu5wT.js +0 -2
- package/webapp/dist/assets/nodes-Bgch7AtN.js +0 -7
- package/webapp/dist/assets/pipelines-Cry3qm-S.js +0 -4
- package/webapp/dist/assets/popper-BJFSj6rc.js +0 -1
- package/webapp/dist/assets/preload-helper-DSXbuxSR.js +0 -1
- package/webapp/dist/assets/projects-Dym2GI1U.js +0 -1
- package/webapp/dist/assets/react-apexcharts.esm-CSGK5Cxn.js +0 -958
- package/webapp/dist/assets/react-apexcharts.esm-DEAWOwx5.js +0 -1003
- package/webapp/dist/assets/settings-va3zTcow.js +0 -1
- package/webapp/dist/assets/sign-in-ik35umbp.js +0 -1
- package/webapp/dist/assets/stacks-CVFOnxbF.js +0 -1
- package/webapp/dist/assets/system-info-npIXAjX2.js +0 -1
- package/webapp/dist/assets/topology-CHpVij2M.css +0 -1
- package/webapp/dist/assets/topology-bDe70vLs.js +0 -12
- package/webapp/dist/assets/traces-DIIcT8DF.js +0 -1
- package/webapp/dist/assets/use-stack-context-DHLwZv1r.js +0 -1
- /package/webapp/dist/assets/{fs-CgZLtHiQ.js → fs-Ccl3sAcp.js} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"migration-output.js","sourceRoot":"","sources":["../../src/services/migration-output.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,eAAe,CAAC,MAAc;IAC5C,OAAO,MAAM;SACV,KAAK,CAAC,OAAO,CAAC;SACd,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;SAC7B,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC;SACpC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,sCAAsC,EAAE,IAAI,CAAC,CAAC,CAAC;AAC/E,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"netron-telemetry-transport.d.ts","sourceRoot":"","sources":["../../src/services/netron-telemetry-transport.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EACV,kBAAkB,EAClB,cAAc,EACf,MAAM,qCAAqC,CAAC;AAM7C,qBAAa,wBAAyB,YAAW,kBAAkB;IAK/D,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,UAAU;IAL7B,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;
|
|
1
|
+
{"version":3,"file":"netron-telemetry-transport.d.ts","sourceRoot":"","sources":["../../src/services/netron-telemetry-transport.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EACV,kBAAkB,EAClB,cAAc,EACf,MAAM,qCAAqC,CAAC;AAM7C,qBAAa,wBAAyB,YAAW,kBAAkB;IAK/D,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,UAAU;IAL7B,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAEhC,YACmB,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,EACnC,MAAM,CAAC,EAAE,MAAM,EAGhB;IAED;;;;OAIG;IACG,IAAI,CAAC,OAAO,EAAE,cAAc,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAwBrD;IAED;;OAEG;IACH,WAAW,IAAI,OAAO,CAErB;IAED;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAmB7B;IAED;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAEhC;CACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"netron-telemetry-transport.js","sourceRoot":"","sources":["../../src/services/netron-telemetry-transport.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAOH,gFAAgF;AAChF,YAAY;AACZ,gFAAgF;AAEhF,MAAM,OAAO,wBAAwB;IAKhB;
|
|
1
|
+
{"version":3,"file":"netron-telemetry-transport.js","sourceRoot":"","sources":["../../src/services/netron-telemetry-transport.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAOH,gFAAgF;AAChF,YAAY;AACZ,gFAAgF;AAEhF,MAAM,OAAO,wBAAwB;IAKhB,UAAU;IACV,UAAU;IALrB,UAAU,GAAG,KAAK,CAAC;IACV,MAAM,CAAS;IAEhC,YACmB,UAAkB,EAClB,UAAkB,EACnC,MAAe;0BAFE,UAAU;0BACV,UAAU;QAG3B,IAAI,CAAC,MAAM,GAAG,MAAM,IAAI,QAAQ,OAAO,CAAC,GAAG,EAAE,CAAC;IAChD,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,IAAI,CAAC,OAAyB;QAClC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,CAAC,CAAC;QAEnC,MAAM,GAAG,GAAG,UAAU,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,gBAAgB,CAAC;QAEzE,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;YAChC,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;YAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;gBACnB,OAAO,EAAE,mBAAmB;gBAC5B,MAAM,EAAE,WAAW;gBACnB,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC;gBACzC,EAAE,EAAE,MAAM,CAAC,UAAU,EAAE;aACxB,CAAC;YACF,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC;SACpC,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;YACxB,MAAM,IAAI,KAAK,CAAC,+BAA+B,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;QAC3F,CAAC;QAED,MAAM,MAAM,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAiC,CAAC;QACvE,OAAO,MAAM,EAAE,IAAI,EAAE,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC;IAC9C,CAAC;IAED;;OAEG;IACH,WAAW;QACT,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,OAAO;QACX,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,UAAU,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,gBAAgB,CAAC;YACzE,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;gBAChC,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;gBAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;oBACnB,OAAO,EAAE,UAAU;oBACnB,MAAM,EAAE,MAAM;oBACd,KAAK,EAAE,EAAE;oBACT,EAAE,EAAE,MAAM,CAAC,UAAU,EAAE;iBACxB,CAAC;gBACF,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC;aACpC,CAAC,CAAC;YACH,IAAI,CAAC,UAAU,GAAG,QAAQ,CAAC,EAAE,CAAC;QAChC,CAAC;QAAC,MAAM,CAAC;YACP,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;YACxB,MAAM,IAAI,KAAK,CAAC,+BAA+B,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;QACvF,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,UAAU;QACd,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;IAC1B,CAAC;CACF"}
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* One writer per node.
|
|
3
|
+
*
|
|
4
|
+
* Any number of development machines may run `omnitron stack start sample test`,
|
|
5
|
+
* and every one of them is a master that deploys to the SAME node over SSH.
|
|
6
|
+
* Nothing stopped two of them — or two terminals on one of them — from
|
|
7
|
+
* interleaving: one delivering artifacts while the other restarted the apps
|
|
8
|
+
* onto half of them. There is one test server and one production
|
|
9
|
+
* infrastructure, so the exclusion has to live where the contention is: on the
|
|
10
|
+
* node.
|
|
11
|
+
*
|
|
12
|
+
* It is a LEASE, not a lock held open. A file on the node names the holder and
|
|
13
|
+
* is renewed while the deployment runs; a deployment that finds it renewed
|
|
14
|
+
* within the last `leaseSec` is refused and told who holds it; one that finds
|
|
15
|
+
* it older takes it over, and says so. A laptop closed mid-deployment therefore
|
|
16
|
+
* frees the only test server by itself, `leaseSec` after its last renewal,
|
|
17
|
+
* provided its remote command completed. A killed host worker leaves durable
|
|
18
|
+
* unresolved intent and requires inspected recovery instead of an unsafe takeover.
|
|
19
|
+
*
|
|
20
|
+
* Every read-decide-write of that file runs under `flock` on the node, so two
|
|
21
|
+
* masters deciding at the same instant cannot both win. A node that cannot
|
|
22
|
+
* give that guarantee — no `flock(1)`, or the lock directory on a network
|
|
23
|
+
* filesystem, where `flock` may exclude nothing — REFUSES the deployment
|
|
24
|
+
* rather than proceeding unlocked: a lock that cannot run is not a lock that
|
|
25
|
+
* passed.
|
|
26
|
+
*
|
|
27
|
+
* The scripts answer on stdout and exit 0 even when they refuse, so a refusal
|
|
28
|
+
* arrives as words this module can name, not as an SSH exit status. Any
|
|
29
|
+
* answer this module does not recognise is a refusal too — never a lease.
|
|
30
|
+
*/
|
|
31
|
+
import type { ILogger } from '@omnitron-dev/titan/module/logger';
|
|
32
|
+
/** Who holds a node, as written in the lease file. */
|
|
33
|
+
export interface LeaseRecord {
|
|
34
|
+
/** Random per deployment attempt; the only field compared. */
|
|
35
|
+
token: string;
|
|
36
|
+
/** Machine and process, for the operator who is told to wait. */
|
|
37
|
+
holder: string;
|
|
38
|
+
/** `project/stack` being deployed. */
|
|
39
|
+
stack: string;
|
|
40
|
+
/** ISO time the holder took the lease. */
|
|
41
|
+
startedAt: string;
|
|
42
|
+
}
|
|
43
|
+
export interface LeaseTiming {
|
|
44
|
+
/** Directory on the node holding the lease and its guard. */
|
|
45
|
+
dir: string;
|
|
46
|
+
/** A lease unrenewed for this long may be taken over. */
|
|
47
|
+
leaseSec: number;
|
|
48
|
+
/** How often a holder renews. Must be well inside `leaseSec`. */
|
|
49
|
+
renewEveryMs: number;
|
|
50
|
+
}
|
|
51
|
+
export declare const DEFAULT_LEASE_TIMING: LeaseTiming;
|
|
52
|
+
export type AcquireAnswer = {
|
|
53
|
+
kind: 'acquired';
|
|
54
|
+
lapsed: {
|
|
55
|
+
idleSec: number;
|
|
56
|
+
previous: LeaseRecord | null;
|
|
57
|
+
} | null;
|
|
58
|
+
} | {
|
|
59
|
+
kind: 'held';
|
|
60
|
+
idleSec: number;
|
|
61
|
+
holder: LeaseRecord | null;
|
|
62
|
+
};
|
|
63
|
+
export type RenewAnswer = {
|
|
64
|
+
kind: 'renewed';
|
|
65
|
+
} | {
|
|
66
|
+
kind: 'lost';
|
|
67
|
+
holder: LeaseRecord | null;
|
|
68
|
+
};
|
|
69
|
+
export type ReleaseAnswer = {
|
|
70
|
+
kind: 'released';
|
|
71
|
+
} | {
|
|
72
|
+
kind: 'not-held';
|
|
73
|
+
holder: LeaseRecord | null;
|
|
74
|
+
} | {
|
|
75
|
+
kind: 'busy';
|
|
76
|
+
};
|
|
77
|
+
/** The node answered, and cannot provide exclusion. Refuse the deployment. */
|
|
78
|
+
export declare class LeaseUnavailableError extends Error {
|
|
79
|
+
readonly node: string;
|
|
80
|
+
readonly reason: string;
|
|
81
|
+
constructor(node: string, reason: string);
|
|
82
|
+
}
|
|
83
|
+
/** Another deployment holds the node. */
|
|
84
|
+
export declare class LeaseHeldError extends Error {
|
|
85
|
+
readonly node: string;
|
|
86
|
+
readonly holder: LeaseRecord | null;
|
|
87
|
+
readonly idleSec: number;
|
|
88
|
+
readonly leaseSec: number;
|
|
89
|
+
constructor(node: string, holder: LeaseRecord | null, idleSec: number, leaseSec: number);
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Keep host mutations exclusive for the entire remote command, not just the
|
|
93
|
+
* controller's pre-step check. The child does not inherit the lock descriptor.
|
|
94
|
+
* A durable intent survives SIGKILL of the lock holder: it is never treated as
|
|
95
|
+
* completed merely because a lease or timeout elapsed. Ordinary disconnects
|
|
96
|
+
* leave the host worker to finish and clear its own record. An unresolved
|
|
97
|
+
* record requires inspected recovery before another writer can take over.
|
|
98
|
+
* Commands must synchronously finish their mutations; managed daemon startup
|
|
99
|
+
* may detach the daemon, but must not detach delayed deployment writes.
|
|
100
|
+
*/
|
|
101
|
+
export declare function guardScript(timing: LeaseTiming, token: string, command: string, timeoutMs?: number): string;
|
|
102
|
+
export declare function acquireScript(timing: LeaseTiming, record: LeaseRecord): string;
|
|
103
|
+
export declare function renewScript(timing: LeaseTiming, token: string): string;
|
|
104
|
+
export declare function releaseScript(timing: LeaseTiming, token: string): string;
|
|
105
|
+
export declare function parseAcquire(node: string, out: string): AcquireAnswer;
|
|
106
|
+
export declare function parseRenew(node: string, out: string): RenewAnswer;
|
|
107
|
+
export declare function parseRelease(node: string, out: string): ReleaseAnswer;
|
|
108
|
+
/** A timing that could hand the node to a second writer is refused outright. */
|
|
109
|
+
export declare function assertTiming(timing: LeaseTiming): void;
|
|
110
|
+
/** Runs one lease script on the node and returns its stdout. */
|
|
111
|
+
export type LeaseRunner = (script: string) => Promise<string>;
|
|
112
|
+
export declare class NodeLease {
|
|
113
|
+
readonly node: string;
|
|
114
|
+
private readonly run;
|
|
115
|
+
private readonly timing;
|
|
116
|
+
readonly record: LeaseRecord;
|
|
117
|
+
private timer;
|
|
118
|
+
private lost;
|
|
119
|
+
private renewing;
|
|
120
|
+
constructor(node: string, run: LeaseRunner, stack: string, timing?: LeaseTiming, now?: () => number);
|
|
121
|
+
acquire(): Promise<AcquireAnswer>;
|
|
122
|
+
/**
|
|
123
|
+
* Renew until released. A renewal that finds another holder marks the lease
|
|
124
|
+
* lost; one that cannot reach the node is logged and retried — the next
|
|
125
|
+
* `confirm` asks the node directly before anything else is changed on it.
|
|
126
|
+
*/
|
|
127
|
+
startRenewing(logger?: ILogger): void;
|
|
128
|
+
private renewOnce;
|
|
129
|
+
/**
|
|
130
|
+
* Ask the node whether the lease is still this deployment's, before a step
|
|
131
|
+
* that changes the node. Throws when it is not — or when the node cannot
|
|
132
|
+
* say, which is not a yes.
|
|
133
|
+
*/
|
|
134
|
+
confirm(step: string): Promise<void>;
|
|
135
|
+
guard(command: string, timeoutMs?: number): string;
|
|
136
|
+
release(): Promise<ReleaseAnswer>;
|
|
137
|
+
}
|
|
138
|
+
export interface LeaseCandidate {
|
|
139
|
+
/** `host:daemonPort`, the key the deployment already uses. */
|
|
140
|
+
node: string;
|
|
141
|
+
/**
|
|
142
|
+
* The machine the lease file lives on — `host:sshPort`. Candidates on one
|
|
143
|
+
* machine share one lease: two names for one server within one deployment
|
|
144
|
+
* are one writer, and two leases there would refuse each other. Defaults
|
|
145
|
+
* to `node`.
|
|
146
|
+
*/
|
|
147
|
+
machine?: string;
|
|
148
|
+
run: LeaseRunner;
|
|
149
|
+
}
|
|
150
|
+
export interface HeldLeases {
|
|
151
|
+
/** Nodes whose lease this deployment holds. Nothing else may be touched. */
|
|
152
|
+
has(node: string): boolean;
|
|
153
|
+
/** Confirm with the node before a step that changes it; throws if not ours. */
|
|
154
|
+
confirm(node: string, step: string): Promise<void>;
|
|
155
|
+
/** Host-side exclusion and token validation for the entire remote command. */
|
|
156
|
+
guard(node: string, command: string, timeoutMs?: number): string;
|
|
157
|
+
/** Nodes that could not be reached to lease them, with the reason. */
|
|
158
|
+
readonly unreachable: ReadonlyMap<string, string>;
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* Take the lease on every node, run the deployment, give them back.
|
|
162
|
+
*
|
|
163
|
+
* All nodes before any is touched, in a fixed order, so a multi-node stack is
|
|
164
|
+
* never half-deployed and then found blocked on its last machine. A node that
|
|
165
|
+
* cannot be REACHED is left out and reported, as an unprovisionable node was
|
|
166
|
+
* before — the caller skips it. A node that is HELD, or that answers and
|
|
167
|
+
* cannot lock, refuses the whole deployment: what was taken is given back
|
|
168
|
+
* first.
|
|
169
|
+
*/
|
|
170
|
+
export declare function withNodeLeases<T>(candidates: readonly LeaseCandidate[], stack: string, logger: ILogger, deploy: (leases: HeldLeases) => Promise<T>, timing?: LeaseTiming): Promise<T>;
|
|
171
|
+
//# sourceMappingURL=node-deploy-lease.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"node-deploy-lease.d.ts","sourceRoot":"","sources":["../../src/services/node-deploy-lease.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAKH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mCAAmC,CAAC;AAIjE,sDAAsD;AACtD,MAAM,WAAW,WAAW;IAC1B,8DAA8D;IAC9D,KAAK,EAAE,MAAM,CAAC;IACd,iEAAiE;IACjE,MAAM,EAAE,MAAM,CAAC;IACf,sCAAsC;IACtC,KAAK,EAAE,MAAM,CAAC;IACd,0CAA0C;IAC1C,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,WAAW;IAC1B,6DAA6D;IAC7D,GAAG,EAAE,MAAM,CAAC;IACZ,yDAAyD;IACzD,QAAQ,EAAE,MAAM,CAAC;IACjB,iEAAiE;IACjE,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,eAAO,MAAM,oBAAoB,EAAE,WAIlC,CAAC;AAEF,MAAM,MAAM,aAAa,GACrB;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,MAAM,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,WAAW,GAAG,IAAI,CAAA;KAAE,GAAG,IAAI,CAAA;CAAE,GACtF;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,WAAW,GAAG,IAAI,CAAA;CAAE,CAAC;AAElE,MAAM,MAAM,WAAW,GAAG;IAAE,IAAI,EAAE,SAAS,CAAA;CAAE,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,WAAW,GAAG,IAAI,CAAA;CAAE,CAAC;AAE7F,MAAM,MAAM,aAAa,GAAG;IAAE,IAAI,EAAE,UAAU,CAAA;CAAE,GAAG;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,MAAM,EAAE,WAAW,GAAG,IAAI,CAAA;CAAE,GAAG;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAEvH,8EAA8E;AAC9E,qBAAa,qBAAsB,SAAQ,KAAK;IAE5C,QAAQ,CAAC,IAAI,EAAE,MAAM;IACrB,QAAQ,CAAC,MAAM,EAAE,MAAM;IAFzB,YACW,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EAIxB;CACF;AAED,yCAAyC;AACzC,qBAAa,cAAe,SAAQ,KAAK;IAErC,QAAQ,CAAC,IAAI,EAAE,MAAM;IACrB,QAAQ,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI;IACnC,QAAQ,CAAC,OAAO,EAAE,MAAM;IACxB,QAAQ,CAAC,QAAQ,EAAE,MAAM;IAJ3B,YACW,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,WAAW,GAAG,IAAI,EAC1B,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAW1B;CACF;AAkCD;;;;;;;;;GASG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,SAAU,GAAG,MAAM,CAmC5G;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,WAAW,GAAG,MAAM,CAgB9E;AAED,wBAAgB,WAAW,CAAC,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAMtE;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAOxE;AAsDD,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,aAAa,CAerE;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,WAAW,CAOjE;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,aAAa,CAQrE;AAED,gFAAgF;AAChF,wBAAgB,YAAY,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI,CAWtD;AAMD,gEAAgE;AAChE,MAAM,MAAM,WAAW,GAAG,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;AAE9D,qBAAa,SAAS;IAOlB,QAAQ,CAAC,IAAI,EAAE,MAAM;IACrB,OAAO,CAAC,QAAQ,CAAC,GAAG;IAEpB,OAAO,CAAC,QAAQ,CAAC,MAAM;IATzB,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAC7B,OAAO,CAAC,KAAK,CAA+C;IAC5D,OAAO,CAAC,IAAI,CAAuB;IACnC,OAAO,CAAC,QAAQ,CAAS;IAEzB,YACW,IAAI,EAAE,MAAM,EACJ,GAAG,EAAE,WAAW,EACjC,KAAK,EAAE,MAAM,EACI,MAAM,GAAE,WAAkC,EAC3D,GAAG,GAAE,MAAM,MAAiB,EAS7B;IAEK,OAAO,IAAI,OAAO,CAAC,aAAa,CAAC,CAEtC;IAED;;;;OAIG;IACH,aAAa,CAAC,MAAM,CAAC,EAAE,OAAO,GAAG,IAAI,CAWpC;YAEa,SAAS;IAWvB;;;;OAIG;IACG,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAiBzC;IAED,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAA4E;IAExH,OAAO,IAAI,OAAO,CAAC,aAAa,CAAC,CAItC;CACF;AAED,MAAM,WAAW,cAAc;IAC7B,8DAA8D;IAC9D,IAAI,EAAE,MAAM,CAAC;IACb;;;;;OAKG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,GAAG,EAAE,WAAW,CAAC;CAClB;AAED,MAAM,WAAW,UAAU;IACzB,4EAA4E;IAC5E,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;IAC3B,+EAA+E;IAC/E,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACnD,8EAA8E;IAC9E,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACjE,sEAAsE;IACtE,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACnD;AAED;;;;;;;;;GASG;AACH,wBAAsB,cAAc,CAAC,CAAC,EACpC,UAAU,EAAE,SAAS,cAAc,EAAE,EACrC,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,OAAO,EACf,MAAM,EAAE,CAAC,MAAM,EAAE,UAAU,KAAK,OAAO,CAAC,CAAC,CAAC,EAC1C,MAAM,GAAE,WAAkC,GACzC,OAAO,CAAC,CAAC,CAAC,CAyEZ"}
|
|
@@ -0,0 +1,460 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* One writer per node.
|
|
3
|
+
*
|
|
4
|
+
* Any number of development machines may run `omnitron stack start sample test`,
|
|
5
|
+
* and every one of them is a master that deploys to the SAME node over SSH.
|
|
6
|
+
* Nothing stopped two of them — or two terminals on one of them — from
|
|
7
|
+
* interleaving: one delivering artifacts while the other restarted the apps
|
|
8
|
+
* onto half of them. There is one test server and one production
|
|
9
|
+
* infrastructure, so the exclusion has to live where the contention is: on the
|
|
10
|
+
* node.
|
|
11
|
+
*
|
|
12
|
+
* It is a LEASE, not a lock held open. A file on the node names the holder and
|
|
13
|
+
* is renewed while the deployment runs; a deployment that finds it renewed
|
|
14
|
+
* within the last `leaseSec` is refused and told who holds it; one that finds
|
|
15
|
+
* it older takes it over, and says so. A laptop closed mid-deployment therefore
|
|
16
|
+
* frees the only test server by itself, `leaseSec` after its last renewal,
|
|
17
|
+
* provided its remote command completed. A killed host worker leaves durable
|
|
18
|
+
* unresolved intent and requires inspected recovery instead of an unsafe takeover.
|
|
19
|
+
*
|
|
20
|
+
* Every read-decide-write of that file runs under `flock` on the node, so two
|
|
21
|
+
* masters deciding at the same instant cannot both win. A node that cannot
|
|
22
|
+
* give that guarantee — no `flock(1)`, or the lock directory on a network
|
|
23
|
+
* filesystem, where `flock` may exclude nothing — REFUSES the deployment
|
|
24
|
+
* rather than proceeding unlocked: a lock that cannot run is not a lock that
|
|
25
|
+
* passed.
|
|
26
|
+
*
|
|
27
|
+
* The scripts answer on stdout and exit 0 even when they refuse, so a refusal
|
|
28
|
+
* arrives as words this module can name, not as an SSH exit status. Any
|
|
29
|
+
* answer this module does not recognise is a refusal too — never a lease.
|
|
30
|
+
*/
|
|
31
|
+
import crypto from 'node:crypto';
|
|
32
|
+
import os from 'node:os';
|
|
33
|
+
import { shellEscape } from '../shared/shell-escape.js';
|
|
34
|
+
export const DEFAULT_LEASE_TIMING = {
|
|
35
|
+
dir: '/opt/omnitron/locks',
|
|
36
|
+
leaseSec: 120,
|
|
37
|
+
renewEveryMs: 30_000,
|
|
38
|
+
};
|
|
39
|
+
/** The node answered, and cannot provide exclusion. Refuse the deployment. */
|
|
40
|
+
export class LeaseUnavailableError extends Error {
|
|
41
|
+
node;
|
|
42
|
+
reason;
|
|
43
|
+
constructor(node, reason) {
|
|
44
|
+
super(`Cannot lock ${node} for deployment: ${reason}. Refusing to deploy to it unlocked.`);
|
|
45
|
+
this.node = node;
|
|
46
|
+
this.reason = reason;
|
|
47
|
+
this.name = 'LeaseUnavailableError';
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
/** Another deployment holds the node. */
|
|
51
|
+
export class LeaseHeldError extends Error {
|
|
52
|
+
node;
|
|
53
|
+
holder;
|
|
54
|
+
idleSec;
|
|
55
|
+
leaseSec;
|
|
56
|
+
constructor(node, holder, idleSec, leaseSec) {
|
|
57
|
+
const who = holder
|
|
58
|
+
? `${holder.holder} (deploying ${holder.stack}, since ${holder.startedAt})`
|
|
59
|
+
: 'a deployment whose lease file could not be read';
|
|
60
|
+
super(`${node} is being deployed by ${who}; its lease was renewed ${idleSec}s ago. ` +
|
|
61
|
+
`One writer per node: wait for it to finish. If that deployment is dead, ` +
|
|
62
|
+
`its lease becomes eligible for takeover ${Math.max(0, leaseSec - idleSec)}s from now, once remote execution has cleared.`);
|
|
63
|
+
this.node = node;
|
|
64
|
+
this.holder = holder;
|
|
65
|
+
this.idleSec = idleSec;
|
|
66
|
+
this.leaseSec = leaseSec;
|
|
67
|
+
this.name = 'LeaseHeldError';
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
const LEASE_FILE = 'deploy.lease';
|
|
71
|
+
const GUARD_FILE = 'deploy.guard';
|
|
72
|
+
const EXECUTION_GUARD_FILE = 'deploy.execution.guard';
|
|
73
|
+
const EXECUTION_RECORD_FILE = 'deploy.execution.json';
|
|
74
|
+
/** Everything that decides runs after this: exclusion, or a named refusal. */
|
|
75
|
+
function prelude(dir, refusalExit = 0) {
|
|
76
|
+
const d = shellEscape(dir);
|
|
77
|
+
return [
|
|
78
|
+
`command -v flock >/dev/null 2>&1 || { echo 'NO-FLOCK'; exit ${refusalExit}; }`,
|
|
79
|
+
`mkdir -p ${d} 2>/dev/null || { echo 'NO-DIR'; exit ${refusalExit}; }`,
|
|
80
|
+
`fs=$(stat -f -c %T ${d} 2>/dev/null || echo unknown)`,
|
|
81
|
+
`case "$fs" in nfs*|cifs|smb*|fuse*|9p|ceph) echo "NETWORK-FS $fs"; exit ${refusalExit};; esac`,
|
|
82
|
+
`exec 9>${shellEscape(`${dir}/${GUARD_FILE}`)} || { echo 'NO-GUARD'; exit ${refusalExit}; }`,
|
|
83
|
+
`flock -w 10 9 || { echo 'GUARD-TIMEOUT'; exit ${refusalExit}; }`,
|
|
84
|
+
`L=${shellEscape(`${dir}/${LEASE_FILE}`)}`,
|
|
85
|
+
];
|
|
86
|
+
}
|
|
87
|
+
function tokenNeedle(token) {
|
|
88
|
+
return shellEscape(`"token":"${token}"`);
|
|
89
|
+
}
|
|
90
|
+
/** Called under the metadata lock; never waits for a command that needs that lock. */
|
|
91
|
+
function executionIdle(timing) {
|
|
92
|
+
return [
|
|
93
|
+
`exec 8>${shellEscape(`${timing.dir}/${EXECUTION_GUARD_FILE}`)} || { echo 'NO-GUARD'; exit 0; }`,
|
|
94
|
+
`flock -n 8 || { echo 'EXECUTION-BUSY'; exit 0; }`,
|
|
95
|
+
`if [ -e ${shellEscape(`${timing.dir}/${EXECUTION_RECORD_FILE}`)} ]; then echo 'EXECUTION-UNRESOLVED'; exit 0; fi`,
|
|
96
|
+
];
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Keep host mutations exclusive for the entire remote command, not just the
|
|
100
|
+
* controller's pre-step check. The child does not inherit the lock descriptor.
|
|
101
|
+
* A durable intent survives SIGKILL of the lock holder: it is never treated as
|
|
102
|
+
* completed merely because a lease or timeout elapsed. Ordinary disconnects
|
|
103
|
+
* leave the host worker to finish and clear its own record. An unresolved
|
|
104
|
+
* record requires inspected recovery before another writer can take over.
|
|
105
|
+
* Commands must synchronously finish their mutations; managed daemon startup
|
|
106
|
+
* may detach the daemon, but must not detach delayed deployment writes.
|
|
107
|
+
*/
|
|
108
|
+
export function guardScript(timing, token, command, timeoutMs = 600_000) {
|
|
109
|
+
if (!Number.isSafeInteger(timeoutMs) || timeoutMs <= 0 || timeoutMs > 86_400_000)
|
|
110
|
+
throw new Error('Invalid guarded command timeout');
|
|
111
|
+
const id = crypto.randomUUID();
|
|
112
|
+
const file = `${timing.dir}/${EXECUTION_RECORD_FILE}`;
|
|
113
|
+
const temporary = `${file}.${id}.part`;
|
|
114
|
+
const record = JSON.stringify({ schema: 1, id, token, timeoutMs });
|
|
115
|
+
const body = [
|
|
116
|
+
...prelude(timing.dir, 73),
|
|
117
|
+
`command -v timeout >/dev/null 2>&1 && command -v sync >/dev/null 2>&1 || { echo 'Execution fencing requires timeout and sync' >&2; exit 73; }`,
|
|
118
|
+
`if [ -e ${shellEscape(file)} ]; then echo 'Unresolved remote deployment command; inspected recovery is required' >&2; exit 73; fi`,
|
|
119
|
+
`if ! [ -s "$L" ] || ! grep -qF ${tokenNeedle(token)} "$L"; then echo 'Deployment lease was lost before remote execution' >&2; exit 73; fi`,
|
|
120
|
+
`umask 077`,
|
|
121
|
+
`printf '%s\\n' ${shellEscape(record)} > ${shellEscape(temporary)} && sync -f ${shellEscape(temporary)} && mv -f ${shellEscape(temporary)} ${shellEscape(file)} && sync -f ${shellEscape(timing.dir)} || exit 73`,
|
|
122
|
+
`touch "$L" || exit 73`,
|
|
123
|
+
`flock -u 9; exec 9>&-`,
|
|
124
|
+
`timeout --signal=TERM --kill-after=5s ${Math.ceil(timeoutMs / 1000)}s sh -c ${shellEscape(command)}`,
|
|
125
|
+
`result=$?`,
|
|
126
|
+
// A timeout or killed supervisor does not prove all descendant writers
|
|
127
|
+
// stopped. Retain intent; a new writer needs inspected recovery.
|
|
128
|
+
`if [ "$result" -ge 124 ]; then echo 'Remote command termination needs inspected recovery' >&2; exit "$result"; fi`,
|
|
129
|
+
// Retake metadata only after the bounded command has returned. If cleanup
|
|
130
|
+
// cannot be proved, the unresolved record remains and future work refuses.
|
|
131
|
+
`exec 9>${shellEscape(`${timing.dir}/${GUARD_FILE}`)} || exit 73`,
|
|
132
|
+
`flock -w 10 9 || exit 73`,
|
|
133
|
+
`if ! [ -f ${shellEscape(file)} ] || ! grep -qF ${shellEscape(`"id":"${id}"`)} ${shellEscape(file)}; then echo 'Remote execution record changed' >&2; exit 73; fi`,
|
|
134
|
+
`rm -f ${shellEscape(file)} && sync -f ${shellEscape(timing.dir)} || exit 73`,
|
|
135
|
+
`exit "$result"`,
|
|
136
|
+
].join('\n');
|
|
137
|
+
return [
|
|
138
|
+
`command -v flock >/dev/null 2>&1 || { echo 'Execution fencing requires flock' >&2; exit 73; }`,
|
|
139
|
+
`mkdir -p ${shellEscape(timing.dir)} || exit 73`,
|
|
140
|
+
// --close prevents a launched service/background process from retaining
|
|
141
|
+
// the kernel lock forever. The durable record handles lock-holder death.
|
|
142
|
+
`flock --exclusive --timeout 30 --close ${shellEscape(`${timing.dir}/${EXECUTION_GUARD_FILE}`)} sh -c ${shellEscape(body)}`,
|
|
143
|
+
].join('\n');
|
|
144
|
+
}
|
|
145
|
+
export function acquireScript(timing, record) {
|
|
146
|
+
return [
|
|
147
|
+
...prelude(timing.dir),
|
|
148
|
+
`now=$(date +%s)`,
|
|
149
|
+
`if [ -s "$L" ]; then`,
|
|
150
|
+
` m=$(stat -c %Y "$L" 2>/dev/null || stat -f %m "$L")`,
|
|
151
|
+
` idle=$((now - m))`,
|
|
152
|
+
// Our own token: a retry of this same attempt. Renew and say so.
|
|
153
|
+
` if grep -qF ${tokenNeedle(record.token)} "$L"; then touch "$L"; echo 'ACQUIRED'; exit 0; fi`,
|
|
154
|
+
// Renewed within the lease — including ZERO seconds ago — is held.
|
|
155
|
+
` if [ "$idle" -lt ${timing.leaseSec} ]; then printf 'HELD %s\\t' "$idle"; cat "$L"; echo; exit 0; fi`,
|
|
156
|
+
` printf 'LAPSED %s\\t' "$idle"; cat "$L"; echo`,
|
|
157
|
+
`fi`,
|
|
158
|
+
...executionIdle(timing),
|
|
159
|
+
`printf '%s' ${shellEscape(JSON.stringify(record))} > "$L.tmp" && mv "$L.tmp" "$L" && echo 'ACQUIRED'`,
|
|
160
|
+
].join('\n');
|
|
161
|
+
}
|
|
162
|
+
export function renewScript(timing, token) {
|
|
163
|
+
return [
|
|
164
|
+
...prelude(timing.dir),
|
|
165
|
+
`if [ -s "$L" ] && grep -qF ${tokenNeedle(token)} "$L"; then touch "$L"; echo 'RENEWED'; ` +
|
|
166
|
+
`else printf 'LOST\\t'; cat "$L" 2>/dev/null; echo; fi`,
|
|
167
|
+
].join('\n');
|
|
168
|
+
}
|
|
169
|
+
export function releaseScript(timing, token) {
|
|
170
|
+
return [
|
|
171
|
+
...prelude(timing.dir),
|
|
172
|
+
...executionIdle(timing),
|
|
173
|
+
`if [ -s "$L" ] && grep -qF ${tokenNeedle(token)} "$L"; then rm -f "$L"; echo 'RELEASED'; ` +
|
|
174
|
+
`else printf 'NOT-HELD\\t'; cat "$L" 2>/dev/null; echo; fi`,
|
|
175
|
+
].join('\n');
|
|
176
|
+
}
|
|
177
|
+
const REFUSALS = {
|
|
178
|
+
'NO-FLOCK': 'the node has no flock(1) (util-linux)',
|
|
179
|
+
'EXECUTION-BUSY': 'a remote deployment command is still executing; the lease cannot be replaced',
|
|
180
|
+
'EXECUTION-UNRESOLVED': 'a remote deployment command has unresolved durable intent; inspected recovery is required',
|
|
181
|
+
'NO-DIR': 'the lock directory could not be created',
|
|
182
|
+
'NO-GUARD': 'the guard file could not be opened',
|
|
183
|
+
'GUARD-TIMEOUT': 'the guard stayed locked for 10s — a lease operation on the node is stuck',
|
|
184
|
+
};
|
|
185
|
+
function lines(out) {
|
|
186
|
+
return out
|
|
187
|
+
.split('\n')
|
|
188
|
+
.map((l) => l.replace(/\r$/, ''))
|
|
189
|
+
.filter((l) => l.trim() !== '');
|
|
190
|
+
}
|
|
191
|
+
function refusalIn(node, ls) {
|
|
192
|
+
for (const l of ls) {
|
|
193
|
+
const code = l.trim();
|
|
194
|
+
if (REFUSALS[code])
|
|
195
|
+
throw new LeaseUnavailableError(node, REFUSALS[code]);
|
|
196
|
+
if (code.startsWith('NETWORK-FS ')) {
|
|
197
|
+
throw new LeaseUnavailableError(node, `the lock directory is on a network filesystem (${code.slice(11)}), where flock may exclude nothing`);
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
/** `<WORD> <n>\t<json>` → the number and the record. */
|
|
202
|
+
function tagged(line, word) {
|
|
203
|
+
const tab = line.indexOf('\t');
|
|
204
|
+
const head = tab === -1 ? line : line.slice(0, tab);
|
|
205
|
+
const n = Number.parseInt(head.slice(word.length).trim(), 10);
|
|
206
|
+
return { n: Number.isFinite(n) ? n : 0, record: tab === -1 ? null : parseRecord(line.slice(tab + 1)) };
|
|
207
|
+
}
|
|
208
|
+
function parseRecord(text) {
|
|
209
|
+
try {
|
|
210
|
+
const o = JSON.parse(text.trim());
|
|
211
|
+
return o && typeof o.token === 'string' && typeof o.holder === 'string'
|
|
212
|
+
? { token: o.token, holder: o.holder, stack: String(o.stack ?? ''), startedAt: String(o.startedAt ?? '') }
|
|
213
|
+
: null;
|
|
214
|
+
}
|
|
215
|
+
catch {
|
|
216
|
+
return null;
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
function unrecognised(node, what, out) {
|
|
220
|
+
throw new LeaseUnavailableError(node, `the ${what} answer was not recognised: ${JSON.stringify(out.slice(0, 200))}`);
|
|
221
|
+
}
|
|
222
|
+
export function parseAcquire(node, out) {
|
|
223
|
+
const ls = lines(out);
|
|
224
|
+
refusalIn(node, ls);
|
|
225
|
+
const held = ls.find((l) => l.startsWith('HELD '));
|
|
226
|
+
if (held) {
|
|
227
|
+
const { n, record } = tagged(held, 'HELD');
|
|
228
|
+
return { kind: 'held', idleSec: n, holder: record };
|
|
229
|
+
}
|
|
230
|
+
if (ls.some((l) => l.trim() === 'ACQUIRED')) {
|
|
231
|
+
const lapsed = ls.find((l) => l.startsWith('LAPSED '));
|
|
232
|
+
if (!lapsed)
|
|
233
|
+
return { kind: 'acquired', lapsed: null };
|
|
234
|
+
const { n, record } = tagged(lapsed, 'LAPSED');
|
|
235
|
+
return { kind: 'acquired', lapsed: { idleSec: n, previous: record } };
|
|
236
|
+
}
|
|
237
|
+
return unrecognised(node, 'acquire', out);
|
|
238
|
+
}
|
|
239
|
+
export function parseRenew(node, out) {
|
|
240
|
+
const ls = lines(out);
|
|
241
|
+
refusalIn(node, ls);
|
|
242
|
+
if (ls.some((l) => l.trim() === 'RENEWED'))
|
|
243
|
+
return { kind: 'renewed' };
|
|
244
|
+
const lost = ls.find((l) => l.startsWith('LOST'));
|
|
245
|
+
if (lost)
|
|
246
|
+
return { kind: 'lost', holder: tagged(lost, 'LOST').record };
|
|
247
|
+
return unrecognised(node, 'renew', out);
|
|
248
|
+
}
|
|
249
|
+
export function parseRelease(node, out) {
|
|
250
|
+
const ls = lines(out);
|
|
251
|
+
if (ls.some((l) => l.trim() === 'EXECUTION-BUSY' || l.trim() === 'EXECUTION-UNRESOLVED'))
|
|
252
|
+
return { kind: 'busy' };
|
|
253
|
+
refusalIn(node, ls);
|
|
254
|
+
if (ls.some((l) => l.trim() === 'RELEASED'))
|
|
255
|
+
return { kind: 'released' };
|
|
256
|
+
const notHeld = ls.find((l) => l.startsWith('NOT-HELD'));
|
|
257
|
+
if (notHeld)
|
|
258
|
+
return { kind: 'not-held', holder: tagged(notHeld, 'NOT-HELD').record };
|
|
259
|
+
return unrecognised(node, 'release', out);
|
|
260
|
+
}
|
|
261
|
+
/** A timing that could hand the node to a second writer is refused outright. */
|
|
262
|
+
export function assertTiming(timing) {
|
|
263
|
+
if (!Number.isInteger(timing.leaseSec) || timing.leaseSec <= 0) {
|
|
264
|
+
throw new Error(`leaseSec must be a positive whole number of seconds, not ${String(timing.leaseSec)}`);
|
|
265
|
+
}
|
|
266
|
+
if (!(timing.renewEveryMs > 0) || timing.renewEveryMs * 2 > timing.leaseSec * 1000) {
|
|
267
|
+
throw new Error(`renewEveryMs (${String(timing.renewEveryMs)}) must be positive and at most half of leaseSec ` +
|
|
268
|
+
`(${timing.leaseSec}s): one missed renewal must not be enough to lose the node`);
|
|
269
|
+
}
|
|
270
|
+
if (!timing.dir.startsWith('/'))
|
|
271
|
+
throw new Error(`the lease directory must be absolute, not '${timing.dir}'`);
|
|
272
|
+
}
|
|
273
|
+
function describeHolder(record) {
|
|
274
|
+
return record ? `${record.holder} (deploying ${record.stack}, since ${record.startedAt})` : 'an unreadable lease';
|
|
275
|
+
}
|
|
276
|
+
export class NodeLease {
|
|
277
|
+
node;
|
|
278
|
+
run;
|
|
279
|
+
timing;
|
|
280
|
+
record;
|
|
281
|
+
timer = null;
|
|
282
|
+
lost = null;
|
|
283
|
+
renewing = false;
|
|
284
|
+
constructor(node, run, stack, timing = DEFAULT_LEASE_TIMING, now = Date.now) {
|
|
285
|
+
this.node = node;
|
|
286
|
+
this.run = run;
|
|
287
|
+
this.timing = timing;
|
|
288
|
+
assertTiming(timing);
|
|
289
|
+
this.record = {
|
|
290
|
+
token: crypto.randomUUID(),
|
|
291
|
+
holder: `${os.hostname()} pid ${process.pid}`,
|
|
292
|
+
stack,
|
|
293
|
+
startedAt: new Date(now()).toISOString(),
|
|
294
|
+
};
|
|
295
|
+
}
|
|
296
|
+
async acquire() {
|
|
297
|
+
return parseAcquire(this.node, await this.run(acquireScript(this.timing, this.record)));
|
|
298
|
+
}
|
|
299
|
+
/**
|
|
300
|
+
* Renew until released. A renewal that finds another holder marks the lease
|
|
301
|
+
* lost; one that cannot reach the node is logged and retried — the next
|
|
302
|
+
* `confirm` asks the node directly before anything else is changed on it.
|
|
303
|
+
*/
|
|
304
|
+
startRenewing(logger) {
|
|
305
|
+
if (this.timer)
|
|
306
|
+
return;
|
|
307
|
+
this.timer = setInterval(() => {
|
|
308
|
+
void this.renewOnce().catch((err) => {
|
|
309
|
+
logger?.warn({ node: this.node, error: err.message }, 'Could not renew the deploy lease — will ask the node again before the next step');
|
|
310
|
+
});
|
|
311
|
+
}, this.timing.renewEveryMs);
|
|
312
|
+
this.timer.unref?.();
|
|
313
|
+
}
|
|
314
|
+
async renewOnce() {
|
|
315
|
+
if (this.lost || this.renewing)
|
|
316
|
+
return;
|
|
317
|
+
this.renewing = true;
|
|
318
|
+
try {
|
|
319
|
+
const answer = parseRenew(this.node, await this.run(renewScript(this.timing, this.record.token)));
|
|
320
|
+
if (answer.kind === 'lost')
|
|
321
|
+
this.lost = `it was taken over by ${describeHolder(answer.holder)}`;
|
|
322
|
+
}
|
|
323
|
+
finally {
|
|
324
|
+
this.renewing = false;
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
/**
|
|
328
|
+
* Ask the node whether the lease is still this deployment's, before a step
|
|
329
|
+
* that changes the node. Throws when it is not — or when the node cannot
|
|
330
|
+
* say, which is not a yes.
|
|
331
|
+
*/
|
|
332
|
+
async confirm(step) {
|
|
333
|
+
if (!this.lost) {
|
|
334
|
+
let answer;
|
|
335
|
+
try {
|
|
336
|
+
answer = parseRenew(this.node, await this.run(renewScript(this.timing, this.record.token)));
|
|
337
|
+
}
|
|
338
|
+
catch (err) {
|
|
339
|
+
throw new Error(`Stopped before ${step} on ${this.node}: could not confirm the deploy lease — ${err.message}`, {
|
|
340
|
+
cause: err,
|
|
341
|
+
});
|
|
342
|
+
}
|
|
343
|
+
if (answer.kind === 'renewed')
|
|
344
|
+
return;
|
|
345
|
+
this.lost = `it was taken over by ${describeHolder(answer.holder)}`;
|
|
346
|
+
}
|
|
347
|
+
throw new Error(`Stopped before ${step} on ${this.node}: the deploy lease is no longer this deployment's — ${this.lost}. ` +
|
|
348
|
+
`Was this machine asleep for more than ${this.timing.leaseSec}s?`);
|
|
349
|
+
}
|
|
350
|
+
guard(command, timeoutMs) { return guardScript(this.timing, this.record.token, command, timeoutMs); }
|
|
351
|
+
async release() {
|
|
352
|
+
if (this.timer)
|
|
353
|
+
clearInterval(this.timer);
|
|
354
|
+
this.timer = null;
|
|
355
|
+
return parseRelease(this.node, await this.run(releaseScript(this.timing, this.record.token)));
|
|
356
|
+
}
|
|
357
|
+
}
|
|
358
|
+
/**
|
|
359
|
+
* Take the lease on every node, run the deployment, give them back.
|
|
360
|
+
*
|
|
361
|
+
* All nodes before any is touched, in a fixed order, so a multi-node stack is
|
|
362
|
+
* never half-deployed and then found blocked on its last machine. A node that
|
|
363
|
+
* cannot be REACHED is left out and reported, as an unprovisionable node was
|
|
364
|
+
* before — the caller skips it. A node that is HELD, or that answers and
|
|
365
|
+
* cannot lock, refuses the whole deployment: what was taken is given back
|
|
366
|
+
* first.
|
|
367
|
+
*/
|
|
368
|
+
export async function withNodeLeases(candidates, stack, logger, deploy, timing = DEFAULT_LEASE_TIMING) {
|
|
369
|
+
const machineOf = (c) => c.machine ?? c.node;
|
|
370
|
+
const order = (c) => `${machineOf(c)}\u0000${c.node}`;
|
|
371
|
+
const ordered = [...candidates].sort((a, b) => (order(a) < order(b) ? -1 : order(a) > order(b) ? 1 : 0));
|
|
372
|
+
const held = new Map();
|
|
373
|
+
const byMachine = new Map();
|
|
374
|
+
const unreachable = new Map();
|
|
375
|
+
const unreachableMachines = new Map();
|
|
376
|
+
try {
|
|
377
|
+
for (const candidate of ordered) {
|
|
378
|
+
const machine = machineOf(candidate);
|
|
379
|
+
const shared = byMachine.get(machine);
|
|
380
|
+
if (shared) {
|
|
381
|
+
held.set(candidate.node, shared);
|
|
382
|
+
continue;
|
|
383
|
+
}
|
|
384
|
+
const lost = unreachableMachines.get(machine);
|
|
385
|
+
if (lost !== undefined) {
|
|
386
|
+
unreachable.set(candidate.node, lost);
|
|
387
|
+
continue;
|
|
388
|
+
}
|
|
389
|
+
const lease = new NodeLease(candidate.node, candidate.run, stack, timing);
|
|
390
|
+
let answer;
|
|
391
|
+
try {
|
|
392
|
+
answer = await lease.acquire();
|
|
393
|
+
}
|
|
394
|
+
catch (err) {
|
|
395
|
+
if (err instanceof LeaseUnavailableError)
|
|
396
|
+
throw err;
|
|
397
|
+
unreachable.set(candidate.node, err.message);
|
|
398
|
+
unreachableMachines.set(machine, err.message);
|
|
399
|
+
logger.warn({ node: candidate.node, stack, error: err.message }, 'Could not reach this node to lease it — it will not be deployed to');
|
|
400
|
+
continue;
|
|
401
|
+
}
|
|
402
|
+
if (answer.kind === 'held') {
|
|
403
|
+
throw new LeaseHeldError(candidate.node, answer.holder, answer.idleSec, timing.leaseSec);
|
|
404
|
+
}
|
|
405
|
+
if (answer.lapsed) {
|
|
406
|
+
logger.warn({ node: candidate.node, stack, previous: answer.lapsed.previous, idleSec: answer.lapsed.idleSec }, 'Took over a lapsed deploy lease — its holder stopped renewing it');
|
|
407
|
+
}
|
|
408
|
+
held.set(candidate.node, lease);
|
|
409
|
+
byMachine.set(machine, lease);
|
|
410
|
+
lease.startRenewing(logger);
|
|
411
|
+
logger.info({ node: candidate.node, stack, token: lease.record.token }, 'Deploy lease taken');
|
|
412
|
+
}
|
|
413
|
+
}
|
|
414
|
+
catch (err) {
|
|
415
|
+
await releaseAll(held, stack, logger);
|
|
416
|
+
throw err;
|
|
417
|
+
}
|
|
418
|
+
try {
|
|
419
|
+
return await deploy({
|
|
420
|
+
has: (node) => held.has(node),
|
|
421
|
+
confirm: async (node, step) => {
|
|
422
|
+
const lease = held.get(node);
|
|
423
|
+
if (!lease)
|
|
424
|
+
throw new Error(`Refusing ${step} on ${node}: this deployment does not hold its lease`);
|
|
425
|
+
await lease.confirm(step);
|
|
426
|
+
},
|
|
427
|
+
guard: (node, command, timeoutMs) => {
|
|
428
|
+
const lease = held.get(node);
|
|
429
|
+
if (!lease)
|
|
430
|
+
throw new Error(`Refusing remote command on ${node}: this deployment does not hold its lease`);
|
|
431
|
+
return lease.guard(command, timeoutMs);
|
|
432
|
+
},
|
|
433
|
+
unreachable,
|
|
434
|
+
});
|
|
435
|
+
}
|
|
436
|
+
finally {
|
|
437
|
+
await releaseAll(held, stack, logger);
|
|
438
|
+
}
|
|
439
|
+
}
|
|
440
|
+
async function releaseAll(held, stack, logger) {
|
|
441
|
+
// Once per lease: several names may share one machine's.
|
|
442
|
+
for (const lease of new Set(held.values())) {
|
|
443
|
+
try {
|
|
444
|
+
const answer = await lease.release();
|
|
445
|
+
if (answer.kind === 'not-held') {
|
|
446
|
+
logger.warn({ node: lease.node, stack, holder: answer.holder }, 'The deploy lease was no longer ours to give back — another deployment took it over');
|
|
447
|
+
}
|
|
448
|
+
else if (answer.kind === 'busy') {
|
|
449
|
+
logger.warn({ node: lease.node, stack }, 'Deploy lease retained: remote command is active or requires inspected recovery');
|
|
450
|
+
}
|
|
451
|
+
else {
|
|
452
|
+
logger.info({ node: lease.node, stack }, 'Deploy lease released');
|
|
453
|
+
}
|
|
454
|
+
}
|
|
455
|
+
catch (err) {
|
|
456
|
+
logger.warn({ node: lease.node, stack, error: err.message }, 'Could not release the deploy lease — takeover also requires remote execution to be clear');
|
|
457
|
+
}
|
|
458
|
+
}
|
|
459
|
+
}
|
|
460
|
+
//# sourceMappingURL=node-deploy-lease.js.map
|