@omnitron-dev/omnitron 0.1.3 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/BUILD.json +5 -0
- package/dist/cli/omnitron.js +378 -25
- 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 -24
- 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 +18 -5
- 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.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 +26 -4
- package/dist/commands/health.js.map +1 -1
- 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 +20 -0
- package/dist/commands/inspect-graph.d.ts.map +1 -0
- package/dist/commands/inspect-graph.js +74 -0
- package/dist/commands/inspect-graph.js.map +1 -0
- package/dist/commands/inspect.d.ts.map +1 -1
- package/dist/commands/inspect.js +115 -11
- 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 +25 -3
- 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 +532 -192
- package/dist/commands/logs.js.map +1 -1
- package/dist/commands/metrics.d.ts.map +1 -1
- package/dist/commands/metrics.js +40 -14
- package/dist/commands/metrics.js.map +1 -1
- package/dist/commands/monit.d.ts.map +1 -1
- package/dist/commands/monit.js +12 -2
- package/dist/commands/monit.js.map +1 -1
- package/dist/commands/node.d.ts +68 -0
- package/dist/commands/node.d.ts.map +1 -1
- package/dist/commands/node.js +285 -68
- package/dist/commands/node.js.map +1 -1
- package/dist/commands/output.d.ts +45 -0
- package/dist/commands/output.d.ts.map +1 -0
- package/dist/commands/output.js +103 -0
- package/dist/commands/output.js.map +1 -0
- package/dist/commands/pipeline.d.ts.map +1 -1
- package/dist/commands/pipeline.js +26 -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 +341 -13
- 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 +62 -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 +20 -0
- package/dist/commands/tor.d.ts.map +1 -0
- package/dist/commands/tor.js +180 -0
- package/dist/commands/tor.js.map +1 -0
- package/dist/commands/up.d.ts +85 -1
- package/dist/commands/up.d.ts.map +1 -1
- package/dist/commands/up.js +181 -33
- 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 +93 -11
- 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 +425 -42
- 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 +150 -2
- package/dist/daemon/daemon-client.d.ts.map +1 -1
- package/dist/daemon/daemon-client.js +311 -21
- package/dist/daemon/daemon-client.js.map +1 -1
- package/dist/daemon/daemon-entry.js +92 -38
- 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 +207 -1
- package/dist/daemon/daemon.d.ts.map +1 -1
- package/dist/daemon/daemon.js +1254 -143
- package/dist/daemon/daemon.js.map +1 -1
- package/dist/daemon/daemon.module.d.ts.map +1 -1
- package/dist/daemon/daemon.module.js +186 -79
- package/dist/daemon/daemon.module.js.map +1 -1
- package/dist/daemon/daemon.rpc-service.d.ts +109 -1
- package/dist/daemon/daemon.rpc-service.d.ts.map +1 -1
- package/dist/daemon/daemon.rpc-service.js +451 -95
- package/dist/daemon/daemon.rpc-service.js.map +1 -1
- package/dist/daemon/pid-manager.d.ts +69 -5
- package/dist/daemon/pid-manager.d.ts.map +1 -1
- package/dist/daemon/pid-manager.js +151 -17
- 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 +103 -19
- 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 +139 -0
- package/dist/execution/execution.service.d.ts.map +1 -1
- package/dist/execution/execution.service.js +273 -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 +179 -1
- package/dist/infrastructure/container-runtime.d.ts.map +1 -1
- package/dist/infrastructure/container-runtime.js +612 -45
- 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-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 +247 -6
- package/dist/infrastructure/infrastructure.service.d.ts.map +1 -1
- package/dist/infrastructure/infrastructure.service.js +571 -96
- 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 +92 -0
- package/dist/infrastructure/phantom-endpoint-janitor.d.ts.map +1 -0
- package/dist/infrastructure/phantom-endpoint-janitor.js +199 -0
- package/dist/infrastructure/phantom-endpoint-janitor.js.map +1 -0
- 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/index.d.ts.map +1 -1
- package/dist/infrastructure/presets/index.js +2 -0
- package/dist/infrastructure/presets/index.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 +78 -5
- 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 +23 -4
- 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 +85 -4
- package/dist/infrastructure/presets/registry.js.map +1 -1
- package/dist/infrastructure/presets/tor.d.ts +112 -0
- package/dist/infrastructure/presets/tor.d.ts.map +1 -0
- package/dist/infrastructure/presets/tor.js +185 -0
- package/dist/infrastructure/presets/tor.js.map +1 -0
- 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 +191 -12
- package/dist/infrastructure/service-resolver.d.ts.map +1 -1
- package/dist/infrastructure/service-resolver.js +521 -60
- 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 +7 -1
- package/dist/infrastructure/stack-infra-manager.d.ts.map +1 -1
- package/dist/infrastructure/stack-infra-manager.js +32 -14
- package/dist/infrastructure/stack-infra-manager.js.map +1 -1
- package/dist/infrastructure/types.d.ts +278 -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/index.d.ts +4 -0
- package/dist/observability/index.d.ts.map +1 -0
- package/dist/observability/index.js +3 -0
- package/dist/observability/index.js.map +1 -0
- package/dist/observability/metrics-bridge.d.ts +87 -0
- package/dist/observability/metrics-bridge.d.ts.map +1 -0
- package/dist/observability/metrics-bridge.js +295 -0
- package/dist/observability/metrics-bridge.js.map +1 -0
- package/dist/observability/metrics-server.d.ts +68 -0
- package/dist/observability/metrics-server.d.ts.map +1 -0
- package/dist/observability/metrics-server.js +146 -0
- package/dist/observability/metrics-server.js.map +1 -0
- package/dist/orchestrator/app-handle.d.ts +170 -3
- package/dist/orchestrator/app-handle.d.ts.map +1 -1
- package/dist/orchestrator/app-handle.js +177 -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 +148 -4
- package/dist/orchestrator/bootstrap-process.d.ts.map +1 -1
- package/dist/orchestrator/bootstrap-process.js +496 -18
- package/dist/orchestrator/bootstrap-process.js.map +1 -1
- package/dist/orchestrator/build-service.d.ts +50 -3
- package/dist/orchestrator/build-service.d.ts.map +1 -1
- package/dist/orchestrator/build-service.js +357 -85
- 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 +34 -3
- package/dist/orchestrator/classic-launcher.js.map +1 -1
- package/dist/orchestrator/file-watcher.d.ts +78 -1
- package/dist/orchestrator/file-watcher.d.ts.map +1 -1
- package/dist/orchestrator/file-watcher.js +240 -43
- package/dist/orchestrator/file-watcher.js.map +1 -1
- 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 +540 -7
- package/dist/orchestrator/orchestrator.service.d.ts.map +1 -1
- package/dist/orchestrator/orchestrator.service.js +2106 -242
- 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 +227 -0
- package/dist/orchestrator/process-janitor.d.ts.map +1 -0
- package/dist/orchestrator/process-janitor.js +495 -0
- package/dist/orchestrator/process-janitor.js.map +1 -0
- 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 +158 -78
- 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 +287 -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 +46 -8
- package/dist/project/registry.d.ts.map +1 -1
- package/dist/project/registry.js +238 -40
- 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 +4 -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 +92 -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 +163 -24
- 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 +487 -0
- package/dist/services/bundle-builder.d.ts.map +1 -0
- package/dist/services/bundle-builder.js +1083 -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/infrastructure.rpc-service.d.ts +297 -2
- package/dist/services/infrastructure.rpc-service.d.ts.map +1 -1
- package/dist/services/infrastructure.rpc-service.js +523 -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 +151 -0
- package/dist/services/local-bundle.d.ts.map +1 -0
- package/dist/services/local-bundle.js +233 -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 +0 -4
- package/dist/services/netron-telemetry-transport.js.map +1 -1
- package/dist/services/node-deploy-lease.d.ts +154 -0
- package/dist/services/node-deploy-lease.d.ts.map +1 -0
- package/dist/services/node-deploy-lease.js +386 -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 +355 -10
- package/dist/services/node-manager.rpc-service.d.ts.map +1 -1
- package/dist/services/node-manager.rpc-service.js +730 -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 +806 -104
- 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 +2 -1
- package/dist/services/pipeline.rpc-service.d.ts.map +1 -1
- package/dist/services/pipeline.rpc-service.js.map +1 -1
- package/dist/services/pipeline.service.d.ts +30 -46
- package/dist/services/pipeline.service.d.ts.map +1 -1
- package/dist/services/pipeline.service.js +125 -11
- package/dist/services/pipeline.service.js.map +1 -1
- package/dist/services/project.rpc-service.d.ts +137 -5
- package/dist/services/project.rpc-service.d.ts.map +1 -1
- package/dist/services/project.rpc-service.js +258 -22
- package/dist/services/project.rpc-service.js.map +1 -1
- package/dist/services/project.service.d.ts +680 -9
- package/dist/services/project.service.d.ts.map +1 -1
- package/dist/services/project.service.js +2914 -293
- 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 +569 -8
- package/dist/services/remote-deployer.service.d.ts.map +1 -1
- package/dist/services/remote-deployer.service.js +1618 -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 +122 -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 +85 -0
- package/dist/services/static-carry-forward.d.ts.map +1 -0
- package/dist/services/static-carry-forward.js +159 -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 +143 -9
- package/dist/shared/dto/project.d.ts.map +1 -1
- package/dist/shared/dto/services.d.ts +855 -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 +156 -26
- 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 +11 -2
- package/dist/workers/types.d.ts.map +1 -1
- package/package.json +64 -29
- package/webapp/dist/BUILD.json +5 -0
- package/webapp/dist/assets/FormControlLabel-BrH2diyl.js +1 -0
- package/webapp/dist/assets/Grid-BZ7xhoHQ.js +1 -0
- package/webapp/dist/assets/Switch-DGSAxQPM.js +1 -0
- package/webapp/dist/assets/alerts-sXqHJbsa.js +1 -0
- package/webapp/dist/assets/apps-B_Ah8Flh.js +1 -0
- package/webapp/dist/assets/audit-YXihwyui.js +1 -0
- package/webapp/dist/assets/client-CGbBvy9k.js +1 -0
- package/webapp/dist/assets/constants-veKGFkC6.js +1 -0
- package/webapp/dist/assets/containers-Di4NOTLf.js +2 -0
- package/webapp/dist/assets/daemon-memory-CCPZ4cV_.js +1 -0
- package/webapp/dist/assets/dashboard-Cfuf95N3.js +1 -0
- package/webapp/dist/assets/dashboard-builder-CowaYb-M.js +1 -0
- package/webapp/dist/assets/deploy-release-dialog-D6C-XcKY.js +1 -0
- package/webapp/dist/assets/deployments-ChTq5kCw.js +1 -0
- package/webapp/dist/assets/detail-BsGWv7Dj.js +1 -0
- package/webapp/dist/assets/detail-CyVf_cw5.js +2 -0
- package/webapp/dist/assets/detail-D027j6aO.js +8 -0
- package/webapp/dist/assets/formatters-BqjL73N3.js +1 -0
- package/webapp/dist/assets/index-B8AHIPc-.css +1 -0
- package/webapp/dist/assets/index-DiZbrwxT.js +414 -0
- package/webapp/dist/assets/logs-L2b8Oqmo.js +12 -0
- package/webapp/dist/assets/maplibre-gl-MlmG2kbn.js +801 -0
- package/webapp/dist/assets/metrics-CQgjz2Lz.js +2 -0
- package/webapp/dist/assets/nodes-Nwia2Ty6.js +7 -0
- package/webapp/dist/assets/pipelines-DCu_rXOr.js +4 -0
- package/webapp/dist/assets/projects-Bb4aV76h.js +1 -0
- package/webapp/dist/assets/react-CwJFpaho.js +1 -0
- package/webapp/dist/assets/react-apexcharts.esm-Dy0Fez42.js +1956 -0
- package/webapp/dist/assets/release-bits-Dj4EOhhb.js +1 -0
- package/webapp/dist/assets/release-build-panel-D6OCVlhT.js +1 -0
- package/webapp/dist/assets/releases-CnAt3yO6.js +2 -0
- package/webapp/dist/assets/rolldown-runtime-hePW80VL.js +1 -0
- package/webapp/dist/assets/settings-DU-mjiwb.js +1 -0
- package/webapp/dist/assets/settled-pair-C7SjZuns.js +1 -0
- package/webapp/dist/assets/sign-in-Bcvjrr4C.js +1 -0
- package/webapp/dist/assets/stacks-B-e8p50I.js +1 -0
- package/webapp/dist/assets/sync-reading-C3PnJ7AX.js +1 -0
- package/webapp/dist/assets/system-info-BtE3dgfw.js +1 -0
- package/webapp/dist/assets/topology-Cwch-uF1.js +12 -0
- package/webapp/dist/assets/topology-DLioOiRN.css +1 -0
- package/webapp/dist/assets/traces-BbShR-4P.js +1 -0
- package/webapp/dist/assets/use-stack-context-CZUgPq88.js +1 -0
- package/webapp/dist/index.html +6 -7
- 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/Chip-BySxTjyN.js +0 -1
- package/webapp/dist/assets/DialogContentText-YQWiAVrU.js +0 -1
- package/webapp/dist/assets/DialogTitle-CDkgUIwp.js +0 -1
- package/webapp/dist/assets/FormControlLabel-Bu3CCsBM.js +0 -1
- package/webapp/dist/assets/Grid-BFY8hAzL.js +0 -1
- package/webapp/dist/assets/InputAdornment-_Dayk-3y.js +0 -3
- package/webapp/dist/assets/Skeleton-BGj6Sw8m.js +0 -37
- package/webapp/dist/assets/Switch-CA6682vv.js +0 -1
- package/webapp/dist/assets/TableContainer-4epq10KJ.js +0 -1
- package/webapp/dist/assets/TextField-C73KHMVN.js +0 -1
- package/webapp/dist/assets/alerts-JEQALS7Y.js +0 -1
- package/webapp/dist/assets/apps-DMPysEKB.js +0 -1
- package/webapp/dist/assets/client-DlGPter5.js +0 -110
- package/webapp/dist/assets/constants-DqFQJ27U.js +0 -1
- package/webapp/dist/assets/containers-CvkC7do8.js +0 -1
- package/webapp/dist/assets/dashboard-C0Fre9pC.js +0 -1
- package/webapp/dist/assets/dashboard-builder-DAghqdpE.js +0 -1
- package/webapp/dist/assets/deployments-Cg1lI1uT.js +0 -1
- package/webapp/dist/assets/detail-CyFtEson.js +0 -1
- package/webapp/dist/assets/detail-DqoSGKT1.js +0 -8
- package/webapp/dist/assets/formatters-J3Xqn6BQ.js +0 -1
- package/webapp/dist/assets/icons-ynIWYfBP.js +0 -3
- package/webapp/dist/assets/index-CHVXOsTS.css +0 -1
- package/webapp/dist/assets/index-vKrDmEA_.js +0 -259
- package/webapp/dist/assets/isMuiElement-BRL3YuCT.js +0 -1
- package/webapp/dist/assets/logs-IovIij1C.js +0 -11
- package/webapp/dist/assets/metrics-Dufwtwjq.js +0 -1
- package/webapp/dist/assets/nodes-Brvu8W3j.js +0 -7
- package/webapp/dist/assets/pipelines-t40X4MuC.js +0 -4
- package/webapp/dist/assets/prop-types-CvVtHxp4.js +0 -1
- package/webapp/dist/assets/react-apexcharts.esm-CLO6gala.js +0 -954
- package/webapp/dist/assets/settings-DTAIST3v.js +0 -1
- package/webapp/dist/assets/sign-in-DQEAkJum.js +0 -1
- package/webapp/dist/assets/stacks-BjM1f45N.js +0 -1
- package/webapp/dist/assets/system-info-BQSbSEK-.js +0 -1
- package/webapp/dist/assets/topology-6N8-Az_Z.js +0 -12
- package/webapp/dist/assets/topology-CHpVij2M.css +0 -1
- package/webapp/dist/assets/traces-DVXyb-4m.js +0 -1
- package/webapp/dist/assets/use-stack-context-CbE8fxBA.js +0 -1
- /package/webapp/dist/assets/{fs-uP8eiZAR.js → fs-Ccl3sAcp.js} +0 -0
|
@@ -15,39 +15,178 @@
|
|
|
15
15
|
* ResolvedContainer[] → ContainerRuntime → Docker CLI
|
|
16
16
|
* Health Loop → detect failure → auto-restart (exponential backoff)
|
|
17
17
|
*/
|
|
18
|
-
import {
|
|
19
|
-
import {
|
|
18
|
+
import { computeBackoff } from '@omnitron-dev/titan/utils';
|
|
19
|
+
import { resolveInfrastructure, resolveOmnitronPg, getManagedNetwork } from './service-resolver.js';
|
|
20
|
+
import { PhantomEndpointJanitor } from './phantom-endpoint-janitor.js';
|
|
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';
|
|
20
25
|
const RECONCILE_INTERVAL = 30_000; // 30s health sweep
|
|
21
26
|
const STARTUP_TIMEOUT = 120_000; // 2min max per service
|
|
22
|
-
/**
|
|
23
|
-
const
|
|
24
|
-
|
|
25
|
-
const
|
|
26
|
-
|
|
27
|
+
/** Consecutive 'unhealthy' ticks before recreate. 2 ticks @ 30s = 60s grace. */
|
|
28
|
+
const UNHEALTHY_RESTART_THRESHOLD = 2;
|
|
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 `daos-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 `daos/dev` stack
|
|
73
|
+
* computes `daos-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
|
+
}
|
|
27
91
|
export class InfrastructureService {
|
|
28
92
|
logger;
|
|
29
93
|
config;
|
|
30
94
|
presetRegistry;
|
|
95
|
+
serviceOverrides;
|
|
96
|
+
needsControlPlaneDatabase;
|
|
31
97
|
desiredContainers = [];
|
|
98
|
+
/** What the most recent reconcile did to each service. */
|
|
99
|
+
lastActions = new Map();
|
|
32
100
|
omnitronPgContainer;
|
|
33
101
|
usingGlobalOmnitronPg = false;
|
|
34
102
|
healthTimer = null;
|
|
35
103
|
state = { services: {}, ready: false };
|
|
36
104
|
normalizedServices;
|
|
37
|
-
|
|
105
|
+
/**
|
|
106
|
+
* Per-service consecutive-unhealthy counter. Restart only fires after
|
|
107
|
+
* UNHEALTHY_RESTART_THRESHOLD ticks in a row to avoid flapping during
|
|
108
|
+
* cold-start / transient health-check timeouts. Reset to 0 on a healthy
|
|
109
|
+
* observation. Without this, a service that briefly fails one health
|
|
110
|
+
* probe (network blip, slow query) would be torn down and recreated,
|
|
111
|
+
* making transient pressure look like outages.
|
|
112
|
+
*/
|
|
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();
|
|
125
|
+
/**
|
|
126
|
+
* T#75: phantom-endpoint janitor instance. Created in `provision()`
|
|
127
|
+
* once we know Docker is reachable; torn down in `teardown()`.
|
|
128
|
+
*/
|
|
129
|
+
phantomJanitor = null;
|
|
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) {
|
|
38
146
|
this.logger = logger;
|
|
39
147
|
this.config = config;
|
|
40
148
|
this.presetRegistry = presetRegistry;
|
|
149
|
+
this.serviceOverrides = serviceOverrides;
|
|
150
|
+
this.needsControlPlaneDatabase = needsControlPlaneDatabase;
|
|
41
151
|
this.normalizedServices = normalizedServices ?? {};
|
|
42
|
-
this.desiredContainers = resolveInfrastructure(config, normalizedServices);
|
|
152
|
+
this.desiredContainers = resolveInfrastructure(config, normalizedServices, serviceOverrides);
|
|
43
153
|
this.omnitronPgContainer = resolveOmnitronPg();
|
|
44
154
|
}
|
|
45
155
|
/**
|
|
46
156
|
* Add app-declared infrastructure containers to the provisioning list.
|
|
47
157
|
* Called by StackInfrastructureManager after resolving app requirements.
|
|
158
|
+
*
|
|
159
|
+
* T#76: dedupe by container name. The `${CONTAINER_PREFIX}-${service}`
|
|
160
|
+
* naming convention means two apps that BOTH declare a `postgres`
|
|
161
|
+
* requirement produce two identical-named entries. Pre-T#76, the
|
|
162
|
+
* provisioning loop tried to create the container twice; Docker's
|
|
163
|
+
* name-uniqueness check failed the second create with "name already
|
|
164
|
+
* in use", leaving the second app's perspective on infrastructure
|
|
165
|
+
* broken (it saw a failure that, from the cluster's view, was a
|
|
166
|
+
* benign collision — the shared service was actually fine).
|
|
167
|
+
*
|
|
168
|
+
* The intended semantics for shared infrastructure is "all apps that
|
|
169
|
+
* declare `postgres` use the same container", so the first
|
|
170
|
+
* declaration wins. When subsequent declarations differ in shape
|
|
171
|
+
* (image / env / ports), log a structured warning so the operator
|
|
172
|
+
* can reconcile intent vs. config.
|
|
48
173
|
*/
|
|
49
174
|
addAppContainers(containers) {
|
|
50
|
-
|
|
175
|
+
for (const c of containers) {
|
|
176
|
+
const existing = this.desiredContainers.find((d) => d.name === c.name);
|
|
177
|
+
if (!existing) {
|
|
178
|
+
this.desiredContainers.push(c);
|
|
179
|
+
continue;
|
|
180
|
+
}
|
|
181
|
+
if (!shallowContainerEqual(existing, c)) {
|
|
182
|
+
this.logger.warn({
|
|
183
|
+
container: c.name,
|
|
184
|
+
existingImage: existing.image,
|
|
185
|
+
duplicateImage: c.image,
|
|
186
|
+
}, 'Duplicate container declaration with differing shape — keeping first; check for conflicting app infrastructure requirements (T#76)');
|
|
187
|
+
}
|
|
188
|
+
// else: identical declaration, silent dedupe — this is the common case
|
|
189
|
+
}
|
|
51
190
|
}
|
|
52
191
|
/**
|
|
53
192
|
* Provision all infrastructure services.
|
|
@@ -65,26 +204,52 @@ export class InfrastructureService {
|
|
|
65
204
|
// The stack-prefixed container (e.g. omni-dev-pg) shares the same port,
|
|
66
205
|
// so we must not create/start it when the global one is active.
|
|
67
206
|
const globalOmnitronPg = await getContainerState('omnitron-pg');
|
|
68
|
-
const
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
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') {
|
|
73
224
|
this.usingGlobalOmnitronPg = true;
|
|
74
|
-
|
|
75
|
-
//
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
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 */ }
|
|
81
235
|
}
|
|
82
|
-
catch { /* already gone */ }
|
|
83
236
|
}
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
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 `daos-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);
|
|
88
253
|
}
|
|
89
254
|
else {
|
|
90
255
|
try {
|
|
@@ -101,8 +266,25 @@ export class InfrastructureService {
|
|
|
101
266
|
}
|
|
102
267
|
}
|
|
103
268
|
this.logger.info({ services: this.desiredContainers.map((c) => c.name) }, 'Provisioning app infrastructure');
|
|
104
|
-
// 3. Reconcile
|
|
105
|
-
|
|
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) => {
|
|
106
288
|
try {
|
|
107
289
|
await this.reconcileService(desired);
|
|
108
290
|
}
|
|
@@ -115,26 +297,81 @@ export class InfrastructureService {
|
|
|
115
297
|
error: err.message,
|
|
116
298
|
};
|
|
117
299
|
}
|
|
118
|
-
}
|
|
300
|
+
}));
|
|
119
301
|
// 4. Post-provisioning setup (create databases, buckets, etc.)
|
|
120
302
|
await this.postProvision();
|
|
121
303
|
// 4. Start health monitor
|
|
122
304
|
this.startHealthMonitor();
|
|
123
|
-
|
|
305
|
+
// T#75: start the phantom-endpoint janitor. It periodically
|
|
306
|
+
// cleans up stale endpoint records on the managed network so
|
|
307
|
+
// a Docker daemon restart / host suspend doesn't leave us
|
|
308
|
+
// unable to recreate containers ("endpoint with name X
|
|
309
|
+
// already exists in network ...").
|
|
310
|
+
this.phantomJanitor = new PhantomEndpointJanitor({
|
|
311
|
+
networks: [getManagedNetwork()],
|
|
312
|
+
intervalMs: 60_000,
|
|
313
|
+
logger: this.logger,
|
|
314
|
+
});
|
|
315
|
+
this.phantomJanitor.start();
|
|
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;
|
|
124
326
|
this.state.lastReconciled = new Date().toISOString();
|
|
125
|
-
|
|
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
|
+
}
|
|
126
337
|
return this.state;
|
|
127
338
|
}
|
|
339
|
+
/**
|
|
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.
|
|
345
|
+
*/
|
|
346
|
+
getDesiredServices() {
|
|
347
|
+
return this.desiredContainers.map((c) => ({ name: c.name, image: c.image }));
|
|
348
|
+
}
|
|
349
|
+
/**
|
|
350
|
+
* Services whose socket is new since this reconcile began.
|
|
351
|
+
*
|
|
352
|
+
* `noop` is the only action that leaves an existing connection usable.
|
|
353
|
+
* Everything else means anything already connected is holding a dead pool.
|
|
354
|
+
*/
|
|
355
|
+
getRestartedServices() {
|
|
356
|
+
return [...this.lastActions.entries()]
|
|
357
|
+
.filter(([, action]) => action === 'create' || action === 'start' || action === 'recreate')
|
|
358
|
+
.map(([name]) => name);
|
|
359
|
+
}
|
|
128
360
|
/**
|
|
129
361
|
* Stop all managed infrastructure containers.
|
|
130
362
|
*/
|
|
131
363
|
async teardown() {
|
|
132
364
|
this.stopHealthMonitor();
|
|
133
|
-
//
|
|
134
|
-
//
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
365
|
+
// T#75: stop the janitor BEFORE removing containers so a final
|
|
366
|
+
// tick can't race the teardown's `docker rm` and produce noisy
|
|
367
|
+
// disconnect-of-already-disconnected errors.
|
|
368
|
+
if (this.phantomJanitor) {
|
|
369
|
+
this.phantomJanitor.stop();
|
|
370
|
+
this.phantomJanitor = null;
|
|
371
|
+
}
|
|
372
|
+
// Remove all containers in parallel for fast shutdown — the control-plane
|
|
373
|
+
// database only where this service keeps one (`controlPlaneContainers`).
|
|
374
|
+
const allContainers = [...[...this.desiredContainers].reverse(), ...this.controlPlaneContainers()];
|
|
138
375
|
await Promise.allSettled(allContainers.map(async (c) => {
|
|
139
376
|
try {
|
|
140
377
|
await removeContainer(c.name);
|
|
@@ -152,6 +389,25 @@ export class InfrastructureService {
|
|
|
152
389
|
getState() {
|
|
153
390
|
return this.state;
|
|
154
391
|
}
|
|
392
|
+
/**
|
|
393
|
+
* Serve the stack's definition as it is now.
|
|
394
|
+
*
|
|
395
|
+
* A node's daemon builds this service on its first `provisionStack` and
|
|
396
|
+
* reuses it for every later one — rightly: a second service would be a
|
|
397
|
+
* second janitor and a second health monitor over one set of containers.
|
|
398
|
+
* But the definition it was built with stayed its definition. A later
|
|
399
|
+
* deployment that enabled a service, changed an image or dropped a
|
|
400
|
+
* `disabled` reached the node's host services — `reconcileHostServices`
|
|
401
|
+
* reads each call's own — and not its containers, until something restarted
|
|
402
|
+
* the daemon. Replaced whole, as the constructor sets it; `setConfigRoots`
|
|
403
|
+
* and `addAppContainers` then work on this set, as on a first call.
|
|
404
|
+
*/
|
|
405
|
+
redefine(config, normalizedServices, serviceOverrides) {
|
|
406
|
+
this.config = config;
|
|
407
|
+
this.normalizedServices = normalizedServices;
|
|
408
|
+
this.serviceOverrides = serviceOverrides;
|
|
409
|
+
this.desiredContainers = resolveInfrastructure(config, normalizedServices, serviceOverrides);
|
|
410
|
+
}
|
|
155
411
|
/**
|
|
156
412
|
* Get normalized services (from preset system).
|
|
157
413
|
* Used by config-resolver for generic address resolution.
|
|
@@ -159,6 +415,28 @@ export class InfrastructureService {
|
|
|
159
415
|
getNormalizedServices() {
|
|
160
416
|
return this.normalizedServices;
|
|
161
417
|
}
|
|
418
|
+
/**
|
|
419
|
+
* Databases declared for this stack's postgres (e.g. main, storage, geo).
|
|
420
|
+
* Source of truth for "which DBs must be backed up" — read straight from
|
|
421
|
+
* the same `infrastructure.postgres.databases` block omnitron provisions
|
|
422
|
+
* from, so the backup set can never drift from the provisioned set.
|
|
423
|
+
*/
|
|
424
|
+
getPostgresDatabases() {
|
|
425
|
+
const pg = this.config.postgres;
|
|
426
|
+
if (!pg || !pg.databases)
|
|
427
|
+
return [];
|
|
428
|
+
return Object.keys(pg.databases);
|
|
429
|
+
}
|
|
430
|
+
/**
|
|
431
|
+
* Resolved container name for an infra service (e.g. 'postgres' →
|
|
432
|
+
* 'acme-dev-postgres'). Taken from the already-resolved desired containers
|
|
433
|
+
* so it reflects the real container prefix rather than re-deriving it from
|
|
434
|
+
* the mutable module-global. Returns null if the stack has no such service.
|
|
435
|
+
*/
|
|
436
|
+
getResolvedContainerName(service) {
|
|
437
|
+
const match = this.desiredContainers.find((d) => d.name.endsWith(`-${service}`));
|
|
438
|
+
return match?.name ?? null;
|
|
439
|
+
}
|
|
162
440
|
/**
|
|
163
441
|
* Get connection info for an infrastructure service.
|
|
164
442
|
* Used by config generator to resolve { infra: 'postgres', database: 'main' }.
|
|
@@ -170,7 +448,7 @@ export class InfrastructureService {
|
|
|
170
448
|
if (!pg)
|
|
171
449
|
return null;
|
|
172
450
|
return {
|
|
173
|
-
host:
|
|
451
|
+
host: LOCAL_INFRA_HOST,
|
|
174
452
|
port: pg.port ?? 5432,
|
|
175
453
|
user: pg.user ?? 'postgres',
|
|
176
454
|
password: typeof pg.password === 'string' ? pg.password : 'postgres',
|
|
@@ -181,7 +459,7 @@ export class InfrastructureService {
|
|
|
181
459
|
if (!redis)
|
|
182
460
|
return null;
|
|
183
461
|
return {
|
|
184
|
-
host:
|
|
462
|
+
host: LOCAL_INFRA_HOST,
|
|
185
463
|
port: redis.port ?? 6379,
|
|
186
464
|
password: typeof redis.password === 'string' ? redis.password : undefined,
|
|
187
465
|
databases: redis.databases ?? {},
|
|
@@ -192,7 +470,7 @@ export class InfrastructureService {
|
|
|
192
470
|
if (!minio)
|
|
193
471
|
return null;
|
|
194
472
|
return {
|
|
195
|
-
endpoint: `http
|
|
473
|
+
endpoint: `http://${LOCAL_INFRA_HOST}:${minio.ports?.api ?? 9000}`,
|
|
196
474
|
accessKey: minio.accessKey ?? 'minioadmin',
|
|
197
475
|
secretKey: typeof minio.secretKey === 'string' ? minio.secretKey : 'minioadmin',
|
|
198
476
|
forcePathStyle: true,
|
|
@@ -200,7 +478,7 @@ export class InfrastructureService {
|
|
|
200
478
|
}
|
|
201
479
|
case 'omnitron-pg':
|
|
202
480
|
return {
|
|
203
|
-
host:
|
|
481
|
+
host: LOCAL_INFRA_HOST,
|
|
204
482
|
port: OMNITRON_PG_PORT,
|
|
205
483
|
user: OMNITRON_PG_USER,
|
|
206
484
|
password: OMNITRON_PG_PASSWORD,
|
|
@@ -213,9 +491,73 @@ export class InfrastructureService {
|
|
|
213
491
|
// ===========================================================================
|
|
214
492
|
// Private — Reconciliation
|
|
215
493
|
// ===========================================================================
|
|
494
|
+
/**
|
|
495
|
+
* Per-name in-flight reconcile lock (T#58). A health sweep that
|
|
496
|
+
* overlaps a previous slow sweep — or a reconcile triggered by
|
|
497
|
+
* `ensureXxx` calls happening concurrently — used to enter
|
|
498
|
+
* `reconcileService` twice for the same container. The first did
|
|
499
|
+
* `removeContainer` then `createAndStart`; the second saw the
|
|
500
|
+
* container missing mid-recreate and tried to recreate it too,
|
|
501
|
+
* producing name conflicts, partial state, and (with Docker's
|
|
502
|
+
* own restart-policy in the mix) occasional duplicate containers.
|
|
503
|
+
*/
|
|
504
|
+
reconciling = new Set();
|
|
505
|
+
/**
|
|
506
|
+
* Where this node keeps each service's config files, once a master sent them.
|
|
507
|
+
*
|
|
508
|
+
* The gateway is not an ordinary preset container — it needs four bind
|
|
509
|
+
* mounts, an entrypoint and fifteen upstream variables, and `resolveGateway`
|
|
510
|
+
* is the only thing that produces them. The constructor resolved everything
|
|
511
|
+
* through the generic preset path, because at construction time this node
|
|
512
|
+
* had no files and no local path to mount from.
|
|
513
|
+
*
|
|
514
|
+
* So this RE-RESOLVES rather than patching the volumes of a container built
|
|
515
|
+
* without them. A spec assembled by the wrong resolver is missing more than
|
|
516
|
+
* paths, and rewriting one field of it would produce a container that looks
|
|
517
|
+
* configured and is not — which is the failure that was already shipping,
|
|
518
|
+
* one level down.
|
|
519
|
+
*
|
|
520
|
+
* Called before `provision()`, so the recreation the changed spec hash
|
|
521
|
+
* implies happens on the first pass rather than the second.
|
|
522
|
+
*/
|
|
523
|
+
setConfigRoots(roots, staticRoots, redis,
|
|
524
|
+
/**
|
|
525
|
+
* The static ROOT per service, when the delivery made a
|
|
526
|
+
* `current-<project>-<stack>` link inside it. Given, the gateway mounts
|
|
527
|
+
* the root and serves through the link — a path that does not change from
|
|
528
|
+
* one release to the next, so the container is not recreated and the
|
|
529
|
+
* second of 000 a deployment cost goes with it. Empty, everything below
|
|
530
|
+
* resolves exactly as before.
|
|
531
|
+
*/
|
|
532
|
+
staticLinkRoots) {
|
|
533
|
+
if (roots.size === 0)
|
|
534
|
+
return;
|
|
535
|
+
this.desiredContainers = resolveInfrastructure(this.config, this.normalizedServices, this.serviceOverrides, roots, { redis, staticRoots, ...(staticLinkRoots && { staticLinkRoots }) });
|
|
536
|
+
}
|
|
216
537
|
async reconcileService(desired) {
|
|
538
|
+
// T#58: per-name lock around the whole inspect→decide→act loop.
|
|
539
|
+
if (this.reconciling.has(desired.name)) {
|
|
540
|
+
this.logger.debug({ service: desired.name }, 'Reconcile already in flight — skipping');
|
|
541
|
+
return;
|
|
542
|
+
}
|
|
543
|
+
this.reconciling.add(desired.name);
|
|
544
|
+
try {
|
|
545
|
+
await this.reconcileServiceLocked(desired);
|
|
546
|
+
}
|
|
547
|
+
finally {
|
|
548
|
+
this.reconciling.delete(desired.name);
|
|
549
|
+
}
|
|
550
|
+
}
|
|
551
|
+
async reconcileServiceLocked(desired) {
|
|
217
552
|
const actual = await getContainerState(desired.name);
|
|
218
553
|
const action = this.computeAction(desired, actual);
|
|
554
|
+
// A container that was created, started or recreated is listening on a
|
|
555
|
+
// NEW socket. Applications already running hold pools pointing at the
|
|
556
|
+
// old one, and a titan liveness probe does not notice — the app answers
|
|
557
|
+
// `/health` 200 while every request it serves fails with "Connection
|
|
558
|
+
// terminated unexpectedly". Whoever asked for this reconcile is the only
|
|
559
|
+
// one in a position to restart them, so it has to be told.
|
|
560
|
+
this.lastActions.set(desired.name, action.type);
|
|
219
561
|
switch (action.type) {
|
|
220
562
|
case 'noop':
|
|
221
563
|
this.logger.debug({ service: desired.name }, 'Service already running');
|
|
@@ -251,6 +593,17 @@ export class InfrastructureService {
|
|
|
251
593
|
return { type: 'create', service: desired.name, config: desired };
|
|
252
594
|
}
|
|
253
595
|
if (actual.status === 'running') {
|
|
596
|
+
// Running but detached from all networks (OrbStack/dockerd-restart
|
|
597
|
+
// artifact): the container is unreachable and its published ports are
|
|
598
|
+
// gone. 'running' is a lie here — recreate to re-attach + re-publish.
|
|
599
|
+
if (actual.networkAttached === false) {
|
|
600
|
+
return {
|
|
601
|
+
type: 'recreate',
|
|
602
|
+
service: desired.name,
|
|
603
|
+
config: desired,
|
|
604
|
+
reason: 'network-detached (running but on no network)',
|
|
605
|
+
};
|
|
606
|
+
}
|
|
254
607
|
// Check if image changed
|
|
255
608
|
if (actual.image !== desired.image && !actual.image.startsWith(desired.image)) {
|
|
256
609
|
return {
|
|
@@ -260,9 +613,55 @@ export class InfrastructureService {
|
|
|
260
613
|
reason: `image changed: ${actual.image} → ${desired.image}`,
|
|
261
614
|
};
|
|
262
615
|
}
|
|
616
|
+
// Config drift: image unchanged but the desired spec (env, ports,
|
|
617
|
+
// volumes, command, extraHosts) differs from what the running container
|
|
618
|
+
// was created with. Without this, an omnitron.config.ts edit that only
|
|
619
|
+
// touches env — e.g. the Tor hidden-service target — is silently ignored
|
|
620
|
+
// because the container is "running and healthy". Only fires when the
|
|
621
|
+
// running container carries a spec-hash label; pre-upgrade containers
|
|
622
|
+
// (no label) are left alone until they recreate for another reason, so
|
|
623
|
+
// upgrading omnitron never churns an otherwise-healthy stack.
|
|
624
|
+
if (actual.specHash) {
|
|
625
|
+
const desiredHash = containerSpecHash(desired);
|
|
626
|
+
if (actual.specHash !== desiredHash) {
|
|
627
|
+
return {
|
|
628
|
+
type: 'recreate',
|
|
629
|
+
service: desired.name,
|
|
630
|
+
config: desired,
|
|
631
|
+
reason: `config drift (spec ${actual.specHash} → ${desiredHash})`,
|
|
632
|
+
};
|
|
633
|
+
}
|
|
634
|
+
}
|
|
263
635
|
return { type: 'noop', service: desired.name };
|
|
264
636
|
}
|
|
265
637
|
if (actual.status === 'exited' || actual.status === 'created') {
|
|
638
|
+
// A container that is not running still carries the spec it was created
|
|
639
|
+
// with, and `start` runs THAT spec. The drift checks above were only
|
|
640
|
+
// asked of a running container, so one created wrong was started wrong
|
|
641
|
+
// for as long as it existed: Nominatim on daos/test, created at 05:37
|
|
642
|
+
// with a mount the master had not rewritten, was «started» by every
|
|
643
|
+
// reconcile after the fix that corrected its desired spec — «exec:
|
|
644
|
+
// /opt/nominatim-tools/cis-entrypoint.sh: no such file» each time
|
|
645
|
+
// (2026-09-25). Same questions, same answers, before it is started.
|
|
646
|
+
if (actual.image !== desired.image && !actual.image.startsWith(desired.image)) {
|
|
647
|
+
return {
|
|
648
|
+
type: 'recreate',
|
|
649
|
+
service: desired.name,
|
|
650
|
+
config: desired,
|
|
651
|
+
reason: `image changed while stopped: ${actual.image} → ${desired.image}`,
|
|
652
|
+
};
|
|
653
|
+
}
|
|
654
|
+
if (actual.specHash) {
|
|
655
|
+
const desiredHash = containerSpecHash(desired);
|
|
656
|
+
if (actual.specHash !== desiredHash) {
|
|
657
|
+
return {
|
|
658
|
+
type: 'recreate',
|
|
659
|
+
service: desired.name,
|
|
660
|
+
config: desired,
|
|
661
|
+
reason: `config drift while ${actual.status} (spec ${actual.specHash} → ${desiredHash})`,
|
|
662
|
+
};
|
|
663
|
+
}
|
|
664
|
+
}
|
|
266
665
|
return { type: 'start', service: desired.name, containerId: actual.containerId ?? desired.name };
|
|
267
666
|
}
|
|
268
667
|
// Dead or other — recreate
|
|
@@ -343,6 +742,26 @@ export class InfrastructureService {
|
|
|
343
742
|
const { execFile } = await import('node:child_process');
|
|
344
743
|
const { promisify } = await import('node:util');
|
|
345
744
|
const execFileAsync = promisify(execFile);
|
|
745
|
+
// A preset hook is what creates the databases inside Postgres and the
|
|
746
|
+
// buckets inside MinIO — the containers are running either way, so a
|
|
747
|
+
// failure here is invisible until an application cannot find its
|
|
748
|
+
// database.
|
|
749
|
+
//
|
|
750
|
+
// `this.presetRegistry!` asserted a dependency the constructor declares
|
|
751
|
+
// OPTIONAL, so a caller that did not pass one — which the type permits —
|
|
752
|
+
// got `Cannot read properties of undefined (reading 'get')` from a line
|
|
753
|
+
// that reads as internal, after every container was already up.
|
|
754
|
+
// Measured on a node provisioning a stack, where the containers stayed
|
|
755
|
+
// and the databases were never made.
|
|
756
|
+
if (!this.presetRegistry) {
|
|
757
|
+
const withPresets = Object.entries(this.normalizedServices)
|
|
758
|
+
.filter(([, r]) => r._preset)
|
|
759
|
+
.map(([name]) => name);
|
|
760
|
+
if (withPresets.length > 0) {
|
|
761
|
+
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');
|
|
762
|
+
}
|
|
763
|
+
return;
|
|
764
|
+
}
|
|
346
765
|
for (const [serviceName, requirement] of Object.entries(this.normalizedServices)) {
|
|
347
766
|
if (!requirement._preset)
|
|
348
767
|
continue;
|
|
@@ -400,51 +819,20 @@ export class InfrastructureService {
|
|
|
400
819
|
this.logger.info('Omnitron internal database provisioned and migrated');
|
|
401
820
|
}
|
|
402
821
|
/**
|
|
403
|
-
*
|
|
404
|
-
*
|
|
822
|
+
* Apply the internal-database schema through the shared runner.
|
|
823
|
+
*
|
|
824
|
+
* This used to be a second, independently-maintained copy of the daemon's
|
|
825
|
+
* migration code that only knew migrations 001–002 — and, like the
|
|
826
|
+
* daemon's copy, it constructed `Migrator` from the `kysely` package root
|
|
827
|
+
* where that export does not exist, so it threw on every run. Both are now
|
|
828
|
+
* one call into `database/migration-runner.ts`.
|
|
829
|
+
*
|
|
830
|
+
* Errors propagate to `provisionOmnitronDatabase`'s caller: provisioning
|
|
831
|
+
* that ends with an unmigrated database has not succeeded.
|
|
405
832
|
*/
|
|
406
833
|
async runOmnitronMigrations() {
|
|
407
|
-
const {
|
|
408
|
-
|
|
409
|
-
const m001 = await import('../database/migrations/001_initial_schema.js');
|
|
410
|
-
const m002 = await import('../database/migrations/002_metrics_raw.js');
|
|
411
|
-
const pool = new pg.default.Pool({
|
|
412
|
-
host: 'localhost',
|
|
413
|
-
port: OMNITRON_PG_PORT,
|
|
414
|
-
database: OMNITRON_PG_DATABASE,
|
|
415
|
-
user: OMNITRON_PG_USER,
|
|
416
|
-
password: OMNITRON_PG_PASSWORD,
|
|
417
|
-
});
|
|
418
|
-
const db = new Kysely({
|
|
419
|
-
dialect: new PostgresDialect({ pool }),
|
|
420
|
-
});
|
|
421
|
-
try {
|
|
422
|
-
const migrator = new Migrator({
|
|
423
|
-
db,
|
|
424
|
-
provider: {
|
|
425
|
-
async getMigrations() {
|
|
426
|
-
return {
|
|
427
|
-
'001_initial_schema': { up: m001.up, down: m001.down },
|
|
428
|
-
'002_metrics_raw': { up: m002.up, down: m002.down },
|
|
429
|
-
};
|
|
430
|
-
},
|
|
431
|
-
},
|
|
432
|
-
});
|
|
433
|
-
const { results, error } = await migrator.migrateToLatest();
|
|
434
|
-
const applied = results?.filter((r) => r.status === 'Success') ?? [];
|
|
435
|
-
if (applied.length > 0) {
|
|
436
|
-
this.logger.info({ migrations: applied.map((r) => r.migrationName) }, `Applied ${applied.length} Omnitron migration(s)`);
|
|
437
|
-
}
|
|
438
|
-
else {
|
|
439
|
-
this.logger.debug('Omnitron database schema is up to date');
|
|
440
|
-
}
|
|
441
|
-
if (error) {
|
|
442
|
-
this.logger.error({ error: String(error) }, 'Migration error');
|
|
443
|
-
}
|
|
444
|
-
}
|
|
445
|
-
finally {
|
|
446
|
-
await db.destroy();
|
|
447
|
-
}
|
|
834
|
+
const { runOmnitronMigrations } = await import('../database/migration-runner.js');
|
|
835
|
+
await runOmnitronMigrations(this.logger);
|
|
448
836
|
}
|
|
449
837
|
// ===========================================================================
|
|
450
838
|
// Private — Health Monitor (Self-Healing)
|
|
@@ -463,33 +851,84 @@ export class InfrastructureService {
|
|
|
463
851
|
this.healthTimer = null;
|
|
464
852
|
}
|
|
465
853
|
}
|
|
854
|
+
/**
|
|
855
|
+
* The control-plane database container this service keeps, if any: none on
|
|
856
|
+
* a node — it keeps its own state in SQLite (`decideControlPlaneDatabase`) —
|
|
857
|
+
* and none where the global `omnitron-pg` serves.
|
|
858
|
+
*
|
|
859
|
+
* `provision()` asked `needsControlPlaneDatabase`; the health sweep and the
|
|
860
|
+
* teardown asked only `usingGlobalOmnitronPg`. So on a node the sweep found
|
|
861
|
+
* `<prefix>-pg` «not running» every 30 s and created it: daos/test got one on
|
|
862
|
+
* 2026-09-20, and again on 2026-09-25 forty seconds after it was removed —
|
|
863
|
+
* on the default credentials, for a database nothing reads.
|
|
864
|
+
*/
|
|
865
|
+
controlPlaneContainers() {
|
|
866
|
+
return this.needsControlPlaneDatabase && !this.usingGlobalOmnitronPg ? [this.omnitronPgContainer] : [];
|
|
867
|
+
}
|
|
466
868
|
async healthSweep() {
|
|
467
|
-
//
|
|
468
|
-
//
|
|
469
|
-
const allContainers = this.
|
|
470
|
-
? [...this.desiredContainers]
|
|
471
|
-
: [this.omnitronPgContainer, ...this.desiredContainers];
|
|
869
|
+
// The control-plane database alongside the app containers, where this
|
|
870
|
+
// service keeps one.
|
|
871
|
+
const allContainers = [...this.controlPlaneContainers(), ...this.desiredContainers];
|
|
472
872
|
for (const desired of allContainers) {
|
|
473
873
|
const actual = await getContainerState(desired.name);
|
|
874
|
+
// T#58: Docker's own `--restart=always` / `--restart=on-failure`
|
|
875
|
+
// policy puts the container into the 'restarting' state for the
|
|
876
|
+
// brief window between exit and re-entry. If we recreate during
|
|
877
|
+
// that window we race Docker's restart — `removeContainer` mid-
|
|
878
|
+
// restart leaves the daemon confused, and the recreated container
|
|
879
|
+
// may end up duplicated under a renamed transient. Let Docker
|
|
880
|
+
// finish; the next 30s tick will see 'running' and skip.
|
|
881
|
+
if (actual?.status === 'restarting') {
|
|
882
|
+
this.logger.debug({ service: desired.name }, "Service is restarting via Docker's own policy — yielding to it (T#58)");
|
|
883
|
+
continue;
|
|
884
|
+
}
|
|
474
885
|
if (!actual || actual.status !== 'running') {
|
|
886
|
+
this.unhealthyTicks.delete(desired.name);
|
|
887
|
+
// Circuit-breaker: while a service is inside its backoff window, skip
|
|
888
|
+
// the restart so a permanently-failing container can't hammer the
|
|
889
|
+
// supervisor every tick and starve the daemon's event loop.
|
|
890
|
+
const backoff = this.restartBackoff.get(desired.name);
|
|
891
|
+
if (backoff && Date.now() < backoff.nextAttemptAt) {
|
|
892
|
+
this.logger.debug({ service: desired.name, failures: backoff.failures, retryInMs: backoff.nextAttemptAt - Date.now() }, 'Service not running — in restart backoff, skipping tick');
|
|
893
|
+
continue;
|
|
894
|
+
}
|
|
475
895
|
this.logger.warn({ service: desired.name, status: actual?.status ?? 'not_found' }, 'Service not running — auto-restarting');
|
|
476
896
|
try {
|
|
477
897
|
await this.reconcileService(desired);
|
|
898
|
+
this.restartBackoff.delete(desired.name);
|
|
478
899
|
}
|
|
479
900
|
catch (err) {
|
|
480
|
-
this.
|
|
901
|
+
const failures = (this.restartBackoff.get(desired.name)?.failures ?? 0) + 1;
|
|
902
|
+
const backoffMs = restartBackoffMs(failures);
|
|
903
|
+
this.restartBackoff.set(desired.name, { failures, nextAttemptAt: Date.now() + backoffMs });
|
|
904
|
+
this.logger.error({ service: desired.name, error: err.message, failures, backoffMs }, 'Auto-restart failed');
|
|
481
905
|
}
|
|
482
906
|
}
|
|
483
907
|
else if (actual.health === 'unhealthy') {
|
|
484
|
-
this.
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
908
|
+
const ticks = (this.unhealthyTicks.get(desired.name) ?? 0) + 1;
|
|
909
|
+
this.unhealthyTicks.set(desired.name, ticks);
|
|
910
|
+
if (ticks < UNHEALTHY_RESTART_THRESHOLD) {
|
|
911
|
+
this.logger.warn({ service: desired.name, consecutiveUnhealthy: ticks, threshold: UNHEALTHY_RESTART_THRESHOLD }, 'Service unhealthy — waiting for confirmation before restart');
|
|
488
912
|
}
|
|
489
|
-
|
|
490
|
-
this.
|
|
913
|
+
else {
|
|
914
|
+
this.unhealthyTicks.delete(desired.name);
|
|
915
|
+
this.logger.warn({ service: desired.name, consecutiveUnhealthy: ticks }, 'Service unhealthy past threshold — restarting container');
|
|
916
|
+
try {
|
|
917
|
+
await removeContainer(desired.name);
|
|
918
|
+
await this.createAndStart(desired);
|
|
919
|
+
}
|
|
920
|
+
catch (err) {
|
|
921
|
+
this.logger.error({ service: desired.name, error: err.message }, 'Health restart failed');
|
|
922
|
+
}
|
|
491
923
|
}
|
|
492
924
|
}
|
|
925
|
+
else {
|
|
926
|
+
// Healthy or starting — clear any accumulated unhealthy ticks and
|
|
927
|
+
// reset the restart circuit-breaker (it may have recovered on its own
|
|
928
|
+
// via Docker's restart policy).
|
|
929
|
+
this.unhealthyTicks.delete(desired.name);
|
|
930
|
+
this.restartBackoff.delete(desired.name);
|
|
931
|
+
}
|
|
493
932
|
// Update state
|
|
494
933
|
const newState = await getContainerState(desired.name);
|
|
495
934
|
if (newState) {
|
|
@@ -499,4 +938,40 @@ export class InfrastructureService {
|
|
|
499
938
|
this.state.lastReconciled = new Date().toISOString();
|
|
500
939
|
}
|
|
501
940
|
}
|
|
941
|
+
/**
|
|
942
|
+
* T#76: shallow equality on the fields that drive container
|
|
943
|
+
* identity. Two declarations that differ only in incidental fields
|
|
944
|
+
* (label maps, restart policy adornments) should still be treated
|
|
945
|
+
* as the same shared container; differences in image / env / port
|
|
946
|
+
* mapping legitimately deserve an operator-facing warning.
|
|
947
|
+
*/
|
|
948
|
+
function shallowContainerEqual(a, b) {
|
|
949
|
+
if (a.image !== b.image)
|
|
950
|
+
return false;
|
|
951
|
+
if (!sameRecord(a.environment, b.environment))
|
|
952
|
+
return false;
|
|
953
|
+
if (a.ports.length !== b.ports.length)
|
|
954
|
+
return false;
|
|
955
|
+
for (let i = 0; i < a.ports.length; i++) {
|
|
956
|
+
if (a.ports[i].host !== b.ports[i].host || a.ports[i].container !== b.ports[i].container)
|
|
957
|
+
return false;
|
|
958
|
+
}
|
|
959
|
+
if (a.volumes.length !== b.volumes.length)
|
|
960
|
+
return false;
|
|
961
|
+
for (let i = 0; i < a.volumes.length; i++) {
|
|
962
|
+
if (a.volumes[i].source !== b.volumes[i].source || a.volumes[i].target !== b.volumes[i].target)
|
|
963
|
+
return false;
|
|
964
|
+
}
|
|
965
|
+
return true;
|
|
966
|
+
}
|
|
967
|
+
function sameRecord(a, b) {
|
|
968
|
+
const ka = Object.keys(a ?? {});
|
|
969
|
+
const kb = Object.keys(b ?? {});
|
|
970
|
+
if (ka.length !== kb.length)
|
|
971
|
+
return false;
|
|
972
|
+
for (const k of ka)
|
|
973
|
+
if (a?.[k] !== b?.[k])
|
|
974
|
+
return false;
|
|
975
|
+
return true;
|
|
976
|
+
}
|
|
502
977
|
//# sourceMappingURL=infrastructure.service.js.map
|