@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
|
@@ -15,23 +15,88 @@
|
|
|
15
15
|
* ResolvedContainer[] → ContainerRuntime → Docker CLI
|
|
16
16
|
* Health Loop → detect failure → auto-restart (exponential backoff)
|
|
17
17
|
*/
|
|
18
|
+
import { computeBackoff } from '@omnitron-dev/titan/utils';
|
|
18
19
|
import { resolveInfrastructure, resolveOmnitronPg, getManagedNetwork } from './service-resolver.js';
|
|
19
20
|
import { PhantomEndpointJanitor } from './phantom-endpoint-janitor.js';
|
|
20
|
-
import {
|
|
21
|
+
import { LOCAL_INFRA_HOST } from '../shared/local-infra-host.js';
|
|
22
|
+
import { isDockerAvailable, getContainerState, createContainer, startContainer, removeContainer, ensureImage, waitForHealthy, createVolume, containerSpecHash, } from './container-runtime.js';
|
|
23
|
+
import { summariseProvisioning, describeProvisioning } from './provisioning-outcome.js';
|
|
24
|
+
import { OMNITRON_PG_PORT, OMNITRON_PG_USER, OMNITRON_PG_PASSWORD, OMNITRON_PG_DATABASE, } from '../database/connection.js';
|
|
21
25
|
const RECONCILE_INTERVAL = 30_000; // 30s health sweep
|
|
22
26
|
const STARTUP_TIMEOUT = 120_000; // 2min max per service
|
|
23
27
|
/** Consecutive 'unhealthy' ticks before recreate. 2 ticks @ 30s = 60s grace. */
|
|
24
28
|
const UNHEALTHY_RESTART_THRESHOLD = 2;
|
|
25
|
-
/**
|
|
26
|
-
const
|
|
27
|
-
|
|
28
|
-
const
|
|
29
|
-
|
|
29
|
+
/** Restart circuit-breaker: first failed-restart backoff, doubled each failure. */
|
|
30
|
+
const RESTART_BACKOFF_BASE = 30_000; // 30s
|
|
31
|
+
/** Restart circuit-breaker: backoff ceiling (30s → 1m → 2m … capped here). */
|
|
32
|
+
const RESTART_BACKOFF_MAX = 15 * 60_000; // 15min
|
|
33
|
+
/**
|
|
34
|
+
* Restart-circuit-breaker backoff schedule: the delay (ms) to wait before the
|
|
35
|
+
* next restart attempt after `failures` consecutive failed (re)creates.
|
|
36
|
+
* Exponential from RESTART_BACKOFF_BASE, capped at RESTART_BACKOFF_MAX so a
|
|
37
|
+
* permanently-broken service settles into an occasional retry instead of
|
|
38
|
+
* hammering the supervisor every 30s.
|
|
39
|
+
*
|
|
40
|
+
* Delegates to the shared titan `computeBackoff` (the same helper the downstream
|
|
41
|
+
* backends and the titan packages use) so the exponential shape lives in ONE
|
|
42
|
+
* place. Exported for tests.
|
|
43
|
+
*/
|
|
44
|
+
export function restartBackoffMs(failures) {
|
|
45
|
+
if (failures < 1)
|
|
46
|
+
return 0;
|
|
47
|
+
return computeBackoff({ attempt: failures - 1, baseMs: RESTART_BACKOFF_BASE, maxMs: RESTART_BACKOFF_MAX });
|
|
48
|
+
}
|
|
49
|
+
// Omnitron internal PG connection defaults live in `database/connection.ts`
|
|
50
|
+
// so the container spec below and every client that connects to it are
|
|
51
|
+
// derived from the same values (see the import above).
|
|
52
|
+
/**
|
|
53
|
+
* What to do about the control plane's own database.
|
|
54
|
+
*
|
|
55
|
+
* Three cases that look alike and are not:
|
|
56
|
+
*
|
|
57
|
+
* - a node's daemon keeps its state in SQLite and needs no database at all;
|
|
58
|
+
* - one is running, so it gets the same reconcile — and so the same
|
|
59
|
+
* `containerSpecHash` drift check — as every app service;
|
|
60
|
+
* - nothing is running, so provision.
|
|
61
|
+
*
|
|
62
|
+
* The middle case is the one that was missing. "Already running" was read as
|
|
63
|
+
* "configured as declared", and the database was adopted exactly as it stood.
|
|
64
|
+
* Measured: `omnitron-pg`, created before published ports were bound to
|
|
65
|
+
* loopback, survived on 0.0.0.0:5480 through the fix that reached all eleven
|
|
66
|
+
* other managed containers, and still answered `nc -vz <lan-address> 5480`
|
|
67
|
+
* from another machine months later, while `sample-dev-postgres` beside it in
|
|
68
|
+
* `docker ps` was correctly on 127.0.0.1.
|
|
69
|
+
*
|
|
70
|
+
* `reconcileName` is the subtlety. The control-plane database is ONE
|
|
71
|
+
* container per host — it owns port 5480 — but each daemon resolves a name
|
|
72
|
+
* carrying its own project prefix, so a daemon on the `sample/dev` stack
|
|
73
|
+
* computes `sample-dev-pg` while the container that exists is `omnitron-pg`.
|
|
74
|
+
* Reconciling the running container against a spec under the OTHER name
|
|
75
|
+
* creates a second one and collides on the port; the first version of this
|
|
76
|
+
* did exactly that and corrected nothing. The name to reconcile is therefore
|
|
77
|
+
* the name of the container that is actually there, and the spec is
|
|
78
|
+
* everything else. `containerSpecHash` does not cover the name, so the drift
|
|
79
|
+
* comparison is unaffected either way.
|
|
80
|
+
*
|
|
81
|
+
* A differing name is not evidence of another owner: only omnitron creates
|
|
82
|
+
* this container, and it carries omnitron's own `omnitron.internal` label.
|
|
83
|
+
*/
|
|
84
|
+
export function decideControlPlaneDatabase(input) {
|
|
85
|
+
if (!input.needsControlPlaneDatabase)
|
|
86
|
+
return { action: 'skip' };
|
|
87
|
+
if (input.running?.status !== 'running')
|
|
88
|
+
return { action: 'provision' };
|
|
89
|
+
return { action: 'reconcile', reconcileName: input.running.name ?? input.desiredName };
|
|
90
|
+
}
|
|
30
91
|
export class InfrastructureService {
|
|
31
92
|
logger;
|
|
32
93
|
config;
|
|
33
94
|
presetRegistry;
|
|
95
|
+
serviceOverrides;
|
|
96
|
+
needsControlPlaneDatabase;
|
|
34
97
|
desiredContainers = [];
|
|
98
|
+
/** What the most recent reconcile did to each service. */
|
|
99
|
+
lastActions = new Map();
|
|
35
100
|
omnitronPgContainer;
|
|
36
101
|
usingGlobalOmnitronPg = false;
|
|
37
102
|
healthTimer = null;
|
|
@@ -46,17 +111,45 @@ export class InfrastructureService {
|
|
|
46
111
|
* making transient pressure look like outages.
|
|
47
112
|
*/
|
|
48
113
|
unhealthyTicks = new Map();
|
|
114
|
+
/**
|
|
115
|
+
* Per-service restart circuit-breaker. A container whose (re)create keeps
|
|
116
|
+
* failing — an image that won't pull, or infra stuck on an unrecoverable
|
|
117
|
+
* error — must NOT be retried every 30s forever: that churn (docker calls +
|
|
118
|
+
* error logging) is what wedged the daemon's event loop and let an external
|
|
119
|
+
* "socket unreachable → SIGTERM" kill the whole daemon during the 2026-05
|
|
120
|
+
* outage. After each failed restart we back off exponentially (30s → 1m →
|
|
121
|
+
* 2m … capped at 15m); a successful restart or an externally-recovered
|
|
122
|
+
* 'running' observation resets it.
|
|
123
|
+
*/
|
|
124
|
+
restartBackoff = new Map();
|
|
49
125
|
/**
|
|
50
126
|
* T#75: phantom-endpoint janitor instance. Created in `provision()`
|
|
51
127
|
* once we know Docker is reachable; torn down in `teardown()`.
|
|
52
128
|
*/
|
|
53
129
|
phantomJanitor = null;
|
|
54
|
-
constructor(logger, config, normalizedServices, presetRegistry
|
|
130
|
+
constructor(logger, config, normalizedServices, presetRegistry,
|
|
131
|
+
/**
|
|
132
|
+
* Stack overrides. A service marked `disabled` here is not provisioned,
|
|
133
|
+
* and one pointed at an `external` address is not provisioned either —
|
|
134
|
+
* there is nothing to create, and the address reaches the application
|
|
135
|
+
* through its environment instead.
|
|
136
|
+
*/
|
|
137
|
+
serviceOverrides,
|
|
138
|
+
/**
|
|
139
|
+
* Whether this daemon stores its own state in Postgres.
|
|
140
|
+
*
|
|
141
|
+
* True for a master, which is where projects, nodes, metrics and logs
|
|
142
|
+
* live. False for a node: its daemon keeps that in SQLite and reads a
|
|
143
|
+
* Postgres never.
|
|
144
|
+
*/
|
|
145
|
+
needsControlPlaneDatabase = true) {
|
|
55
146
|
this.logger = logger;
|
|
56
147
|
this.config = config;
|
|
57
148
|
this.presetRegistry = presetRegistry;
|
|
149
|
+
this.serviceOverrides = serviceOverrides;
|
|
150
|
+
this.needsControlPlaneDatabase = needsControlPlaneDatabase;
|
|
58
151
|
this.normalizedServices = normalizedServices ?? {};
|
|
59
|
-
this.desiredContainers = resolveInfrastructure(config, normalizedServices);
|
|
152
|
+
this.desiredContainers = resolveInfrastructure(config, normalizedServices, serviceOverrides);
|
|
60
153
|
this.omnitronPgContainer = resolveOmnitronPg();
|
|
61
154
|
}
|
|
62
155
|
/**
|
|
@@ -111,26 +204,52 @@ export class InfrastructureService {
|
|
|
111
204
|
// The stack-prefixed container (e.g. omni-dev-pg) shares the same port,
|
|
112
205
|
// so we must not create/start it when the global one is active.
|
|
113
206
|
const globalOmnitronPg = await getContainerState('omnitron-pg');
|
|
114
|
-
const
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
207
|
+
const decision = decideControlPlaneDatabase({
|
|
208
|
+
needsControlPlaneDatabase: this.needsControlPlaneDatabase,
|
|
209
|
+
running: globalOmnitronPg,
|
|
210
|
+
desiredName: this.omnitronPgContainer.name,
|
|
211
|
+
});
|
|
212
|
+
if (decision.action === 'skip') {
|
|
213
|
+
// A node's daemon keeps its own state in SQLite — `SlaveStorageService`,
|
|
214
|
+
// `~/.omnitron/data/slave.db` — and reads this database never. Creating
|
|
215
|
+
// it anyway gave every provisioned node a Postgres nobody queries, on
|
|
216
|
+
// default credentials, and until published ports were bound to
|
|
217
|
+
// loopback it was reachable from the internet: measured answering on
|
|
218
|
+
// 0.0.0.0:5480 on a host whose firewall allows only SSH.
|
|
219
|
+
//
|
|
220
|
+
// The control plane's database belongs to the control plane.
|
|
221
|
+
this.logger.debug('This daemon keeps its own state in SQLite — not provisioning a control-plane database');
|
|
222
|
+
}
|
|
223
|
+
else if (decision.action === 'reconcile') {
|
|
119
224
|
this.usingGlobalOmnitronPg = true;
|
|
120
|
-
|
|
121
|
-
//
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
225
|
+
// A stack-prefixed leftover cannot run beside the global one — they
|
|
226
|
+
// share port 5480 — so it goes before anything else touches that port.
|
|
227
|
+
if (this.omnitronPgContainer.name !== decision.reconcileName) {
|
|
228
|
+
const stalePg = await getContainerState(this.omnitronPgContainer.name);
|
|
229
|
+
if (stalePg) {
|
|
230
|
+
try {
|
|
231
|
+
await removeContainer(this.omnitronPgContainer.name);
|
|
232
|
+
this.logger.info({ service: this.omnitronPgContainer.name }, 'Removed stale stack-prefixed PG container');
|
|
233
|
+
}
|
|
234
|
+
catch { /* already gone */ }
|
|
127
235
|
}
|
|
128
|
-
catch { /* already gone */ }
|
|
129
236
|
}
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
237
|
+
// The same reconcile, and so the same drift check, as every app
|
|
238
|
+
// service — under the name the container actually has. Its data lives
|
|
239
|
+
// in the `omnitron-pg-data` volume and outlives the container it is
|
|
240
|
+
// recreated into.
|
|
241
|
+
// Name AND volume, not one of them. `resolveOmnitronPg` derives both
|
|
242
|
+
// from the container prefix, so overriding only the name produced a
|
|
243
|
+
// container called `omnitron-pg` mounting `sample-dev-pg-data` — the
|
|
244
|
+
// global identity on a stack-scoped volume, and the stack's own
|
|
245
|
+
// `omnitron-pg-data` left dangling where a `docker volume prune` would
|
|
246
|
+
// take it silently. The two names are one decision and must move
|
|
247
|
+
// together.
|
|
248
|
+
const reconciled = { ...this.omnitronPgContainer, name: decision.reconcileName };
|
|
249
|
+
if (decision.reconcileName !== this.omnitronPgContainer.name) {
|
|
250
|
+
reconciled.volumes = this.omnitronPgContainer.volumes.map((v) => v.target === '/var/lib/postgresql/data' ? { ...v, source: `${decision.reconcileName}-data` } : v);
|
|
251
|
+
}
|
|
252
|
+
await this.reconcileService(reconciled);
|
|
134
253
|
}
|
|
135
254
|
else {
|
|
136
255
|
try {
|
|
@@ -147,8 +266,25 @@ export class InfrastructureService {
|
|
|
147
266
|
}
|
|
148
267
|
}
|
|
149
268
|
this.logger.info({ services: this.desiredContainers.map((c) => c.name) }, 'Provisioning app infrastructure');
|
|
150
|
-
// 3. Reconcile
|
|
151
|
-
|
|
269
|
+
// 3. Reconcile every app service in parallel.
|
|
270
|
+
//
|
|
271
|
+
// Pre-fix this was a serial `for await` loop over up to a dozen
|
|
272
|
+
// containers. For an already-healthy stack (the common cold-boot
|
|
273
|
+
// case where Docker preserved containers across a daemon
|
|
274
|
+
// restart) each reconcileService is a single `docker inspect`
|
|
275
|
+
// round-trip — but doing nine of them serially still costs
|
|
276
|
+
// multiple seconds of latency on the critical path before
|
|
277
|
+
// apps can even start spawning.
|
|
278
|
+
//
|
|
279
|
+
// Safety: `reconcileService` holds a per-name lock
|
|
280
|
+
// (`this.reconciling`), so parallel calls for the SAME
|
|
281
|
+
// container still serialise. Cross-container ordering (e.g.
|
|
282
|
+
// monero-wallet-rpc must talk to monero-daemon) is enforced
|
|
283
|
+
// by each container's own healthcheck loop — the wallet's
|
|
284
|
+
// health probe retries until the daemon's RPC accepts
|
|
285
|
+
// connections, so launching them in parallel just extends the
|
|
286
|
+
// wallet's first-try wait, not its end state.
|
|
287
|
+
await Promise.all(this.desiredContainers.map(async (desired) => {
|
|
152
288
|
try {
|
|
153
289
|
await this.reconcileService(desired);
|
|
154
290
|
}
|
|
@@ -161,7 +297,7 @@ export class InfrastructureService {
|
|
|
161
297
|
error: err.message,
|
|
162
298
|
};
|
|
163
299
|
}
|
|
164
|
-
}
|
|
300
|
+
}));
|
|
165
301
|
// 4. Post-provisioning setup (create databases, buckets, etc.)
|
|
166
302
|
await this.postProvision();
|
|
167
303
|
// 4. Start health monitor
|
|
@@ -177,15 +313,107 @@ export class InfrastructureService {
|
|
|
177
313
|
logger: this.logger,
|
|
178
314
|
});
|
|
179
315
|
this.phantomJanitor.start();
|
|
180
|
-
|
|
316
|
+
// Readiness is measured, not announced.
|
|
317
|
+
//
|
|
318
|
+
// These two lines were `ready = true` and "Infrastructure provisioned
|
|
319
|
+
// and healthy", unconditionally — and every service reconciles inside a
|
|
320
|
+
// `Promise.all` whose per-service catch records `exited` and continues.
|
|
321
|
+
// So a run where every container failed ended exactly like a run where
|
|
322
|
+
// all of them came up, and the gate below this waits on a flag that
|
|
323
|
+
// could not say no. See `summariseProvisioning`.
|
|
324
|
+
const outcome = summariseProvisioning(this.desiredContainers, this.state.services);
|
|
325
|
+
this.state.ready = outcome.ready;
|
|
181
326
|
this.state.lastReconciled = new Date().toISOString();
|
|
182
|
-
|
|
327
|
+
if (outcome.ready) {
|
|
328
|
+
this.logger.info(describeProvisioning(outcome));
|
|
329
|
+
}
|
|
330
|
+
else {
|
|
331
|
+
this.logger.error({
|
|
332
|
+
missing: outcome.missing.map((s) => s.name),
|
|
333
|
+
failed: outcome.failed.map((s) => ({ name: s.name, status: s.status, error: s.error })),
|
|
334
|
+
running: outcome.running.length,
|
|
335
|
+
}, describeProvisioning(outcome));
|
|
336
|
+
}
|
|
183
337
|
return this.state;
|
|
184
338
|
}
|
|
185
339
|
/**
|
|
186
|
-
*
|
|
340
|
+
* What this service was asked to provide.
|
|
341
|
+
*
|
|
342
|
+
* Exposed because a caller cannot tell "present and fine" from "never
|
|
343
|
+
* attempted" by reading `state.services` alone: the second leaves no entry,
|
|
344
|
+
* and an absent entry is indistinguishable from an absent problem.
|
|
187
345
|
*/
|
|
188
|
-
|
|
346
|
+
getDesiredServices() {
|
|
347
|
+
return this.desiredContainers.map((c) => ({ name: c.name, image: c.image }));
|
|
348
|
+
}
|
|
349
|
+
/**
|
|
350
|
+
* Transfer monitoring ownership to a freshly resolved declaration. This never
|
|
351
|
+
* provisions containers: retained specs must match; additions must already be
|
|
352
|
+
* running with exact native ownership and spec labels. Freeze and drain all
|
|
353
|
+
* earlier monitor/reconcile work before acknowledging a handoff.
|
|
354
|
+
*/
|
|
355
|
+
async refreshOwnershipFrom(candidate) {
|
|
356
|
+
if (this.ownershipFrozen)
|
|
357
|
+
throw new Error('Infrastructure ownership refresh already in progress');
|
|
358
|
+
this.ownershipFrozen = true;
|
|
359
|
+
try {
|
|
360
|
+
const drained = await Promise.allSettled([...this.activeSweeps, ...this.reconcileTasks.values()]);
|
|
361
|
+
if (drained.some(result => result.status === 'rejected'))
|
|
362
|
+
throw new Error('In-flight infrastructure reconciliation failed; retry ownership refresh');
|
|
363
|
+
const current = new Map(this.desiredContainers.map(c => [c.name, c]));
|
|
364
|
+
const next = new Map(candidate.desiredContainers.map(c => [c.name, c]));
|
|
365
|
+
if (next.size !== candidate.desiredContainers.length)
|
|
366
|
+
throw new Error('Duplicate desired container identity');
|
|
367
|
+
const adopted = [];
|
|
368
|
+
for (const [name, desired] of next) {
|
|
369
|
+
const prior = current.get(name);
|
|
370
|
+
if (prior) {
|
|
371
|
+
if (containerSpecHash(prior) !== containerSpecHash(desired) || !sameRecord(prior.labels, desired.labels)) {
|
|
372
|
+
throw new Error(`Ownership refresh cannot change retained service spec: ${name}`);
|
|
373
|
+
}
|
|
374
|
+
continue;
|
|
375
|
+
}
|
|
376
|
+
const actual = await getContainerState(name);
|
|
377
|
+
const labels = desired.labels;
|
|
378
|
+
if (!labels['omnitron.project'] || !labels['omnitron.stack'] || labels['omnitron.managed'] !== 'true' ||
|
|
379
|
+
actual?.status !== 'running' || actual.networkAttached === false || actual.specHash !== containerSpecHash(desired) ||
|
|
380
|
+
Object.entries(labels).some(([key, value]) => actual.labels?.[key] !== value)) {
|
|
381
|
+
throw new Error(`Cannot adopt service without matching running native ownership and spec: ${name}`);
|
|
382
|
+
}
|
|
383
|
+
adopted.push(name);
|
|
384
|
+
}
|
|
385
|
+
const released = [...current.keys()].filter(name => !next.has(name));
|
|
386
|
+
this.desiredContainers = [...candidate.desiredContainers];
|
|
387
|
+
this.config = candidate.config;
|
|
388
|
+
this.normalizedServices = candidate.normalizedServices;
|
|
389
|
+
this.serviceOverrides = candidate.serviceOverrides;
|
|
390
|
+
for (const name of released) {
|
|
391
|
+
delete this.state.services[name];
|
|
392
|
+
this.unhealthyTicks.delete(name);
|
|
393
|
+
this.restartBackoff.delete(name);
|
|
394
|
+
this.lastActions.delete(name);
|
|
395
|
+
}
|
|
396
|
+
return { released, adopted };
|
|
397
|
+
}
|
|
398
|
+
finally {
|
|
399
|
+
this.ownershipFrozen = false;
|
|
400
|
+
}
|
|
401
|
+
}
|
|
402
|
+
/**
|
|
403
|
+
* Services whose socket is new since this reconcile began.
|
|
404
|
+
*
|
|
405
|
+
* `noop` is the only action that leaves an existing connection usable.
|
|
406
|
+
* Everything else means anything already connected is holding a dead pool.
|
|
407
|
+
*/
|
|
408
|
+
getRestartedServices() {
|
|
409
|
+
return [...this.lastActions.entries()]
|
|
410
|
+
.filter(([, action]) => action === 'create' || action === 'start' || action === 'recreate')
|
|
411
|
+
.map(([name]) => name);
|
|
412
|
+
}
|
|
413
|
+
/**
|
|
414
|
+
* Release process-owned monitoring resources without changing infrastructure.
|
|
415
|
+
*/
|
|
416
|
+
dispose() {
|
|
189
417
|
this.stopHealthMonitor();
|
|
190
418
|
// T#75: stop the janitor BEFORE removing containers so a final
|
|
191
419
|
// tick can't race the teardown's `docker rm` and produce noisy
|
|
@@ -194,11 +422,13 @@ export class InfrastructureService {
|
|
|
194
422
|
this.phantomJanitor.stop();
|
|
195
423
|
this.phantomJanitor = null;
|
|
196
424
|
}
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
425
|
+
}
|
|
426
|
+
/** Explicit infrastructure removal; process disposal alone preserves containers. */
|
|
427
|
+
async teardown() {
|
|
428
|
+
this.dispose();
|
|
429
|
+
// Remove all containers in parallel for fast shutdown — the control-plane
|
|
430
|
+
// database only where this service keeps one (`controlPlaneContainers`).
|
|
431
|
+
const allContainers = [...[...this.desiredContainers].reverse(), ...this.controlPlaneContainers()];
|
|
202
432
|
await Promise.allSettled(allContainers.map(async (c) => {
|
|
203
433
|
try {
|
|
204
434
|
await removeContainer(c.name);
|
|
@@ -216,6 +446,27 @@ export class InfrastructureService {
|
|
|
216
446
|
getState() {
|
|
217
447
|
return this.state;
|
|
218
448
|
}
|
|
449
|
+
/**
|
|
450
|
+
* Serve the stack's definition as it is now.
|
|
451
|
+
*
|
|
452
|
+
* A node's daemon builds this service on its first `provisionStack` and
|
|
453
|
+
* reuses it for every later one — rightly: a second service would be a
|
|
454
|
+
* second janitor and a second health monitor over one set of containers.
|
|
455
|
+
* But the definition it was built with stayed its definition. A later
|
|
456
|
+
* deployment that enabled a service, changed an image or dropped a
|
|
457
|
+
* `disabled` reached the node's host services — `reconcileHostServices`
|
|
458
|
+
* reads each call's own — and not its containers, until something restarted
|
|
459
|
+
* the daemon. Replaced whole, as the constructor sets it; `setConfigRoots`
|
|
460
|
+
* and `addAppContainers` then work on this set, as on a first call.
|
|
461
|
+
*/
|
|
462
|
+
redefine(config, normalizedServices, serviceOverrides) {
|
|
463
|
+
if (this.ownershipFrozen)
|
|
464
|
+
throw new Error('Infrastructure ownership refresh in progress');
|
|
465
|
+
this.config = config;
|
|
466
|
+
this.normalizedServices = normalizedServices;
|
|
467
|
+
this.serviceOverrides = serviceOverrides;
|
|
468
|
+
this.desiredContainers = resolveInfrastructure(config, normalizedServices, serviceOverrides);
|
|
469
|
+
}
|
|
219
470
|
/**
|
|
220
471
|
* Get normalized services (from preset system).
|
|
221
472
|
* Used by config-resolver for generic address resolution.
|
|
@@ -223,6 +474,28 @@ export class InfrastructureService {
|
|
|
223
474
|
getNormalizedServices() {
|
|
224
475
|
return this.normalizedServices;
|
|
225
476
|
}
|
|
477
|
+
/**
|
|
478
|
+
* Databases declared for this stack's postgres (e.g. main, storage, geo).
|
|
479
|
+
* Source of truth for "which DBs must be backed up" — read straight from
|
|
480
|
+
* the same `infrastructure.postgres.databases` block omnitron provisions
|
|
481
|
+
* from, so the backup set can never drift from the provisioned set.
|
|
482
|
+
*/
|
|
483
|
+
getPostgresDatabases() {
|
|
484
|
+
const pg = this.config.postgres;
|
|
485
|
+
if (!pg || !pg.databases)
|
|
486
|
+
return [];
|
|
487
|
+
return Object.keys(pg.databases);
|
|
488
|
+
}
|
|
489
|
+
/**
|
|
490
|
+
* Resolved container name for an infra service (e.g. 'postgres' →
|
|
491
|
+
* 'acme-dev-postgres'). Taken from the already-resolved desired containers
|
|
492
|
+
* so it reflects the real container prefix rather than re-deriving it from
|
|
493
|
+
* the mutable module-global. Returns null if the stack has no such service.
|
|
494
|
+
*/
|
|
495
|
+
getResolvedContainerName(service) {
|
|
496
|
+
const match = this.desiredContainers.find((d) => d.name.endsWith(`-${service}`));
|
|
497
|
+
return match?.name ?? null;
|
|
498
|
+
}
|
|
226
499
|
/**
|
|
227
500
|
* Get connection info for an infrastructure service.
|
|
228
501
|
* Used by config generator to resolve { infra: 'postgres', database: 'main' }.
|
|
@@ -234,7 +507,7 @@ export class InfrastructureService {
|
|
|
234
507
|
if (!pg)
|
|
235
508
|
return null;
|
|
236
509
|
return {
|
|
237
|
-
host:
|
|
510
|
+
host: LOCAL_INFRA_HOST,
|
|
238
511
|
port: pg.port ?? 5432,
|
|
239
512
|
user: pg.user ?? 'postgres',
|
|
240
513
|
password: typeof pg.password === 'string' ? pg.password : 'postgres',
|
|
@@ -245,7 +518,7 @@ export class InfrastructureService {
|
|
|
245
518
|
if (!redis)
|
|
246
519
|
return null;
|
|
247
520
|
return {
|
|
248
|
-
host:
|
|
521
|
+
host: LOCAL_INFRA_HOST,
|
|
249
522
|
port: redis.port ?? 6379,
|
|
250
523
|
password: typeof redis.password === 'string' ? redis.password : undefined,
|
|
251
524
|
databases: redis.databases ?? {},
|
|
@@ -256,7 +529,7 @@ export class InfrastructureService {
|
|
|
256
529
|
if (!minio)
|
|
257
530
|
return null;
|
|
258
531
|
return {
|
|
259
|
-
endpoint: `http
|
|
532
|
+
endpoint: `http://${LOCAL_INFRA_HOST}:${minio.ports?.api ?? 9000}`,
|
|
260
533
|
accessKey: minio.accessKey ?? 'minioadmin',
|
|
261
534
|
secretKey: typeof minio.secretKey === 'string' ? minio.secretKey : 'minioadmin',
|
|
262
535
|
forcePathStyle: true,
|
|
@@ -264,7 +537,7 @@ export class InfrastructureService {
|
|
|
264
537
|
}
|
|
265
538
|
case 'omnitron-pg':
|
|
266
539
|
return {
|
|
267
|
-
host:
|
|
540
|
+
host: LOCAL_INFRA_HOST,
|
|
268
541
|
port: OMNITRON_PG_PORT,
|
|
269
542
|
user: OMNITRON_PG_USER,
|
|
270
543
|
password: OMNITRON_PG_PASSWORD,
|
|
@@ -288,23 +561,70 @@ export class InfrastructureService {
|
|
|
288
561
|
* own restart-policy in the mix) occasional duplicate containers.
|
|
289
562
|
*/
|
|
290
563
|
reconciling = new Set();
|
|
564
|
+
reconcileTasks = new Map();
|
|
565
|
+
activeSweeps = new Set();
|
|
566
|
+
ownershipFrozen = false;
|
|
567
|
+
/**
|
|
568
|
+
* Where this node keeps each service's config files, once a master sent them.
|
|
569
|
+
*
|
|
570
|
+
* The gateway is not an ordinary preset container — it needs four bind
|
|
571
|
+
* mounts, an entrypoint and fifteen upstream variables, and `resolveGateway`
|
|
572
|
+
* is the only thing that produces them. The constructor resolved everything
|
|
573
|
+
* through the generic preset path, because at construction time this node
|
|
574
|
+
* had no files and no local path to mount from.
|
|
575
|
+
*
|
|
576
|
+
* So this RE-RESOLVES rather than patching the volumes of a container built
|
|
577
|
+
* without them. A spec assembled by the wrong resolver is missing more than
|
|
578
|
+
* paths, and rewriting one field of it would produce a container that looks
|
|
579
|
+
* configured and is not — which is the failure that was already shipping,
|
|
580
|
+
* one level down.
|
|
581
|
+
*
|
|
582
|
+
* Called before `provision()`, so the recreation the changed spec hash
|
|
583
|
+
* implies happens on the first pass rather than the second.
|
|
584
|
+
*/
|
|
585
|
+
setConfigRoots(roots, staticRoots, redis,
|
|
586
|
+
/**
|
|
587
|
+
* The static ROOT per service, when the delivery made a
|
|
588
|
+
* `current-<project>-<stack>` link inside it. Given, the gateway mounts
|
|
589
|
+
* the root and serves through the link — a path that does not change from
|
|
590
|
+
* one release to the next, so the container is not recreated and the
|
|
591
|
+
* second of 000 a deployment cost goes with it. Empty, everything below
|
|
592
|
+
* resolves exactly as before.
|
|
593
|
+
*/
|
|
594
|
+
staticLinkRoots) {
|
|
595
|
+
if (roots.size === 0)
|
|
596
|
+
return;
|
|
597
|
+
this.desiredContainers = resolveInfrastructure(this.config, this.normalizedServices, this.serviceOverrides, roots, { redis, staticRoots, ...(staticLinkRoots && { staticLinkRoots }) });
|
|
598
|
+
}
|
|
291
599
|
async reconcileService(desired) {
|
|
292
600
|
// T#58: per-name lock around the whole inspect→decide→act loop.
|
|
293
|
-
if (this.reconciling.has(desired.name)) {
|
|
601
|
+
if (this.ownershipFrozen || this.reconciling.has(desired.name)) {
|
|
294
602
|
this.logger.debug({ service: desired.name }, 'Reconcile already in flight — skipping');
|
|
295
603
|
return;
|
|
296
604
|
}
|
|
297
605
|
this.reconciling.add(desired.name);
|
|
606
|
+
const task = this.reconcileServiceLocked(desired);
|
|
607
|
+
this.reconcileTasks.set(desired.name, task);
|
|
298
608
|
try {
|
|
299
|
-
await
|
|
609
|
+
await task;
|
|
300
610
|
}
|
|
301
611
|
finally {
|
|
302
612
|
this.reconciling.delete(desired.name);
|
|
613
|
+
this.reconcileTasks.delete(desired.name);
|
|
303
614
|
}
|
|
304
615
|
}
|
|
305
616
|
async reconcileServiceLocked(desired) {
|
|
306
617
|
const actual = await getContainerState(desired.name);
|
|
618
|
+
if (this.ownershipFrozen)
|
|
619
|
+
return;
|
|
307
620
|
const action = this.computeAction(desired, actual);
|
|
621
|
+
// A container that was created, started or recreated is listening on a
|
|
622
|
+
// NEW socket. Applications already running hold pools pointing at the
|
|
623
|
+
// old one, and a titan liveness probe does not notice — the app answers
|
|
624
|
+
// `/health` 200 while every request it serves fails with "Connection
|
|
625
|
+
// terminated unexpectedly". Whoever asked for this reconcile is the only
|
|
626
|
+
// one in a position to restart them, so it has to be told.
|
|
627
|
+
this.lastActions.set(desired.name, action.type);
|
|
308
628
|
switch (action.type) {
|
|
309
629
|
case 'noop':
|
|
310
630
|
this.logger.debug({ service: desired.name }, 'Service already running');
|
|
@@ -340,6 +660,17 @@ export class InfrastructureService {
|
|
|
340
660
|
return { type: 'create', service: desired.name, config: desired };
|
|
341
661
|
}
|
|
342
662
|
if (actual.status === 'running') {
|
|
663
|
+
// Running but detached from all networks (OrbStack/dockerd-restart
|
|
664
|
+
// artifact): the container is unreachable and its published ports are
|
|
665
|
+
// gone. 'running' is a lie here — recreate to re-attach + re-publish.
|
|
666
|
+
if (actual.networkAttached === false) {
|
|
667
|
+
return {
|
|
668
|
+
type: 'recreate',
|
|
669
|
+
service: desired.name,
|
|
670
|
+
config: desired,
|
|
671
|
+
reason: 'network-detached (running but on no network)',
|
|
672
|
+
};
|
|
673
|
+
}
|
|
343
674
|
// Check if image changed
|
|
344
675
|
if (actual.image !== desired.image && !actual.image.startsWith(desired.image)) {
|
|
345
676
|
return {
|
|
@@ -349,9 +680,55 @@ export class InfrastructureService {
|
|
|
349
680
|
reason: `image changed: ${actual.image} → ${desired.image}`,
|
|
350
681
|
};
|
|
351
682
|
}
|
|
683
|
+
// Config drift: image unchanged but the desired spec (env, ports,
|
|
684
|
+
// volumes, command, extraHosts) differs from what the running container
|
|
685
|
+
// was created with. Without this, an omnitron.config.ts edit that only
|
|
686
|
+
// touches env — e.g. the Tor hidden-service target — is silently ignored
|
|
687
|
+
// because the container is "running and healthy". Only fires when the
|
|
688
|
+
// running container carries a spec-hash label; pre-upgrade containers
|
|
689
|
+
// (no label) are left alone until they recreate for another reason, so
|
|
690
|
+
// upgrading omnitron never churns an otherwise-healthy stack.
|
|
691
|
+
if (actual.specHash) {
|
|
692
|
+
const desiredHash = containerSpecHash(desired);
|
|
693
|
+
if (actual.specHash !== desiredHash) {
|
|
694
|
+
return {
|
|
695
|
+
type: 'recreate',
|
|
696
|
+
service: desired.name,
|
|
697
|
+
config: desired,
|
|
698
|
+
reason: `config drift (spec ${actual.specHash} → ${desiredHash})`,
|
|
699
|
+
};
|
|
700
|
+
}
|
|
701
|
+
}
|
|
352
702
|
return { type: 'noop', service: desired.name };
|
|
353
703
|
}
|
|
354
704
|
if (actual.status === 'exited' || actual.status === 'created') {
|
|
705
|
+
// A container that is not running still carries the spec it was created
|
|
706
|
+
// with, and `start` runs THAT spec. The drift checks above were only
|
|
707
|
+
// asked of a running container, so one created wrong was started wrong
|
|
708
|
+
// for as long as it existed: Nominatim on sample/test, created at 05:37
|
|
709
|
+
// with a mount the master had not rewritten, was «started» by every
|
|
710
|
+
// reconcile after the fix that corrected its desired spec — «exec:
|
|
711
|
+
// /opt/nominatim-tools/cis-entrypoint.sh: no such file» each time
|
|
712
|
+
// (2026-09-25). Same questions, same answers, before it is started.
|
|
713
|
+
if (actual.image !== desired.image && !actual.image.startsWith(desired.image)) {
|
|
714
|
+
return {
|
|
715
|
+
type: 'recreate',
|
|
716
|
+
service: desired.name,
|
|
717
|
+
config: desired,
|
|
718
|
+
reason: `image changed while stopped: ${actual.image} → ${desired.image}`,
|
|
719
|
+
};
|
|
720
|
+
}
|
|
721
|
+
if (actual.specHash) {
|
|
722
|
+
const desiredHash = containerSpecHash(desired);
|
|
723
|
+
if (actual.specHash !== desiredHash) {
|
|
724
|
+
return {
|
|
725
|
+
type: 'recreate',
|
|
726
|
+
service: desired.name,
|
|
727
|
+
config: desired,
|
|
728
|
+
reason: `config drift while ${actual.status} (spec ${actual.specHash} → ${desiredHash})`,
|
|
729
|
+
};
|
|
730
|
+
}
|
|
731
|
+
}
|
|
355
732
|
return { type: 'start', service: desired.name, containerId: actual.containerId ?? desired.name };
|
|
356
733
|
}
|
|
357
734
|
// Dead or other — recreate
|
|
@@ -432,6 +809,26 @@ export class InfrastructureService {
|
|
|
432
809
|
const { execFile } = await import('node:child_process');
|
|
433
810
|
const { promisify } = await import('node:util');
|
|
434
811
|
const execFileAsync = promisify(execFile);
|
|
812
|
+
// A preset hook is what creates the databases inside Postgres and the
|
|
813
|
+
// buckets inside MinIO — the containers are running either way, so a
|
|
814
|
+
// failure here is invisible until an application cannot find its
|
|
815
|
+
// database.
|
|
816
|
+
//
|
|
817
|
+
// `this.presetRegistry!` asserted a dependency the constructor declares
|
|
818
|
+
// OPTIONAL, so a caller that did not pass one — which the type permits —
|
|
819
|
+
// got `Cannot read properties of undefined (reading 'get')` from a line
|
|
820
|
+
// that reads as internal, after every container was already up.
|
|
821
|
+
// Measured on a node provisioning a stack, where the containers stayed
|
|
822
|
+
// and the databases were never made.
|
|
823
|
+
if (!this.presetRegistry) {
|
|
824
|
+
const withPresets = Object.entries(this.normalizedServices)
|
|
825
|
+
.filter(([, r]) => r._preset)
|
|
826
|
+
.map(([name]) => name);
|
|
827
|
+
if (withPresets.length > 0) {
|
|
828
|
+
this.logger.error({ services: withPresets }, 'No preset registry, so post-provision steps were skipped — these services are running but their databases and buckets were not created');
|
|
829
|
+
}
|
|
830
|
+
return;
|
|
831
|
+
}
|
|
435
832
|
for (const [serviceName, requirement] of Object.entries(this.normalizedServices)) {
|
|
436
833
|
if (!requirement._preset)
|
|
437
834
|
continue;
|
|
@@ -489,51 +886,20 @@ export class InfrastructureService {
|
|
|
489
886
|
this.logger.info('Omnitron internal database provisioned and migrated');
|
|
490
887
|
}
|
|
491
888
|
/**
|
|
492
|
-
*
|
|
493
|
-
*
|
|
889
|
+
* Apply the internal-database schema through the shared runner.
|
|
890
|
+
*
|
|
891
|
+
* This used to be a second, independently-maintained copy of the daemon's
|
|
892
|
+
* migration code that only knew migrations 001–002 — and, like the
|
|
893
|
+
* daemon's copy, it constructed `Migrator` from the `kysely` package root
|
|
894
|
+
* where that export does not exist, so it threw on every run. Both are now
|
|
895
|
+
* one call into `database/migration-runner.ts`.
|
|
896
|
+
*
|
|
897
|
+
* Errors propagate to `provisionOmnitronDatabase`'s caller: provisioning
|
|
898
|
+
* that ends with an unmigrated database has not succeeded.
|
|
494
899
|
*/
|
|
495
900
|
async runOmnitronMigrations() {
|
|
496
|
-
const {
|
|
497
|
-
|
|
498
|
-
const m001 = await import('../database/migrations/001_initial_schema.js');
|
|
499
|
-
const m002 = await import('../database/migrations/002_metrics_raw.js');
|
|
500
|
-
const pool = new pg.default.Pool({
|
|
501
|
-
host: 'localhost',
|
|
502
|
-
port: OMNITRON_PG_PORT,
|
|
503
|
-
database: OMNITRON_PG_DATABASE,
|
|
504
|
-
user: OMNITRON_PG_USER,
|
|
505
|
-
password: OMNITRON_PG_PASSWORD,
|
|
506
|
-
});
|
|
507
|
-
const db = new Kysely({
|
|
508
|
-
dialect: new PostgresDialect({ pool }),
|
|
509
|
-
});
|
|
510
|
-
try {
|
|
511
|
-
const migrator = new Migrator({
|
|
512
|
-
db,
|
|
513
|
-
provider: {
|
|
514
|
-
async getMigrations() {
|
|
515
|
-
return {
|
|
516
|
-
'001_initial_schema': { up: m001.up, down: m001.down },
|
|
517
|
-
'002_metrics_raw': { up: m002.up, down: m002.down },
|
|
518
|
-
};
|
|
519
|
-
},
|
|
520
|
-
},
|
|
521
|
-
});
|
|
522
|
-
const { results, error } = await migrator.migrateToLatest();
|
|
523
|
-
const applied = results?.filter((r) => r.status === 'Success') ?? [];
|
|
524
|
-
if (applied.length > 0) {
|
|
525
|
-
this.logger.info({ migrations: applied.map((r) => r.migrationName) }, `Applied ${applied.length} Omnitron migration(s)`);
|
|
526
|
-
}
|
|
527
|
-
else {
|
|
528
|
-
this.logger.debug('Omnitron database schema is up to date');
|
|
529
|
-
}
|
|
530
|
-
if (error) {
|
|
531
|
-
this.logger.error({ error: String(error) }, 'Migration error');
|
|
532
|
-
}
|
|
533
|
-
}
|
|
534
|
-
finally {
|
|
535
|
-
await db.destroy();
|
|
536
|
-
}
|
|
901
|
+
const { runOmnitronMigrations } = await import('../database/migration-runner.js');
|
|
902
|
+
await runOmnitronMigrations(this.logger);
|
|
537
903
|
}
|
|
538
904
|
// ===========================================================================
|
|
539
905
|
// Private — Health Monitor (Self-Healing)
|
|
@@ -552,14 +918,40 @@ export class InfrastructureService {
|
|
|
552
918
|
this.healthTimer = null;
|
|
553
919
|
}
|
|
554
920
|
}
|
|
921
|
+
/**
|
|
922
|
+
* The control-plane database container this service keeps, if any: none on
|
|
923
|
+
* a node — it keeps its own state in SQLite (`decideControlPlaneDatabase`) —
|
|
924
|
+
* and none where the global `omnitron-pg` serves.
|
|
925
|
+
*
|
|
926
|
+
* `provision()` asked `needsControlPlaneDatabase`; the health sweep and the
|
|
927
|
+
* teardown asked only `usingGlobalOmnitronPg`. So on a node the sweep found
|
|
928
|
+
* `<prefix>-pg` «not running» every 30 s and created it: sample/test got one on
|
|
929
|
+
* 2026-09-20, and again on 2026-09-25 forty seconds after it was removed —
|
|
930
|
+
* on the default credentials, for a database nothing reads.
|
|
931
|
+
*/
|
|
932
|
+
controlPlaneContainers() {
|
|
933
|
+
return this.needsControlPlaneDatabase && !this.usingGlobalOmnitronPg ? [this.omnitronPgContainer] : [];
|
|
934
|
+
}
|
|
555
935
|
async healthSweep() {
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
const
|
|
559
|
-
|
|
560
|
-
|
|
936
|
+
if (this.ownershipFrozen)
|
|
937
|
+
return;
|
|
938
|
+
const task = this.healthSweepOwned();
|
|
939
|
+
this.activeSweeps.add(task);
|
|
940
|
+
try {
|
|
941
|
+
await task;
|
|
942
|
+
}
|
|
943
|
+
finally {
|
|
944
|
+
this.activeSweeps.delete(task);
|
|
945
|
+
}
|
|
946
|
+
}
|
|
947
|
+
async healthSweepOwned() {
|
|
948
|
+
// The control-plane database alongside the app containers, where this
|
|
949
|
+
// service keeps one.
|
|
950
|
+
const allContainers = [...this.controlPlaneContainers(), ...this.desiredContainers];
|
|
561
951
|
for (const desired of allContainers) {
|
|
562
952
|
const actual = await getContainerState(desired.name);
|
|
953
|
+
if (this.ownershipFrozen)
|
|
954
|
+
return;
|
|
563
955
|
// T#58: Docker's own `--restart=always` / `--restart=on-failure`
|
|
564
956
|
// policy puts the container into the 'restarting' state for the
|
|
565
957
|
// brief window between exit and re-entry. If we recreate during
|
|
@@ -573,12 +965,24 @@ export class InfrastructureService {
|
|
|
573
965
|
}
|
|
574
966
|
if (!actual || actual.status !== 'running') {
|
|
575
967
|
this.unhealthyTicks.delete(desired.name);
|
|
968
|
+
// Circuit-breaker: while a service is inside its backoff window, skip
|
|
969
|
+
// the restart so a permanently-failing container can't hammer the
|
|
970
|
+
// supervisor every tick and starve the daemon's event loop.
|
|
971
|
+
const backoff = this.restartBackoff.get(desired.name);
|
|
972
|
+
if (backoff && Date.now() < backoff.nextAttemptAt) {
|
|
973
|
+
this.logger.debug({ service: desired.name, failures: backoff.failures, retryInMs: backoff.nextAttemptAt - Date.now() }, 'Service not running — in restart backoff, skipping tick');
|
|
974
|
+
continue;
|
|
975
|
+
}
|
|
576
976
|
this.logger.warn({ service: desired.name, status: actual?.status ?? 'not_found' }, 'Service not running — auto-restarting');
|
|
577
977
|
try {
|
|
578
978
|
await this.reconcileService(desired);
|
|
979
|
+
this.restartBackoff.delete(desired.name);
|
|
579
980
|
}
|
|
580
981
|
catch (err) {
|
|
581
|
-
this.
|
|
982
|
+
const failures = (this.restartBackoff.get(desired.name)?.failures ?? 0) + 1;
|
|
983
|
+
const backoffMs = restartBackoffMs(failures);
|
|
984
|
+
this.restartBackoff.set(desired.name, { failures, nextAttemptAt: Date.now() + backoffMs });
|
|
985
|
+
this.logger.error({ service: desired.name, error: err.message, failures, backoffMs }, 'Auto-restart failed');
|
|
582
986
|
}
|
|
583
987
|
}
|
|
584
988
|
else if (actual.health === 'unhealthy') {
|
|
@@ -600,8 +1004,11 @@ export class InfrastructureService {
|
|
|
600
1004
|
}
|
|
601
1005
|
}
|
|
602
1006
|
else {
|
|
603
|
-
// Healthy or starting — clear any accumulated unhealthy ticks
|
|
1007
|
+
// Healthy or starting — clear any accumulated unhealthy ticks and
|
|
1008
|
+
// reset the restart circuit-breaker (it may have recovered on its own
|
|
1009
|
+
// via Docker's restart policy).
|
|
604
1010
|
this.unhealthyTicks.delete(desired.name);
|
|
1011
|
+
this.restartBackoff.delete(desired.name);
|
|
605
1012
|
}
|
|
606
1013
|
// Update state
|
|
607
1014
|
const newState = await getContainerState(desired.name);
|