@omnitron-dev/omnitron 0.3.0 → 0.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +4 -0
- package/dist/BUILD.json +2 -2
- package/dist/cli/omnitron.js +26 -2
- package/dist/cli/omnitron.js.map +1 -1
- package/dist/cluster/mesh-link.js +1 -1
- package/dist/cluster/slave-connector.d.ts +2 -2
- package/dist/cluster/slave-connector.js +1 -1
- package/dist/commands/deploy.d.ts +4 -4
- package/dist/commands/deploy.js +4 -4
- package/dist/commands/discover.d.ts +2 -2
- package/dist/commands/discover.js +2 -2
- package/dist/commands/fleet-asking.d.ts +2 -2
- package/dist/commands/fleet-asking.js +2 -2
- package/dist/commands/fleet-recover.d.ts +2 -0
- package/dist/commands/fleet-recover.d.ts.map +1 -0
- package/dist/commands/fleet-recover.js +30 -0
- package/dist/commands/fleet-recover.js.map +1 -0
- package/dist/commands/host-ingress.d.ts +3 -0
- package/dist/commands/host-ingress.d.ts.map +1 -0
- package/dist/commands/host-ingress.js +31 -0
- package/dist/commands/host-ingress.js.map +1 -0
- package/dist/commands/infra.d.ts +2 -2
- package/dist/commands/infra.js +7 -7
- package/dist/commands/infra.js.map +1 -1
- package/dist/commands/logs.d.ts +1 -1
- package/dist/commands/logs.js +3 -3
- package/dist/commands/logs.js.map +1 -1
- package/dist/commands/node.d.ts +2 -14
- package/dist/commands/node.d.ts.map +1 -1
- package/dist/commands/node.js +33 -22
- package/dist/commands/node.js.map +1 -1
- package/dist/commands/pipeline.d.ts.map +1 -1
- package/dist/commands/pipeline.js +8 -1
- package/dist/commands/pipeline.js.map +1 -1
- package/dist/commands/project.d.ts +2 -2
- package/dist/commands/project.js +2 -2
- package/dist/commands/release.d.ts +1 -1
- package/dist/commands/release.js +4 -4
- package/dist/commands/release.js.map +1 -1
- package/dist/commands/remote.d.ts +3 -3
- package/dist/commands/remote.js +3 -3
- package/dist/commands/tor.d.ts +1 -1
- package/dist/commands/tor.js +2 -2
- package/dist/config/types.d.ts +9 -6
- package/dist/config/types.d.ts.map +1 -1
- package/dist/daemon/daemon-entry.js +1 -1
- package/dist/daemon/daemon-entry.js.map +1 -1
- package/dist/daemon/daemon.d.ts +5 -19
- package/dist/daemon/daemon.d.ts.map +1 -1
- package/dist/daemon/daemon.js +54 -51
- package/dist/daemon/daemon.js.map +1 -1
- package/dist/daemon/daemon.module.d.ts.map +1 -1
- package/dist/daemon/daemon.module.js +3 -5
- package/dist/daemon/daemon.module.js.map +1 -1
- package/dist/daemon/daemon.rpc-service.d.ts +2 -2
- package/dist/daemon/daemon.rpc-service.js +6 -6
- package/dist/daemon/daemon.rpc-service.js.map +1 -1
- package/dist/execution/data-channel.d.ts +1 -1
- package/dist/execution/data-channel.js +1 -1
- package/dist/execution/execution.service.d.ts +10 -3
- package/dist/execution/execution.service.d.ts.map +1 -1
- package/dist/execution/execution.service.js +101 -44
- package/dist/execution/execution.service.js.map +1 -1
- package/dist/infrastructure/bare-metal-plan.js +1 -1
- package/dist/infrastructure/bare-metal-plan.js.map +1 -1
- package/dist/infrastructure/config-payload.d.ts +4 -4
- package/dist/infrastructure/config-payload.js +4 -4
- package/dist/infrastructure/container-runtime.d.ts +2 -10
- package/dist/infrastructure/container-runtime.d.ts.map +1 -1
- package/dist/infrastructure/container-runtime.js +41 -20
- package/dist/infrastructure/container-runtime.js.map +1 -1
- package/dist/infrastructure/gateway-redis-db.d.ts +2 -2
- package/dist/infrastructure/gateway-redis-db.js +2 -2
- package/dist/infrastructure/host-ingress-config.d.ts +12 -0
- package/dist/infrastructure/host-ingress-config.d.ts.map +1 -0
- package/dist/infrastructure/host-ingress-config.js +197 -0
- package/dist/infrastructure/host-ingress-config.js.map +1 -0
- package/dist/infrastructure/host-ingress-lock.d.ts +4 -0
- package/dist/infrastructure/host-ingress-lock.d.ts.map +1 -0
- package/dist/infrastructure/host-ingress-lock.js +36 -0
- package/dist/infrastructure/host-ingress-lock.js.map +1 -0
- package/dist/infrastructure/host-ingress-runtime.d.ts +25 -0
- package/dist/infrastructure/host-ingress-runtime.d.ts.map +1 -0
- package/dist/infrastructure/host-ingress-runtime.js +114 -0
- package/dist/infrastructure/host-ingress-runtime.js.map +1 -0
- package/dist/infrastructure/host-ingress-takeover.d.ts +18 -0
- package/dist/infrastructure/host-ingress-takeover.d.ts.map +1 -0
- package/dist/infrastructure/host-ingress-takeover.js +142 -0
- package/dist/infrastructure/host-ingress-takeover.js.map +1 -0
- package/dist/infrastructure/host-ingress-types.d.ts +173 -0
- package/dist/infrastructure/host-ingress-types.d.ts.map +1 -0
- package/dist/infrastructure/host-ingress-types.js +2 -0
- package/dist/infrastructure/host-ingress-types.js.map +1 -0
- package/dist/infrastructure/host-ingress.service.d.ts +47 -0
- package/dist/infrastructure/host-ingress.service.d.ts.map +1 -0
- package/dist/infrastructure/host-ingress.service.js +514 -0
- package/dist/infrastructure/host-ingress.service.js.map +1 -0
- package/dist/infrastructure/infrastructure.service.d.ts +21 -5
- package/dist/infrastructure/infrastructure.service.d.ts.map +1 -1
- package/dist/infrastructure/infrastructure.service.js +91 -10
- package/dist/infrastructure/infrastructure.service.js.map +1 -1
- package/dist/infrastructure/orphan-containers.d.ts +7 -7
- package/dist/infrastructure/orphan-containers.js +6 -6
- package/dist/infrastructure/presets/minio.js +1 -1
- package/dist/infrastructure/presets/minio.js.map +1 -1
- package/dist/infrastructure/provisioning-outcome.d.ts +1 -1
- package/dist/infrastructure/provisioning-outcome.js +1 -1
- package/dist/infrastructure/service-binding.js +1 -1
- package/dist/infrastructure/service-resolver.d.ts +10 -4
- package/dist/infrastructure/service-resolver.d.ts.map +1 -1
- package/dist/infrastructure/service-resolver.js +88 -45
- package/dist/infrastructure/service-resolver.js.map +1 -1
- package/dist/infrastructure/shipped-config.js +4 -4
- package/dist/infrastructure/stack-infra-manager.d.ts +10 -1
- package/dist/infrastructure/stack-infra-manager.d.ts.map +1 -1
- package/dist/infrastructure/stack-infra-manager.js +53 -43
- package/dist/infrastructure/stack-infra-manager.js.map +1 -1
- package/dist/infrastructure/types.d.ts +8 -6
- package/dist/infrastructure/types.d.ts.map +1 -1
- package/dist/monitoring/log-line.d.ts +3 -3
- package/dist/monitoring/log-line.js +3 -3
- package/dist/monitoring/log-manager.d.ts +3 -3
- package/dist/monitoring/log-manager.js +3 -3
- package/dist/operations.d.ts +16 -0
- package/dist/operations.d.ts.map +1 -0
- package/dist/operations.js +13 -0
- package/dist/operations.js.map +1 -0
- package/dist/orchestrator/app-handle.d.ts +3 -3
- package/dist/orchestrator/app-handle.js +3 -3
- package/dist/orchestrator/bootstrap-loader.d.ts +2 -2
- package/dist/orchestrator/bootstrap-loader.js +3 -3
- package/dist/orchestrator/bootstrap-loader.js.map +1 -1
- package/dist/orchestrator/bootstrap-process.d.ts +1 -1
- package/dist/orchestrator/bootstrap-process.d.ts.map +1 -1
- package/dist/orchestrator/bootstrap-process.js +3 -2
- package/dist/orchestrator/bootstrap-process.js.map +1 -1
- package/dist/orchestrator/build-service.d.ts +6 -12
- package/dist/orchestrator/build-service.d.ts.map +1 -1
- package/dist/orchestrator/build-service.js +120 -83
- package/dist/orchestrator/build-service.js.map +1 -1
- package/dist/orchestrator/call-exposed-service.js +1 -1
- package/dist/orchestrator/classic-launcher.d.ts.map +1 -1
- package/dist/orchestrator/classic-launcher.js +6 -1
- package/dist/orchestrator/classic-launcher.js.map +1 -1
- package/dist/orchestrator/file-watcher.d.ts +1 -0
- package/dist/orchestrator/file-watcher.d.ts.map +1 -1
- package/dist/orchestrator/file-watcher.js +14 -3
- package/dist/orchestrator/file-watcher.js.map +1 -1
- package/dist/orchestrator/http-routes.d.ts +4 -0
- package/dist/orchestrator/http-routes.d.ts.map +1 -0
- package/dist/orchestrator/http-routes.js +19 -0
- package/dist/orchestrator/http-routes.js.map +1 -0
- package/dist/orchestrator/orchestrator.service.d.ts +18 -4
- package/dist/orchestrator/orchestrator.service.d.ts.map +1 -1
- package/dist/orchestrator/orchestrator.service.js +151 -110
- package/dist/orchestrator/orchestrator.service.js.map +1 -1
- package/dist/orchestrator/service-router.d.ts +1 -1
- package/dist/orchestrator/service-router.js +1 -1
- package/dist/orchestrator/topology-query.d.ts +1 -1
- package/dist/orchestrator/topology-query.js +1 -1
- package/dist/project/artifact-builder.js +2 -2
- package/dist/project/artifact-builder.js.map +1 -1
- package/dist/project/build-decision.d.ts +1 -1
- package/dist/project/build-decision.js +1 -1
- package/dist/project/config-resolver.js +1 -1
- package/dist/project/config-resolver.js.map +1 -1
- package/dist/project/declared-config.d.ts +2 -2
- package/dist/project/declared-config.js +2 -2
- package/dist/project/deploy-phases.d.ts +1 -1
- package/dist/project/deploy-phases.js +1 -1
- package/dist/project/exec-in-group.d.ts +1 -1
- package/dist/project/exec-in-group.js +1 -1
- package/dist/project/node-app-config.d.ts +2 -2
- package/dist/project/node-app-config.js +2 -2
- package/dist/project/node-app-config.js.map +1 -1
- package/dist/project/node-app-health.d.ts +1 -1
- package/dist/project/node-app-health.js +1 -1
- package/dist/project/operator-account.d.ts +9 -3
- package/dist/project/operator-account.d.ts.map +1 -1
- package/dist/project/operator-account.js +9 -9
- package/dist/project/operator-account.js.map +1 -1
- package/dist/project/registry.d.ts.map +1 -1
- package/dist/project/registry.js +4 -22
- package/dist/project/registry.js.map +1 -1
- package/dist/project/stack-env.d.ts +1 -1
- package/dist/project/stack-env.js +1 -1
- package/dist/project/stand-containers.d.ts +9 -2
- package/dist/project/stand-containers.d.ts.map +1 -1
- package/dist/project/stand-containers.js +17 -17
- package/dist/project/stand-containers.js.map +1 -1
- package/dist/release/artifact-store.d.ts +1 -1
- package/dist/release/artifact-store.d.ts.map +1 -1
- package/dist/release/artifact-store.js +1 -1
- package/dist/release/artifact-store.js.map +1 -1
- package/dist/release/attest-on-node.d.ts +3 -2
- package/dist/release/attest-on-node.d.ts.map +1 -1
- package/dist/release/attest-on-node.js +6 -6
- package/dist/release/attest-on-node.js.map +1 -1
- package/dist/release/attest.d.ts +3 -3
- package/dist/release/attest.js +1 -1
- package/dist/release/build-run.d.ts +2 -2
- package/dist/release/build-run.js +4 -4
- package/dist/release/build-run.js.map +1 -1
- package/dist/release/builder.d.ts +1 -1
- package/dist/release/builder.d.ts.map +1 -1
- package/dist/release/builder.js +1 -1
- package/dist/release/builder.js.map +1 -1
- package/dist/release/daemon-omni.d.ts +1 -1
- package/dist/release/daemon-omni.js +1 -1
- package/dist/release/definition-inputs.d.ts +1 -1
- package/dist/release/definition-inputs.js +1 -1
- package/dist/release/layout.d.ts +2 -2
- package/dist/release/layout.js +2 -2
- package/dist/release/manifest.d.ts +1 -1
- package/dist/release/manifest.js +1 -1
- package/dist/release/publish.d.ts +1 -1
- package/dist/release/publish.js +1 -1
- package/dist/release/store.d.ts +1 -1
- package/dist/release/store.d.ts.map +1 -1
- package/dist/release/store.js +3 -3
- package/dist/release/store.js.map +1 -1
- package/dist/services/alert.service.d.ts +2 -2
- package/dist/services/alert.service.js +2 -2
- package/dist/services/backup-pipeline.d.ts +1 -1
- package/dist/services/backup-pipeline.js +1 -1
- package/dist/services/backup.service.d.ts +3 -3
- package/dist/services/backup.service.js +3 -3
- package/dist/services/bundle-builder.d.ts +15 -12
- package/dist/services/bundle-builder.d.ts.map +1 -1
- package/dist/services/bundle-builder.js +124 -48
- package/dist/services/bundle-builder.js.map +1 -1
- package/dist/services/discovery.service.d.ts +1 -1
- package/dist/services/discovery.service.js +1 -1
- package/dist/services/host-operation-barrier.d.ts +8 -0
- package/dist/services/host-operation-barrier.d.ts.map +1 -0
- package/dist/services/host-operation-barrier.js +44 -0
- package/dist/services/host-operation-barrier.js.map +1 -0
- package/dist/services/host-upgrade.d.ts +129 -0
- package/dist/services/host-upgrade.d.ts.map +1 -0
- package/dist/services/host-upgrade.js +352 -0
- package/dist/services/host-upgrade.js.map +1 -0
- package/dist/services/infrastructure.rpc-service.d.ts +16 -1
- package/dist/services/infrastructure.rpc-service.d.ts.map +1 -1
- package/dist/services/infrastructure.rpc-service.js +71 -10
- package/dist/services/infrastructure.rpc-service.js.map +1 -1
- package/dist/services/local-bundle.d.ts +9 -0
- package/dist/services/local-bundle.d.ts.map +1 -1
- package/dist/services/local-bundle.js +11 -2
- package/dist/services/local-bundle.js.map +1 -1
- package/dist/services/log-collector.service.d.ts +1 -1
- package/dist/services/log-collector.service.js +1 -1
- package/dist/services/maintenance-lock.d.ts +2 -2
- package/dist/services/maintenance-lock.d.ts.map +1 -1
- package/dist/services/maintenance-lock.js +1 -1
- package/dist/services/migration-output.d.ts +2 -2
- package/dist/services/migration-output.js +2 -2
- package/dist/services/node-deploy-lease.d.ts +19 -2
- package/dist/services/node-deploy-lease.d.ts.map +1 -1
- package/dist/services/node-deploy-lease.js +84 -10
- package/dist/services/node-deploy-lease.js.map +1 -1
- package/dist/services/node-manager.rpc-service.d.ts +6 -1
- package/dist/services/node-manager.rpc-service.d.ts.map +1 -1
- package/dist/services/node-manager.rpc-service.js +25 -1
- package/dist/services/node-manager.rpc-service.js.map +1 -1
- package/dist/services/node-manager.service.d.ts +1 -1
- package/dist/services/node-manager.service.js +1 -1
- package/dist/services/node-upgrade.d.ts +1 -1
- package/dist/services/pipeline.rpc-service.d.ts +4 -0
- package/dist/services/pipeline.rpc-service.d.ts.map +1 -1
- package/dist/services/pipeline.rpc-service.js +9 -0
- package/dist/services/pipeline.rpc-service.js.map +1 -1
- package/dist/services/pipeline.service.d.ts +2 -0
- package/dist/services/pipeline.service.d.ts.map +1 -1
- package/dist/services/pipeline.service.js +12 -0
- package/dist/services/pipeline.service.js.map +1 -1
- package/dist/services/project.rpc-service.d.ts +7 -0
- package/dist/services/project.rpc-service.d.ts.map +1 -1
- package/dist/services/project.rpc-service.js +11 -0
- package/dist/services/project.rpc-service.js.map +1 -1
- package/dist/services/project.service.d.ts +21 -11
- package/dist/services/project.service.d.ts.map +1 -1
- package/dist/services/project.service.js +74 -59
- package/dist/services/project.service.js.map +1 -1
- package/dist/services/redeploy-decision.d.ts +2 -2
- package/dist/services/redeploy-decision.js +1 -1
- package/dist/services/release.rpc-service.d.ts +1 -1
- package/dist/services/release.rpc-service.js +1 -1
- package/dist/services/remote-deployer.service.d.ts +27 -16
- package/dist/services/remote-deployer.service.d.ts.map +1 -1
- package/dist/services/remote-deployer.service.js +269 -101
- package/dist/services/remote-deployer.service.js.map +1 -1
- package/dist/services/remote-provisioner.d.ts +2 -0
- package/dist/services/remote-provisioner.d.ts.map +1 -1
- package/dist/services/remote-provisioner.js +1 -1
- package/dist/services/remote-provisioner.js.map +1 -1
- package/dist/services/static-carry-forward.d.ts +26 -1
- package/dist/services/static-carry-forward.d.ts.map +1 -1
- package/dist/services/static-carry-forward.js +275 -1
- package/dist/services/static-carry-forward.js.map +1 -1
- package/dist/shared/dto/nodes.d.ts +2 -2
- package/dist/shared/dto/services.d.ts +27 -0
- package/dist/shared/dto/services.d.ts.map +1 -1
- package/dist/shared/local-infra-host.d.ts +2 -2
- package/dist/shared/local-infra-host.js +2 -2
- package/dist/shared/release-reading.d.ts +1 -1
- package/dist/shared/release-reading.js +1 -1
- package/package.json +16 -12
- package/webapp/dist/BUILD.json +2 -2
- package/webapp/dist/assets/FormControlLabel-BbSxpQwN.js +1 -0
- package/webapp/dist/assets/{Grid-BZ7xhoHQ.js → Grid-DizFZYue.js} +1 -1
- package/webapp/dist/assets/{Switch-DGSAxQPM.js → Switch-Bfiqzx8l.js} +1 -1
- package/webapp/dist/assets/alerts-DH_RVRS3.js +1 -0
- package/webapp/dist/assets/apps-B96355sz.js +1 -0
- package/webapp/dist/assets/audit-CYGtbi4k.js +1 -0
- package/webapp/dist/assets/client-BmqFExWT.js +1 -0
- package/webapp/dist/assets/containers-B_TpThln.js +2 -0
- package/webapp/dist/assets/dashboard-DHf2_65N.js +1 -0
- package/webapp/dist/assets/dashboard-builder-CWY2pjeG.js +1 -0
- package/webapp/dist/assets/{deploy-release-dialog-D6C-XcKY.js → deploy-release-dialog-Dp-zpSAd.js} +1 -1
- package/webapp/dist/assets/deployments-tJI6O3fK.js +1 -0
- package/webapp/dist/assets/detail-B2zP1Hto.js +8 -0
- package/webapp/dist/assets/detail-CoIrwmsy.js +1 -0
- package/webapp/dist/assets/detail-DWaGaOtL.js +2 -0
- package/webapp/dist/assets/index-Dvo0iprx.css +1 -0
- package/webapp/dist/assets/index-vMnY_4jR.js +412 -0
- package/webapp/dist/assets/logs-DTRjOfX8.js +12 -0
- package/webapp/dist/assets/maplibre-gl-DowHoZAx.js +814 -0
- package/webapp/dist/assets/{metrics-CQgjz2Lz.js → metrics-UCajtdox.js} +2 -2
- package/webapp/dist/assets/nodes-DuTVU0f6.js +7 -0
- package/webapp/dist/assets/pipelines-C8BeDcAl.js +4 -0
- package/webapp/dist/assets/projects-Dp_zFfLY.js +1 -0
- package/webapp/dist/assets/react-DlmbjZJV.js +1 -0
- package/webapp/dist/assets/react-apexcharts.esm-C8pn45ml.js +97 -0
- package/webapp/dist/assets/{release-bits-Dj4EOhhb.js → release-bits-BzTKz5fM.js} +1 -1
- package/webapp/dist/assets/release-build-panel-DcW9YcXQ.js +1 -0
- package/webapp/dist/assets/releases-B4hcr1bE.js +2 -0
- package/webapp/dist/assets/rolldown-runtime-XKyaHtl9.js +1 -0
- package/webapp/dist/assets/settings-DIteZTbe.js +1 -0
- package/webapp/dist/assets/sign-in-D4kMBOHp.js +1 -0
- package/webapp/dist/assets/stacks-Brnf-EB7.js +1 -0
- package/webapp/dist/assets/{system-info-BtE3dgfw.js → system-info-CFDNVKkU.js} +1 -1
- package/webapp/dist/assets/topology-7WeTUsDN.js +12 -0
- package/webapp/dist/assets/traces-9c3gwCN-.js +1 -0
- package/webapp/dist/assets/{use-stack-context-CZUgPq88.js → use-stack-context-CnA5FTHu.js} +1 -1
- package/webapp/dist/index.html +6 -6
- package/webapp/dist/assets/FormControlLabel-BrH2diyl.js +0 -1
- package/webapp/dist/assets/alerts-sXqHJbsa.js +0 -1
- package/webapp/dist/assets/apps-B_Ah8Flh.js +0 -1
- package/webapp/dist/assets/audit-YXihwyui.js +0 -1
- package/webapp/dist/assets/client-CGbBvy9k.js +0 -1
- package/webapp/dist/assets/containers-Di4NOTLf.js +0 -2
- package/webapp/dist/assets/dashboard-Cfuf95N3.js +0 -1
- package/webapp/dist/assets/dashboard-builder-CowaYb-M.js +0 -1
- package/webapp/dist/assets/deployments-ChTq5kCw.js +0 -1
- package/webapp/dist/assets/detail-BsGWv7Dj.js +0 -1
- package/webapp/dist/assets/detail-CyVf_cw5.js +0 -2
- package/webapp/dist/assets/detail-D027j6aO.js +0 -8
- package/webapp/dist/assets/index-B8AHIPc-.css +0 -1
- package/webapp/dist/assets/index-DiZbrwxT.js +0 -414
- package/webapp/dist/assets/logs-L2b8Oqmo.js +0 -12
- package/webapp/dist/assets/maplibre-gl-MlmG2kbn.js +0 -801
- package/webapp/dist/assets/nodes-Nwia2Ty6.js +0 -7
- package/webapp/dist/assets/pipelines-DCu_rXOr.js +0 -4
- package/webapp/dist/assets/projects-Bb4aV76h.js +0 -1
- package/webapp/dist/assets/react-CwJFpaho.js +0 -1
- package/webapp/dist/assets/react-apexcharts.esm-Dy0Fez42.js +0 -1956
- package/webapp/dist/assets/release-build-panel-D6OCVlhT.js +0 -1
- package/webapp/dist/assets/releases-CnAt3yO6.js +0 -2
- package/webapp/dist/assets/rolldown-runtime-hePW80VL.js +0 -1
- package/webapp/dist/assets/settings-DU-mjiwb.js +0 -1
- package/webapp/dist/assets/sign-in-Bcvjrr4C.js +0 -1
- package/webapp/dist/assets/stacks-B-e8p50I.js +0 -1
- package/webapp/dist/assets/topology-Cwch-uF1.js +0 -12
- package/webapp/dist/assets/traces-BbShR-4P.js +0 -1
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/client-
|
|
2
|
-
import{r as e}from"./rolldown-runtime-
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/client-BmqFExWT.js","assets/rolldown-runtime-XKyaHtl9.js"])))=>i.map(i=>d[i]);
|
|
2
|
+
import{r as e}from"./rolldown-runtime-XKyaHtl9.js";import{t}from"./react-DlmbjZJV.js";import{t as n}from"./Grid-DizFZYue.js";import{t as r}from"./Switch-Bfiqzx8l.js";import{m as i,p as a,s as o}from"./client-BmqFExWT.js";import{$n as s,Bt as c,Ct as l,D as u,Gn as d,O as f,On as p,P as m,an as h,cn as g,f as _,ht as v,in as y,rt as b,sn as x,vn as S,vt as C,yt as w}from"./index-vMnY_4jR.js";import T from"./react-apexcharts.esm-C8pn45ml.js";import{t as E}from"./use-stack-context-CnA5FTHu.js";var D=e(t(),1),O=s(),k={chart:{background:`transparent`,toolbar:{show:!1}},theme:{mode:`dark`},grid:{borderColor:`rgba(255,255,255,0.1)`},xaxis:{type:`datetime`,labels:{style:{colors:`#999`},datetimeUTC:!1}},yaxis:{labels:{style:{colors:`#999`}}},stroke:{curve:`smooth`,width:2},tooltip:{theme:`dark`,x:{format:`HH:mm:ss`}},legend:{labels:{colors:`#ccc`}}};function A(e){return e===void 0||!Number.isFinite(e)||e<0?`—`:e<1024?`${e} B`:e<1048576?`${(e/1024).toFixed(0)} KB`:e<1073741824?`${(e/1048576).toFixed(0)} MB`:`${(e/1073741824).toFixed(1)} GB`}function j(e){return e==null||!Number.isFinite(e)?`—`:e>=1e3?`${(e/1e3).toFixed(1)}k`:e<10?e.toFixed(1):String(Math.round(e))}function M({title:e,value:t,suffix:n,icon:r,color:i,loading:a}){return(0,O.jsx)(x,{variant:`outlined`,children:(0,O.jsx)(h,{children:(0,O.jsxs)(c,{direction:`row`,spacing:2,sx:{alignItems:`center`,justifyContent:`space-between`},children:[(0,O.jsxs)(c,{spacing:.5,children:[(0,O.jsx)(S,{variant:`body2`,sx:{color:`text.secondary`},children:e}),a?(0,O.jsx)(l,{width:60,height:40}):(0,O.jsxs)(S,{variant:`h4`,children:[t,n&&(0,O.jsx)(S,{component:`span`,variant:`body2`,sx:{color:`text.secondary`,ml:.5},children:n})]})]}),(0,O.jsx)(g,{sx:{p:1.5,borderRadius:2,bgcolor:e=>d(e.palette[i].main,.12),color:`${i}.main`,display:`flex`},children:r})]})})})}var N=1e4;function P(e,t){let n=e.app.split(`/`),r=n.length>=4?n.slice(2).join(`/`):n[n.length-1],i=e.labels?.node;return i?`${r} · ${t[i]??i}`:r}function F(){let{namespacePrefix:e}=E(),[t,s]=(0,D.useState)(null),[d,g]=(0,D.useState)(!0),[F,I]=(0,D.useState)(null),[L,R]=(0,D.useState)(!0),[z,B]=(0,D.useState)([]),[V,H]=(0,D.useState)([]),[U,W]=(0,D.useState)([]),G=(0,D.useRef)(null),K=(0,D.useRef)({});(0,D.useEffect)(()=>{let e=!1;return(async()=>{try{let{nodes:t}=await v(async()=>{let{nodes:e}=await import(`./client-BmqFExWT.js`).then(e=>e.o);return{nodes:e}},__vite__mapDeps([0,1])),n=await t.listNodes();e||(K.current=Object.fromEntries(n.map(e=>[e.id,e.name])))}catch{}})(),()=>{e=!0}},[]);let q=(0,D.useCallback)(async()=>{try{let t=null;try{t=await i.getSnapshot()}catch{}let n=null;try{let e=await a.getIngestionStats(),t=Date.now(),r=G.current;if(r&&t>r.at){let i=e.ingestedTotal-r.total;n=i>=0?i*1e3/(t-r.at):null}G.current={total:e.ingestedTotal,at:t}}catch{}if(t?.totals)s({totalCpuPercent:Math.round(t.totals.cpu),totalMemoryBytes:t.totals.memory??0,activeApps:t.totals.onlineApps??0,logIngestionRate:n});else{let e=(await o.status())?.apps??[],t=Array.isArray(e)?e.filter(e=>e.status===`online`).length:0,r=Array.isArray(e)?e.reduce((e,t)=>e+(t.cpu??0),0):0,i=Array.isArray(e)?e.reduce((e,t)=>e+(t.memory??0),0):0;s({totalCpuPercent:Math.round(r),totalMemoryBytes:i,activeApps:t,logIngestionRate:n})}let r=new Date(Date.now()-3e5).toISOString(),c=[],l=[];try{c=await i.querySeries({names:[`cpu_percent`],from:r,interval:`30s`}),l=await i.querySeries({names:[`memory_bytes`],from:r,interval:`30s`})}catch{}if(c.length>0){let t=t=>t.filter(t=>!e||t.app.startsWith(e)||!t.app.includes(`/`)),n=t(c),r=t(l);B(n.map(e=>({name:P(e,K.current),data:e.points.map(e=>({x:new Date(e.timestamp).getTime(),y:Number(e.value.toFixed(1))}))}))),H(r.map(e=>({name:P(e,K.current),data:e.points.map(e=>({x:new Date(e.timestamp).getTime(),y:Math.round(e.value/1048576)}))})))}else B([]),H([]);try{let{logs:e}=await v(async()=>{let{logs:e}=await import(`./client-BmqFExWT.js`).then(e=>e.o);return{logs:e}},__vite__mapDeps([0,1])),t=await e.getLogStats();if(t?.byLevel&&t.byLevel.length>0)W([{name:`lines`,data:t.byLevel.map(({level:e,count:t})=>({x:e,y:t}))}]);else throw Error(`no data`)}catch{W([])}I(null)}catch(e){I(e?.message??`Failed to fetch metrics`)}finally{g(!1)}},[e]);b(()=>void q(),{intervalMs:N,enabled:L}),(0,D.useEffect)(()=>{q()},[q]);let J=(0,D.useMemo)(()=>({...k,yaxis:{...k.yaxis,title:{text:`CPU %`,style:{color:`#999`}},max:100},colors:[`#6366f1`,`#22d3ee`,`#f97316`]}),[]),Y=(0,D.useMemo)(()=>({...k,yaxis:{...k.yaxis,title:{text:`Memory (MB)`,style:{color:`#999`}}},colors:[`#a78bfa`,`#34d399`,`#fb923c`]}),[]),X=(0,D.useMemo)(()=>({...k,chart:{...k.chart,type:`bar`},plotOptions:{bar:{columnWidth:`40%`,borderRadius:2,distributed:!0}},legend:{show:!1},xaxis:{...k.xaxis,type:`category`},yaxis:{...k.yaxis,title:{text:`Lines (total)`,style:{color:`#999`}}},colors:[`#3b82f6`,`#f59e0b`,`#ef4444`,`#6b7280`]}),[]);return(0,O.jsxs)(c,{spacing:3,children:[(0,O.jsx)(C,{links:[{name:`Metrics`}],action:(0,O.jsxs)(c,{direction:`row`,spacing:1,sx:{alignItems:`center`},children:[(0,O.jsx)(S,{variant:`body2`,sx:{color:`text.secondary`},children:`Auto-refresh`}),(0,O.jsx)(r,{size:`small`,checked:L,onChange:(e,t)=>R(t)}),(0,O.jsx)(p,{size:`small`,onClick:q,title:`Refresh`,children:(0,O.jsx)(m,{})})]})}),F&&(0,O.jsx)(w,{closable:!0,severity:`warning`,variant:`outlined`,onClose:()=>I(null),children:F}),(0,O.jsxs)(n,{container:!0,spacing:3,children:[(0,O.jsx)(n,{size:{xs:12,sm:6,md:3},children:(0,O.jsx)(M,{title:`Total CPU`,value:t?.totalCpuPercent??0,suffix:`%`,icon:(0,O.jsx)(f,{}),color:(t?.totalCpuPercent??0)>80?`error`:(t?.totalCpuPercent??0)>60?`warning`:`success`,loading:d})}),(0,O.jsx)(n,{size:{xs:12,sm:6,md:3},children:(0,O.jsx)(M,{title:`Total Memory`,value:A(t?.totalMemoryBytes),icon:(0,O.jsx)(f,{}),color:`info`,loading:d})}),(0,O.jsx)(n,{size:{xs:12,sm:6,md:3},children:(0,O.jsx)(M,{title:`Active Apps`,value:t?.activeApps??0,icon:(0,O.jsx)(_,{}),color:`primary`,loading:d})}),(0,O.jsx)(n,{size:{xs:12,sm:6,md:3},children:(0,O.jsx)(M,{title:`Log Ingestion`,value:j(t?.logIngestionRate),suffix:`lines/s`,icon:(0,O.jsx)(u,{}),color:`info`,loading:d})})]}),(0,O.jsxs)(x,{variant:`outlined`,children:[(0,O.jsx)(y,{slotProps:{subheader:{variant:`caption`},title:{variant:`subtitle1`,fontWeight:600}},title:`CPU Usage`,subheader:`Per-application CPU usage (last 5 minutes)`}),(0,O.jsx)(h,{sx:{pt:0},children:d?(0,O.jsx)(l,{variant:`rectangular`,height:300}):(0,O.jsx)(T,{type:`area`,height:300,options:J,series:z})})]}),(0,O.jsxs)(x,{variant:`outlined`,children:[(0,O.jsx)(y,{slotProps:{subheader:{variant:`caption`},title:{variant:`subtitle1`,fontWeight:600}},title:`Memory Usage`,subheader:`Per-application memory consumption (MB)`}),(0,O.jsx)(h,{sx:{pt:0},children:d?(0,O.jsx)(l,{variant:`rectangular`,height:300}):(0,O.jsx)(T,{type:`area`,height:300,options:Y,series:V})})]}),(0,O.jsxs)(x,{variant:`outlined`,children:[(0,O.jsx)(y,{slotProps:{subheader:{variant:`caption`},title:{variant:`subtitle1`,fontWeight:600}},title:`Log Lines by Level`,subheader:`Cumulative totals in the log store — not a rate over time`}),(0,O.jsx)(h,{sx:{pt:0},children:d?(0,O.jsx)(l,{variant:`rectangular`,height:300}):(0,O.jsx)(T,{type:`bar`,height:300,options:X,series:U})})]})]})}export{F as default,P as seriesLabel};
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import{r as e}from"./rolldown-runtime-XKyaHtl9.js";import{t}from"./react-DlmbjZJV.js";import{t as n}from"./Grid-DizFZYue.js";import{c as r,h as i}from"./client-BmqFExWT.js";import{$n as a,$t as o,B as s,Bn as c,Bt as l,Ct as u,Gn as d,It as f,M as p,On as m,P as h,Pt as g,Qt as _,R as v,Rt as y,S as b,Tn as x,Tt as ee,Ut as S,Vt as C,Wt as w,Xt as T,Yt as E,an as D,b as te,bn as O,bt as k,cn as A,er as j,gn as M,h as ne,it as N,k as re,kn as P,kt as ie,mn as F,nn as I,nt as L,rn as ae,rt as oe,sn as R,tn as se,un as z,vn as B,vt as ce,wn as V,y as H,yn as U,zt as W}from"./index-vMnY_4jR.js";import{t as le}from"./daemon-memory-CCPZ4cV_.js";import{f as G}from"./release-bits-BzTKz5fM.js";var K=e(t(),1),q=a(),ue={queued:`default`,building:`info`,transferring:`info`,activating:`warning`,done:`success`,failed:`error`,refused:`error`};function de(e){return r.invoke(`daemon`,`OmnitronNodes`,`planUpgrade`,[{...e,build:!0}],{timeout:18e4})}function J(e){return e!==`done`&&e!==`failed`&&e!==`refused`}function fe({nodes:e}){let[t,n]=(0,K.useState)(!1),[r,a]=(0,K.useState)(null),[o,c]=(0,K.useState)(!1),{data:u,refresh:d}=L(async()=>{let e=await i.getUpgradeProgress();return c(e.some(e=>J(e.phase))),e},{intervalMs:o?3e3:2e4}),f=u??[],p=f.filter(e=>J(e.phase)),m=(0,K.useMemo)(()=>new Map(e.map(e=>[e.id,e])),[e]),h=(0,K.useCallback)(async e=>{try{let t=await i.cancelUpgrade({nodeId:e});a(t.stopped?null:t.because),await d()}catch(e){a(e.message)}},[d]);return(0,q.jsxs)(R,{variant:`outlined`,children:[(0,q.jsxs)(D,{children:[(0,q.jsxs)(l,{direction:`row`,spacing:1.5,sx:{alignItems:`center`,mb:p.length>0||f.length>0?1.5:0},children:[(0,q.jsx)(B,{variant:`overline`,sx:{color:`text.secondary`,fontSize:`0.65rem`},children:`Fleet upgrade`}),p.length>0&&(0,q.jsx)(U,{size:`small`,color:`info`,label:`${p.length} of ${f.length} in flight`,sx:{height:20,fontSize:11}}),(0,q.jsx)(A,{sx:{flex:1}}),(0,q.jsx)(O,{size:`small`,variant:`contained`,startIcon:(0,q.jsx)(te,{}),onClick:()=>n(!0),children:`Upgrade nodes…`})]}),r&&(0,q.jsx)(z,{severity:`warning`,variant:`outlined`,sx:{mb:1.5},onClose:()=>a(null),children:r}),f.length===0?(0,q.jsx)(B,{variant:`body2`,sx:{color:`text.secondary`},children:`No upgrade has been run from this master since it started.`}):(0,q.jsx)(l,{spacing:1,children:f.map(e=>{let t=m.get(e.nodeId);return(0,q.jsxs)(A,{children:[(0,q.jsxs)(l,{direction:`row`,spacing:1,sx:{alignItems:`center`,flexWrap:`wrap`},children:[(0,q.jsx)(B,{variant:`body2`,sx:{fontWeight:600,minWidth:140},children:t?.name??e.nodeId}),(0,q.jsx)(U,{size:`small`,color:ue[e.phase],label:e.phase,sx:{height:20,fontSize:11}}),e.phase===`queued`&&e.position!=null&&(0,q.jsxs)(B,{variant:`caption`,sx:{color:`text.secondary`},children:[`#`,e.position,` in the queue`]}),(0,q.jsx)(B,{variant:`caption`,sx:{color:`text.secondary`},children:e.message}),e.version&&(0,q.jsx)(B,{variant:`caption`,sx:{fontFamily:`monospace`,color:`text.secondary`},children:e.version}),(0,q.jsx)(A,{sx:{flex:1}}),(0,q.jsx)(B,{variant:`caption`,sx:{color:`text.disabled`},children:G(e.at)}),J(e.phase)&&(0,q.jsx)(C,{title:e.phase===`queued`?`Drop this node from the queue`:`A node already installing is not interrupted — the daemon will say so`,arrow:!0,children:(0,q.jsx)(`span`,{children:(0,q.jsx)(O,{size:`small`,color:`warning`,startIcon:(0,q.jsx)(s,{}),onClick:()=>void h(e.nodeId),children:`Cancel`})})})]}),J(e.phase)&&e.phase!==`queued`&&(0,q.jsx)(E,{variant:`determinate`,value:e.percent,sx:{mt:.5,height:4,borderRadius:2}})]},e.nodeId)})})]}),(0,q.jsx)(pe,{open:t,onClose:()=>n(!1),nodes:e,onStarted:()=>{c(!0),d()}})]})}function pe({open:e,onClose:t,nodes:n,onStarted:r}){let[a,s]=(0,K.useState)(new Set),[c,u]=(0,K.useState)(null),[d,p]=(0,K.useState)(!1),[m,h]=(0,K.useState)(!1),[v,b]=(0,K.useState)(1),[ee,S]=(0,K.useState)(null),[T,E]=(0,K.useState)(null),D=(0,K.useMemo)(()=>n.filter(e=>!e.isLocal),[n]),k=(0,K.useMemo)(()=>new Map(n.map(e=>[e.id,e])),[n]),j=e=>s(t=>{let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),u(null),n}),M=a.size>0&&a.size===D.length,ne=(0,K.useCallback)(async e=>{p(!0),S(null);let t=a.size>0?{nodeIds:[...a]}:{};try{u(e?await de(t):await i.planUpgrade(t))}catch(e){S(e.message),u(null)}finally{p(!1)}},[a]),N=c?.rows.filter(e=>e.action===`upgrade`)??[];return(0,q.jsxs)(ae,{open:e,onClose:m?void 0:t,maxWidth:`md`,fullWidth:!0,children:[(0,q.jsx)(o,{children:`Upgrade nodes`}),(0,q.jsx)(se,{children:(0,q.jsxs)(l,{spacing:2.5,sx:{mt:1},children:[(0,q.jsx)(B,{variant:`body2`,sx:{color:`text.secondary`},children:`The master builds one bundle and installs it on each node in turn. The rollout runs in the daemon — closing this window does not stop it.`}),(0,q.jsxs)(A,{children:[(0,q.jsxs)(l,{direction:`row`,spacing:1,sx:{alignItems:`center`,mb:.5},children:[(0,q.jsx)(F,{size:`small`,checked:M,indeterminate:a.size>0&&!M,onChange:()=>{u(null),s(M?new Set:new Set(D.map(e=>e.id)))}}),(0,q.jsx)(B,{variant:`body2`,children:a.size===0?`every node`:`${a.size} of ${D.length} selected`})]}),(0,q.jsx)(A,{sx:{maxHeight:220,overflowY:`auto`},children:(0,q.jsx)(W,{size:`small`,children:(0,q.jsx)(y,{children:D.map(e=>(0,q.jsxs)(x,{hover:!0,onClick:()=>j(e.id),sx:{cursor:`pointer`},children:[(0,q.jsx)(V,{padding:`checkbox`,children:(0,q.jsx)(F,{size:`small`,checked:a.has(e.id)})}),(0,q.jsx)(V,{sx:{fontWeight:600},children:e.name}),(0,q.jsxs)(V,{sx:{fontFamily:`monospace`,fontSize:12},children:[e.host,`:`,e.sshPort]}),(0,q.jsx)(V,{sx:{fontFamily:`monospace`,fontSize:12},children:e.status?.omnitronVersion??`—`}),(0,q.jsx)(V,{children:(0,q.jsx)(U,{size:`small`,label:e.status?.pingReachable?`reachable`:`not reachable`,color:e.status?.pingReachable?`success`:`default`,variant:`outlined`,sx:{height:18,fontSize:10}})})]},e.id))})})})]}),(0,q.jsxs)(l,{direction:`row`,spacing:1.5,sx:{alignItems:`center`},children:[(0,q.jsx)(O,{size:`small`,variant:`outlined`,onClick:()=>void ne(!1),disabled:d||m,children:d?`Planning…`:`Plan`}),(0,q.jsx)(C,{title:`Builds the bundle so each node can be compared to it. It runs on the master's own thread and stops it answering anything else for a minute or two.`,arrow:!0,children:(0,q.jsx)(`span`,{children:(0,q.jsx)(O,{size:`small`,onClick:()=>void ne(!0),disabled:d||m,children:`Compare versions`})})}),d&&(0,q.jsx)(P,{size:16}),(0,q.jsx)(g,{select:!0,label:`At once`,size:`small`,value:v,onChange:e=>b(Number(e.target.value)),sx:{width:120},disabled:m,children:[1,2,3,4,6,8].map(e=>(0,q.jsx)(w,{value:e,children:e},e))}),(0,q.jsx)(B,{variant:`caption`,sx:{color:`text.secondary`},children:d?`The master is building the bundle so the plan can name a target version — up to a few minutes.`:`An upgrade restarts the node's daemon, so one at a time is the safe default.`})]}),c&&(0,q.jsxs)(A,{children:[c.refusal&&(0,q.jsx)(z,{severity:`error`,sx:{mb:1},children:(0,q.jsx)(B,{variant:`body2`,sx:{whiteSpace:`pre-wrap`},children:c.refusal})}),c.compared?(0,q.jsxs)(B,{variant:`body2`,sx:{mb:1},children:[`Target `,(0,q.jsx)(`strong`,{style:{fontFamily:`monospace`},children:c.targetVersion}),` —`,` `,N.length,` would be upgraded, `,c.rows.filter(e=>e.action===`skip`).length,` already there,`,` `,c.rows.filter(e=>e.action===`refuse`).length,` refused.`]}):(0,q.jsxs)(A,{sx:{mb:1},children:[(0,q.jsxs)(B,{variant:`body2`,children:[N.length,` would be attempted, `,c.rows.filter(e=>e.action===`refuse`).length,` refused —`,` `,(0,q.jsx)(`strong`,{children:`nothing was compared`}),`.`]}),(0,q.jsx)(B,{variant:`caption`,sx:{color:`text.secondary`},children:`No bundle has been built, so no row can say «already on the target version». Twelve rows reading «upgrade» here mean twelve nodes that would be touched, not twelve that are out of date.`})]}),(0,q.jsxs)(W,{size:`small`,children:[(0,q.jsx)(f,{children:(0,q.jsxs)(x,{children:[(0,q.jsx)(V,{children:`Node`}),(0,q.jsx)(V,{children:c.compared?`Now → target`:`Now`}),(0,q.jsx)(V,{children:`Action`}),(0,q.jsx)(V,{children:`Why`})]})}),(0,q.jsx)(y,{children:c.rows.map(e=>(0,q.jsxs)(x,{children:[(0,q.jsxs)(V,{children:[(0,q.jsx)(B,{variant:`body2`,sx:{fontWeight:600},children:e.label}),(0,q.jsx)(B,{variant:`caption`,sx:{color:`text.secondary`,fontFamily:`monospace`},children:e.host??`no address`})]}),(0,q.jsxs)(V,{sx:{fontFamily:`monospace`,fontSize:12},children:[e.currentVersion??`—`,c.compared&&e.targetVersion&&e.targetVersion!==e.currentVersion&&(0,q.jsxs)(B,{component:`span`,variant:`caption`,sx:{color:`text.secondary`,fontFamily:`monospace`},children:[` → `,e.targetVersion]})]}),(0,q.jsx)(V,{children:(0,q.jsx)(U,{size:`small`,label:e.action,color:e.action===`upgrade`?`info`:e.action===`skip`?`success`:`warning`,variant:`outlined`,sx:{height:18,fontSize:10}})}),(0,q.jsx)(V,{children:(0,q.jsx)(B,{variant:`caption`,sx:{color:`text.secondary`},children:e.because})})]},e.nodeId))})]})]}),T&&(0,q.jsxs)(A,{children:[(0,q.jsx)(_,{sx:{mb:1.5}}),(0,q.jsxs)(z,{severity:T.refused.length>0?`warning`:`success`,children:[`Queued `,T.accepted.length,` node`,T.accepted.length===1?``:`s`,T.refused.length>0?`; ${T.refused.length} not taken`:``,`.`]}),T.refused.map(e=>(0,q.jsxs)(B,{variant:`caption`,sx:{display:`block`,mt:.5,color:`text.secondary`},children:[(0,q.jsx)(`strong`,{children:k.get(e.nodeId)?.name??e.nodeId}),` — `,e.because]},e.nodeId))]}),ee&&(0,q.jsxs)(z,{severity:`error`,children:[(0,q.jsx)(B,{variant:`body2`,sx:{whiteSpace:`pre-wrap`},children:ee}),/^(HTTP 50\d|Request timeout)/.test(ee)&&(0,q.jsxs)(B,{variant:`caption`,sx:{display:`block`,mt:.5},children:[`The plan builds the bundle first — that is how it can say «already on the target version» instead of listing every node as an upgrade — and the request outlived the gateway's 120-second deadline. The master is still building; the CLI (`,(0,q.jsx)(`code`,{children:`omnitron fleet upgrade --dry-run`}),`) has no such deadline.`]})]})]})}),(0,q.jsxs)(I,{children:[(0,q.jsx)(O,{onClick:t,size:`small`,disabled:m,children:T?`Close`:`Cancel`}),(0,q.jsx)(O,{variant:`contained`,size:`small`,startIcon:m?(0,q.jsx)(P,{size:14,color:`inherit`}):(0,q.jsx)(te,{}),disabled:m||!c||N.length===0||!!c.refusal||T!==null,onClick:async()=>{h(!0),S(null);try{let e=await i.upgradeNodes({nodeIds:N.map(e=>e.nodeId),concurrency:v});E(e),r()}catch(e){S(e.message)}finally{h(!1)}},children:m?`Queueing…`:`Start rollout (${N.length})`})]})]})}function me(e){if(e.omnitronConnected===!0)return`running`;let t=e.omnitronError??``;return t.startsWith(`omnitron: command not found`)?`not-installed`:e.sshConnected===!1?`unreachable`:e.omnitronConnected===!1&&t===`omnitron status reported no running daemon`?`not-running`:`unread`}function Y(e,t){return e==null?t?`failed`:`unmeasured`:e?`ok`:`failed`}function he(e){let t=me({sshConnected:e.sshConnected??null,omnitronConnected:e.omnitronConnected??null,omnitronError:e.omnitronError??null});switch(t){case`running`:return`ok`;case`not-running`:case`not-installed`:return`failed`;case`unreachable`:return`unmeasured`;case`unread`:return e.omnitronConnected==null&&!e.omnitronError?`unmeasured`:`unknown`;default:return t}}function ge(e){return e.pingError??e.sshError??e.omnitronError??null}function _e(e){let t=e.filter(e=>e.reachable&&e.cluster);if(t.length<2)return{kind:`none`};let n=new Map,r=new Set;for(let e of t){let t=e.cluster.leaderId??`(none)`;n.has(t)||n.set(t,[]),n.get(t).push(e.nodeId),typeof e.cluster.term==`number`&&r.add(e.cluster.term)}return n.size>1?{kind:`leaders`,answered:t.length,groups:[...n]}:r.size>1?{kind:`terms`,answered:t.length,terms:[...r].sort((e,t)=>e-t)}:{kind:`none`}}var ve=864e5,ye=90;function be(e,t){let n=e*864e5;return Math.max(1,Math.min(400,Math.ceil(n/Math.max(1,t))))}var xe=3e5,X=3e5;function Se(e){if(!e)return`never`;let t=Date.now()-Date.parse(e);if(!Number.isFinite(t))return`never`;if(t<6e4)return`just now`;let n=Math.floor(t/6e4);if(n<60)return`${n}m ago`;let r=Math.floor(n/60);return r<24?`${r}h ago`:`${Math.floor(r/24)}d ago`}function Z(e){if(!e)return!0;let t=Date.parse(e);return!Number.isFinite(t)||Date.now()-t>X}var Ce=j`
|
|
2
|
+
from { transform: rotate(0deg); }
|
|
3
|
+
to { transform: rotate(360deg); }
|
|
4
|
+
`,we=j`
|
|
5
|
+
0%, 100% { opacity: 1; }
|
|
6
|
+
50% { opacity: 0.3; }
|
|
7
|
+
`;function Te({state:e,label:t,tooltip:n}){return(0,q.jsx)(C,{title:n??{online:`Connected`,offline:`Offline`,unknown:`Unknown`,unchecked:`Not checked`,checking:`Checking...`,"not-installed":`Not installed`}[e],arrow:!0,children:(0,q.jsxs)(l,{direction:`row`,spacing:.5,sx:{alignItems:`center`},children:[(0,q.jsx)(A,{sx:{width:8,height:8,borderRadius:`50%`,bgcolor:{online:`success.main`,offline:`error.main`,unknown:`warning.light`,unchecked:`text.disabled`,checking:`warning.main`,"not-installed":`text.disabled`}[e],flexShrink:0,...e===`checking`&&{animation:`${we} 1s ease-in-out infinite`},...e===`not-installed`&&{border:`1px dashed`,borderColor:`text.disabled`,bgcolor:`transparent`}}}),(0,q.jsx)(B,{variant:`caption`,noWrap:!0,sx:{color:`text.secondary`},children:t})]})})}function Ee(e,t,n){if(e<0)return n===`absent`?d(t.palette.info.main,.35):n===`unreachable`?d(t.palette.warning.main,.3):n===`unread`?d(t.palette.text.disabled,.25):t.palette.action.disabledBackground;let r=Q(t.palette.success.main),i=Q(t.palette.error.main),a=i[0]+(r[0]-i[0])*e,o=i[1]+(r[1]-i[1])*e,s=i[2]+(r[2]-i[2])*e;return`hsl(${Math.round(a)}, ${Math.round(o)}%, ${Math.round(s)}%)`}function Q(e){let t=e.replace(`#`,``),n=parseInt(t.slice(0,2),16)/255,r=parseInt(t.slice(2,4),16)/255,i=parseInt(t.slice(4,6),16)/255,a=Math.max(n,r,i),o=Math.min(n,r,i),s=(a+o)/2;if(a===o)return[0,0,s*100];let c=a-o,l=s>.5?c/(2-a-o):c/(a+o),u;return u=a===n?(r-i)/c+(r<i?6:0):a===r?(i-n)/c+2:(n-r)/c+4,u*=60,[u,l*100,s*100]}function $({data:e,metric:t,label:n,segWidth:r=6,gap:i=4,height:a=10,lastCheckAt:o}){let s=c(),u=(0,K.useRef)(null),[d,f]=(0,K.useState)(0);(0,K.useEffect)(()=>{let e=u.current;if(!e)return;let t=()=>{let t=e.clientWidth;f(Math.max(1,Math.floor((t+i)/(r+i))))};t();let n=new ResizeObserver(t);return n.observe(e),()=>n.disconnect()},[r,i]);let p=[];if(d>0){let n=e.slice(-d);for(let e=0;e<d-n.length;e++)p.push({val:-1,time:``});for(let e of n){let n=e[t],r=e.t?new Date(e.t).toLocaleTimeString([],{hour:`2-digit`,minute:`2-digit`}):``;p.push({val:n,time:r,...e.t?{iso:e.t}:{},checks:e.checks,unmeasured:e.omnitronUnmeasured})}}let m=p.filter(e=>e.val>=0),h=m.length>0?Math.round(m.reduce((e,t)=>e+t.val,0)/m.length*100):-1,g=h<0&&p.some(e=>e.unmeasured===`absent`),_=h>=0&&o&&Date.now()-new Date(o).getTime()>3e5?Date.now()-new Date(o).getTime():null,v=o?{time:new Date(o).toLocaleTimeString([],{hour:`2-digit`,minute:`2-digit`})}:null,y=_==null?null:_>=36e5?`${Math.round(_/36e5)}h`:`${Math.max(1,Math.round(_/6e4))}m`;return(0,q.jsxs)(l,{spacing:.25,children:[(0,q.jsxs)(l,{direction:`row`,sx:{justifyContent:`space-between`,alignItems:`center`},children:[(0,q.jsx)(B,{variant:`caption`,sx:{color:`text.disabled`,fontSize:9,textTransform:`uppercase`,letterSpacing:.5},children:n}),y?(0,q.jsx)(C,{title:`Nothing has been recorded for ${y} — the last check was at ${v?.time}. The strip shows what was measured before that, not the node now.`,arrow:!0,children:(0,q.jsxs)(B,{variant:`caption`,sx:{fontSize:9,color:`warning.main`},children:[`no checks for `,y]})}):h>=0?(0,q.jsxs)(B,{variant:`caption`,sx:{fontSize:9,color:h>=95?`success.main`:h>=50?`warning.main`:`error.main`},children:[h,`%`]}):g?(0,q.jsx)(B,{variant:`caption`,sx:{fontSize:9,color:`info.main`},children:`not installed`}):null]}),(0,q.jsx)(l,{ref:u,direction:`row`,sx:{height:a,gap:`${i}px`},children:p.map((e,t)=>{let n=Ee(e.val,s,e.unmeasured),i=e.checks==null?``:` (${e.checks} checks)`,a=e.val<0?e.unmeasured===`absent`?`${e.time} — omnitron not installed${i}`:e.unmeasured===`unreachable`?`${e.time} — could not reach the node${i}`:e.unmeasured===`unread`?`${e.time} — not measured: the node was reached and nothing could be read${i}`:e.time?`${e.time} — no data`:`No data`:`${e.time} — ${Math.round(e.val*100)}% up${i}`;return(0,q.jsx)(C,{title:a,arrow:!0,children:(0,q.jsx)(A,{sx:{width:r,minWidth:r,height:`100%`,bgcolor:n,borderRadius:`2px`,transition:`opacity 0.15s`,"&:hover":{opacity:.6}}})},t)})})]})}function De(e){return/\+local\.[0-9a-zA-Z]+\.(\d{12})$/.exec(e??``)?.[1]??null}function Oe(e,t){if(!e||!t)return`unknown`;if(e===t)return`current`;let n=De(e),r=De(t);return n&&r?n<r?`behind`:`current`:`differs`}function ke(e){let t,n=``;for(let r of e){if(!r)continue;let e=De(r);e?e>n&&(n=e,t=r):t??=r}return t}function Ae(e,t){if(!e)return{state:`unchecked`,tooltip:`Not checked`};if(t)return e.omnitronConnected?{state:`online`,tooltip:`v${e.omnitronVersion??`?`} PID ${e.omnitronPid??`?`}`}:{state:`offline`,tooltip:e.omnitronError??`Not running`};let n=me(e);switch(n){case`running`:return{state:`online`,tooltip:`v${e.omnitronVersion??`?`} (${e.omnitronRole??`?`})`};case`not-running`:return{state:`offline`,tooltip:e.omnitronError??`Not running`};case`not-installed`:return{state:`not-installed`,tooltip:`Not installed on this node`};case`unreachable`:return{state:`unchecked`,tooltip:e.sshError?`SSH refused: ${e.sshError}`:`SSH refused`};case`unread`:return e.omnitronError?{state:`unknown`,tooltip:`Unknown — ${e.omnitronError}`}:{state:`unchecked`,tooltip:`Not checked yet`};default:return{state:`unchecked`,tooltip:String(n)}}}var je=6,Me=4,Ne=10,Pe=[50,200,500],Fe={ok:`success`,failed:`error`,unknown:`warning`,unmeasured:`default`},Ie={ok:`reachable`,failed:`failed`,unknown:`unknown`,unmeasured:`not measured`},Le=e=>e===`unmeasured`||e===`unknown`;function Re({label:e,verdict:t,latencyMs:n,error:r,detail:i}){return(0,q.jsxs)(A,{sx:{py:1},children:[(0,q.jsxs)(l,{direction:`row`,spacing:1,sx:{alignItems:`center`},children:[(0,q.jsx)(B,{variant:`body2`,sx:{fontWeight:600,minWidth:96},children:e}),(0,q.jsx)(U,{size:`small`,label:Ie[t],color:Fe[t],variant:Le(t)?`outlined`:`filled`,sx:{height:20,fontSize:11}}),n!=null&&(0,q.jsxs)(B,{variant:`caption`,sx:{color:`text.secondary`},children:[n,`ms`]}),i&&(0,q.jsx)(B,{variant:`caption`,noWrap:!0,sx:{color:`text.secondary`},children:i})]}),r&&(0,q.jsx)(B,{variant:`caption`,component:`pre`,sx:{mt:.5,ml:`104px`,p:1,borderRadius:1,bgcolor:e=>d(e.palette.error.main,.08),color:`error.main`,fontFamily:`monospace`,fontSize:11,whiteSpace:`pre-wrap`,wordBreak:`break-word`},children:r})]})}function ze({row:e,isLocal:t}){let n=Y(e.pingReachable,e.pingError),r=Y(e.sshConnected,e.sshError),i=he(e),a=ge(e),o=t?[[`OMNITRON`,i]]:[[`PING`,n],[`SSH`,r],[`OMNITRON`,i]];return(0,q.jsxs)(A,{sx:{py:.75,borderBottom:e=>`1px solid ${e.palette.divider}`},children:[(0,q.jsxs)(l,{direction:`row`,spacing:1,sx:{alignItems:`center`,flexWrap:`wrap`},children:[(0,q.jsx)(B,{variant:`caption`,sx:{fontFamily:`monospace`,minWidth:148,color:`text.secondary`},children:new Date(e.checkedAt).toLocaleString()}),o.map(([e,t])=>(0,q.jsx)(U,{size:`small`,label:e,color:Fe[t],variant:Le(t)?`outlined`:`filled`,sx:{height:18,fontSize:10}},e)),(0,q.jsxs)(B,{variant:`caption`,sx:{color:`text.disabled`,ml:`auto`},children:[e.checkDurationMs,`ms`]})]}),a&&(0,q.jsx)(B,{variant:`caption`,sx:{display:`block`,mt:.25,ml:`156px`,color:`error.main`,fontFamily:`monospace`,fontSize:11,wordBreak:`break-word`},children:a})]})}function Be({data:e}){if(!e)return(0,q.jsx)(B,{variant:`body2`,sx:{py:1,color:`text.secondary`},children:`Not read.`});if(!e.reachable||!e.answer)return(0,q.jsxs)(l,{direction:`row`,spacing:1,sx:{py:1,alignItems:`baseline`},children:[(0,q.jsx)(U,{size:`small`,label:`not asked`,variant:`outlined`,sx:{height:20,fontSize:11}}),(0,q.jsx)(B,{variant:`caption`,sx:{color:`text.secondary`,fontFamily:`monospace`},children:e.error??`no reason given`})]});let t=e.answer;if(t.apps.length===0)return(0,q.jsx)(B,{variant:`body2`,sx:{py:1,color:`text.secondary`},children:`The node answered and is running no applications.`});let n=e=>e===`online`?`success`:e===`starting`?`warning`:e===`stopped`?`default`:`error`;return(0,q.jsxs)(A,{sx:{py:.5},children:[(0,q.jsxs)(B,{variant:`caption`,sx:{display:`block`,mb:1,color:`text.secondary`},children:[t.apps.length,` app(s) · `,t.totalCpu.toFixed(1),`% CPU ·`,` `,(le(t)/1024/1024).toFixed(0),` MB`]}),t.apps.map(e=>(0,q.jsxs)(l,{direction:`row`,spacing:1,sx:{py:.5,alignItems:`baseline`,flexWrap:`wrap`},children:[(0,q.jsx)(U,{size:`small`,label:e.status,color:n(e.status),sx:{height:20,fontSize:11}}),(0,q.jsx)(B,{variant:`body2`,sx:{fontFamily:`monospace`},children:e.name}),(0,q.jsx)(B,{variant:`caption`,sx:{color:`text.secondary`,fontFamily:`monospace`},children:[e.pid?`pid ${e.pid}`:null,e.port?`:${e.port}`:null,e.uptime>0?`up ${$e(e.uptime)}`:null,e.restarts>0?`${e.restarts} restarts`:null].filter(Boolean).join(` · `)})]},e.name))]})}function Ve({data:e}){let t=e.phase===`done`?`success`:e.phase===`failed`||e.phase===`refused`?`error`:`warning`,n=e.phase!==`done`&&e.phase!==`failed`&&e.phase!==`refused`;return(0,q.jsxs)(A,{sx:{py:.5},children:[(0,q.jsxs)(l,{direction:`row`,spacing:1,sx:{alignItems:`center`,flexWrap:`wrap`},children:[(0,q.jsx)(U,{size:`small`,label:e.phase,color:t,sx:{height:20,fontSize:11}}),(0,q.jsx)(B,{variant:`body2`,children:e.message})]}),e.version&&(0,q.jsx)(B,{variant:`caption`,sx:{display:`block`,mt:.5,color:`text.secondary`,fontFamily:`monospace`},children:e.version}),n&&(0,q.jsx)(E,{variant:`determinate`,value:e.percent,sx:{mt:1,height:4,borderRadius:2}}),(0,q.jsx)(B,{variant:`caption`,sx:{display:`block`,mt:.5,color:`text.disabled`},children:new Date(e.at).toLocaleString()})]})}function He({data:e}){if(!e)return(0,q.jsx)(B,{variant:`body2`,sx:{py:1,color:`text.secondary`},children:`Not read.`});if(!e.reachable)return(0,q.jsxs)(l,{direction:`row`,spacing:1,sx:{py:1,alignItems:`baseline`},children:[(0,q.jsx)(U,{size:`small`,label:`not asked`,variant:`outlined`,sx:{height:20,fontSize:11}}),(0,q.jsx)(B,{variant:`caption`,sx:{color:`text.secondary`,fontFamily:`monospace`},children:e.error??`no reason given`})]});let t=Object.entries(e.indicators??{});if(t.length===0)return(0,q.jsx)(B,{variant:`body2`,sx:{py:1,color:`text.secondary`},children:`The node answered and registered no indicators.`});let n=e=>e===`healthy`?`success`:e===`degraded`?`warning`:e===`unhealthy`?`error`:`default`;return(0,q.jsxs)(A,{sx:{py:.5},children:[e.status&&(0,q.jsx)(U,{size:`small`,label:`overall: ${e.status}`,color:n(e.status),sx:{height:20,fontSize:11,mb:1}}),t.map(([e,t])=>(0,q.jsxs)(l,{direction:`row`,spacing:1,sx:{py:.4,alignItems:`baseline`,flexWrap:`wrap`},children:[(0,q.jsx)(B,{variant:`body2`,sx:{minWidth:120,fontWeight:500},children:e}),(0,q.jsx)(U,{size:`small`,label:t?.status??`unknown`,color:n(t?.status),variant:t?.status?`filled`:`outlined`,sx:{height:18,fontSize:10}}),t?.message&&(0,q.jsx)(B,{variant:`caption`,sx:{color:t.status===`healthy`?`text.secondary`:`error.main`},children:t.message})]},e))]})}function Ue({data:e}){if(!e)return(0,q.jsx)(B,{variant:`body2`,sx:{py:1,color:`text.secondary`},children:`Not read.`});if(!e.reachable||!e.sync)return(0,q.jsxs)(l,{direction:`row`,spacing:1,sx:{py:1,alignItems:`baseline`},children:[(0,q.jsx)(U,{size:`small`,label:`not asked`,variant:`outlined`,sx:{height:20,fontSize:11}}),(0,q.jsx)(B,{variant:`caption`,sx:{color:`text.secondary`,fontFamily:`monospace`},children:e.error??`no reason given`})]});let t=e.sync,n=t.pendingItems>0&&!t.connected;return(0,q.jsxs)(A,{sx:{py:.5},children:[(0,q.jsxs)(l,{direction:`row`,spacing:1,sx:{alignItems:`center`,flexWrap:`wrap`,mb:.5},children:[(0,q.jsx)(U,{size:`small`,label:t.connected?`delivering`:t.pendingItems>0?`holding`:`idle`,color:n?`warning`:t.connected?`success`:`default`,sx:{height:20,fontSize:11}}),(0,q.jsxs)(B,{variant:`caption`,sx:{color:`text.secondary`},children:[t.pendingItems,` pending · `,Math.round(t.bufferSize/1024),` KB · last delivery`,` `,t.lastSyncAt?Se(new Date(t.lastSyncAt).toISOString()):`never`]}),t.failedAttempts>0&&(0,q.jsx)(U,{size:`small`,color:`error`,label:`${t.failedAttempts} failed attempts`,sx:{height:18,fontSize:10}})]}),t.lastError&&(0,q.jsx)(B,{variant:`caption`,sx:{display:`block`,color:`error.main`,fontFamily:`monospace`,fontSize:11,wordBreak:`break-word`},children:t.lastError})]})}function We({states:e}){let t=_e(Object.values(e));return t.kind===`none`?null:(0,q.jsx)(k,{severity:`warning`,children:t.kind===`leaders`?`${t.answered} nodes name ${t.groups.length} different leaders: `+t.groups.map(([e,t])=>`${e} (${t.length})`).join(`, `):`${t.answered} nodes are in ${t.terms.length} different election terms: ${t.terms.join(`, `)}`})}function Ge({data:e}){if(!e)return null;if(!e.reachable||!e.relay)return(0,q.jsxs)(l,{direction:`row`,spacing:1,sx:{py:.5,alignItems:`center`,flexWrap:`wrap`},children:[(0,q.jsx)(B,{variant:`caption`,sx:{minWidth:96,color:`text.secondary`},children:`telemetry`}),(0,q.jsx)(U,{size:`small`,label:`not asked`,variant:`outlined`,sx:{height:18,fontSize:10}}),(0,q.jsx)(B,{variant:`caption`,sx:{color:`text.secondary`,fontFamily:`monospace`},children:e.error??`no reason given`})]});let t=e.relay,n=t.buffer?.totalDropped??0;return(0,q.jsxs)(l,{direction:`row`,spacing:1,sx:{py:.5,alignItems:`center`,flexWrap:`wrap`},children:[(0,q.jsx)(B,{variant:`caption`,sx:{minWidth:96,color:`text.secondary`},children:`telemetry`}),(0,q.jsx)(U,{size:`small`,label:t.transportConnected?`transport up`:`transport down`,color:t.transportConnected?`success`:`default`,variant:t.transportConnected?`filled`:`outlined`,sx:{height:18,fontSize:10}}),(0,q.jsxs)(B,{variant:`caption`,sx:{color:`text.secondary`},children:[t.buffer?.size??0,` buffered · `,t.totalSent??0,` sent · `,t.totalFailed??0,` failed`]}),n>0&&(0,q.jsx)(U,{size:`small`,color:`error`,label:`${n} DROPPED`,sx:{height:18,fontSize:10}})]})}function Ke({open:e,onClose:t,node:n}){let[r,a]=(0,K.useState)([]),[s,c]=(0,K.useState)(null),[d,f]=(0,K.useState)(null),[p,m]=(0,K.useState)(null),[g,v]=(0,K.useState)(null),[y,b]=(0,K.useState)(50),[x,C]=(0,K.useState)(null),[E,D]=(0,K.useState)(null),[j,M]=(0,K.useState)(!1),[ne,N]=(0,K.useState)(!1),[re,P]=(0,K.useState)(!1),[ie,F]=(0,K.useState)(null),L=ee(),R=(0,K.useCallback)(async(e,t)=>{N(!0),F(null);try{let[n,r,o,s,l,u,d]=await Promise.allSettled([i.getCheckHistory({nodeId:e,limit:t}),i.getNodeIndicators({nodeId:e}),i.getNodeSyncStatus({nodeId:e}),i.getNodeRelayStats({nodeId:e}),i.getNodeHealthSummaries(),i.getNodeDaemonStatus({nodeId:e}),i.getUpgradeProgress()]);if(C(u.status===`fulfilled`?u.value:null),D(d.status===`fulfilled`?d.value.find(t=>t.nodeId===e)??null:null),c(r.status===`fulfilled`?r.value:null),f(o.status===`fulfilled`?o.value:null),m(s.status===`fulfilled`?s.value:null),v(l.status===`fulfilled`?l.value.find(t=>t.nodeId===e)??null:null),n.status===`rejected`)throw n.reason;a(n.value)}catch(e){F(e instanceof Error?e.message:String(e)),a([])}finally{N(!1)}},[]);(0,K.useEffect)(()=>{e&&n&&R(n.id,y)},[e,n,y,R]);let z=E!==null&&E.phase!==`done`&&E.phase!==`failed`&&E.phase!==`refused`;oe(()=>{e&&n&&R(n.id,y)},{intervalMs:5e3,enabled:e&&z});let ce=(0,K.useCallback)(async()=>{if(n){M(!0);try{let e=await i.upgradeNode({nodeId:n.id});if(!e.started){L.warning(e.reason??`The daemon refused to start an upgrade`);return}L.info(`Building a bundle — this takes a few minutes`),await R(n.id,y)}catch(e){L.error(e instanceof Error?e.message:`Could not start the upgrade`)}finally{M(!1)}}},[n,y,R,L]),V=(0,K.useCallback)(async()=>{if(n){P(!0);try{await i.triggerNodeCheck({nodeId:n.id}),await R(n.id,y),L.success(`Check complete`)}catch(e){L.error(e instanceof Error?e.message:`Check failed`)}finally{P(!1)}}},[n,y,R,L]);if(!n)return null;let H=n.status,W=n.isLocal;return(0,q.jsxs)(ae,{open:e,onClose:t,maxWidth:`md`,fullWidth:!0,children:[(0,q.jsx)(o,{children:(0,q.jsxs)(l,{direction:`row`,spacing:1,sx:{alignItems:`center`},children:[(0,q.jsxs)(A,{component:`span`,children:[`Diagnostics — `,n.name]}),(0,q.jsx)(B,{variant:`caption`,sx:{color:`text.secondary`},children:W?`this daemon`:`${n.host}:${n.daemonPort}`})]})}),(0,q.jsxs)(se,{dividers:!0,children:[(0,q.jsx)(B,{variant:`overline`,sx:{color:`text.secondary`},children:`Last check`}),g&&(g.consecutiveFailures>0||g.lastSeenOnline)&&(0,q.jsxs)(l,{direction:`row`,spacing:1,sx:{mb:1,alignItems:`center`,flexWrap:`wrap`},children:[g.consecutiveFailures>0&&(0,q.jsx)(U,{size:`small`,color:g.consecutiveFailures>3?`error`:`warning`,label:`${g.consecutiveFailures} consecutive failures`,sx:{height:20,fontSize:11}}),g.lastSeenOnline&&(0,q.jsxs)(B,{variant:`caption`,sx:{color:`text.secondary`},children:[`last seen online `,Se(g.lastSeenOnline)]})]}),H?(0,q.jsxs)(A,{sx:{mb:2},children:[!W&&(0,q.jsxs)(q.Fragment,{children:[(0,q.jsx)(Re,{label:`PING`,verdict:Y(H.pingReachable,H.pingError),latencyMs:H.pingLatencyMs,error:H.pingError??null}),(0,q.jsx)(Re,{label:`SSH`,verdict:Y(H.sshConnected,H.sshError),latencyMs:H.sshLatencyMs,error:H.sshError??null,detail:H.sshConnected==null&&!H.sshError?`this check reaches the node over Netron`:void 0})]}),(0,q.jsx)(Re,{label:`OMNITRON`,verdict:he(H),error:H.omnitronError??null,detail:H.omnitronConnected?[H.omnitronVersion&&`v${H.omnitronVersion}`,H.omnitronPid&&`pid ${H.omnitronPid}`,H.omnitronUptime!=null&&H.omnitronUptime>0&&`up ${$e(H.omnitronUptime)}`].filter(Boolean).join(` · `):void 0}),(0,q.jsx)(B,{variant:`caption`,sx:{display:`block`,mt:1,color:`text.disabled`},children:H.checkedAt?`Taken ${new Date(H.checkedAt).toLocaleString()}`:`Never checked`})]}):(0,q.jsx)(B,{variant:`body2`,sx:{mb:2,color:`text.secondary`},children:`This node has never been checked.`}),(0,q.jsx)(_,{sx:{my:2}}),(0,q.jsx)(B,{variant:`overline`,sx:{color:`text.secondary`},children:`Indicators, from the node's own titan-health`}),(0,q.jsx)(He,{data:s}),(0,q.jsx)(_,{sx:{my:2}}),(0,q.jsx)(B,{variant:`overline`,sx:{color:`text.secondary`},children:`Running on this node`}),(0,q.jsx)(Be,{data:x}),(0,q.jsx)(_,{sx:{my:2}}),(0,q.jsx)(B,{variant:`overline`,sx:{color:`text.secondary`},children:`Replication`}),(0,q.jsx)(Ue,{data:d}),(0,q.jsx)(Ge,{data:p}),(0,q.jsx)(_,{sx:{my:2}}),(0,q.jsxs)(l,{direction:`row`,spacing:1,sx:{alignItems:`center`,mb:1},children:[(0,q.jsx)(B,{variant:`overline`,sx:{color:`text.secondary`},children:`History`}),(0,q.jsx)(T,{size:`small`,sx:{ml:`auto`,minWidth:120},children:(0,q.jsx)(S,{value:y,onChange:e=>b(Number(e.target.value)),sx:{height:30,fontSize:12},children:Pe.map(e=>(0,q.jsxs)(w,{value:e,sx:{fontSize:12},children:[`last `,e,` checks`]},e))})})]}),ie&&(0,q.jsx)(k,{onClose:()=>F(null),children:ie}),ne&&r.length===0?(0,q.jsx)(u,{height:120}):r.length===0&&!ie?(0,q.jsx)(B,{variant:`body2`,sx:{py:2,color:`text.secondary`},children:`No checks recorded. History is kept by the daemon that runs the health worker.`}):(0,q.jsx)(A,{sx:{maxHeight:360,overflowY:`auto`},children:r.map(e=>(0,q.jsx)(ze,{row:e,isLocal:W},`${e.nodeId}-${e.checkedAt}`))}),E&&(0,q.jsxs)(q.Fragment,{children:[(0,q.jsx)(_,{sx:{my:2}}),(0,q.jsx)(B,{variant:`overline`,sx:{color:`text.secondary`},children:`Omnitron upgrade`}),(0,q.jsx)(Ve,{data:E})]})]}),(0,q.jsxs)(I,{children:[(0,q.jsx)(O,{onClick:V,disabled:re,startIcon:(0,q.jsx)(h,{sx:{fontSize:16}}),children:re?`Checking…`:`Check now`}),!W&&(0,q.jsx)(O,{onClick:ce,disabled:j||z,startIcon:(0,q.jsx)(te,{sx:{fontSize:16}}),children:z?`Upgrading…`:`Upgrade omnitron`}),(0,q.jsx)(A,{sx:{flexGrow:1}}),(0,q.jsx)(O,{onClick:t,children:`Close`})]})]})}function qe({node:e,onEdit:t,onRemove:n,onCheckSsh:r,onDiagnose:i,checking:a,uptimeData:o,lastCheckAt:s,newest:c,mesh:u}){let{status:d}=e,f=Ae(d,e.isLocal),p=d?.pingReachable==null?`unchecked`:d.pingReachable?`online`:`offline`,g=!e.isLocal&&Z(d?.checkedAt);return(0,q.jsx)(R,{sx:{height:`100%`,display:`flex`,flexDirection:`column`,transition:`box-shadow 0.2s`,"&:hover":{boxShadow:e=>e.shadows[8]}},children:(0,q.jsxs)(D,{sx:{pb:`12px !important`,flexGrow:1,display:`flex`,flexDirection:`column`},children:[(0,q.jsxs)(l,{direction:`row`,sx:{alignItems:`flex-start`,justifyContent:`space-between`,mb:1.5},children:[(0,q.jsxs)(l,{direction:`row`,spacing:1,sx:{alignItems:`center`,minWidth:0},children:[e.isLocal?(0,q.jsx)(ne,{sx:{fontSize:24,color:`primary.main`,flexShrink:0}}):(0,q.jsx)(re,{sx:{fontSize:24,color:`text.secondary`,flexShrink:0}}),(0,q.jsxs)(A,{sx:{minWidth:0},children:[(0,q.jsx)(B,{variant:`subtitle2`,noWrap:!0,children:e.name}),(0,q.jsxs)(B,{variant:`caption`,noWrap:!0,sx:{color:`text.disabled`},children:[e.host,e.isLocal?``:`:${e.sshPort}`]})]})]}),(0,q.jsxs)(l,{direction:`row`,spacing:0,children:[!e.isLocal&&(0,q.jsx)(C,{title:a?`Checking...`:`Check SSH connection`,children:(0,q.jsx)(`span`,{children:(0,q.jsx)(m,{size:`small`,"aria-label":`Check SSH connection`,onClick:()=>r(e.id),disabled:a,children:(0,q.jsx)(h,{sx:{fontSize:18,...a&&{animation:`${Ce} 1s linear infinite`}}})})})}),(0,q.jsx)(C,{title:`Diagnostics`,children:(0,q.jsx)(m,{size:`small`,onClick:()=>i(e),children:(0,q.jsx)(b,{sx:{fontSize:18}})})}),!e.isLocal&&(0,q.jsxs)(q.Fragment,{children:[(0,q.jsx)(C,{title:`Edit`,children:(0,q.jsx)(m,{size:`small`,onClick:()=>t(e),children:(0,q.jsx)(v,{sx:{fontSize:18}})})}),(0,q.jsx)(C,{title:`Remove`,children:(0,q.jsx)(m,{size:`small`,onClick:()=>n(e.id),color:`error`,children:(0,q.jsx)(H,{sx:{fontSize:18}})})})]})]})]}),(0,q.jsxs)(l,{direction:`row`,spacing:2,sx:{mb:1.5,alignItems:`center`},children:[e.isLocal?(0,q.jsx)(Te,{state:f.state,label:`OMNITRON`,tooltip:f.tooltip}):(0,q.jsxs)(q.Fragment,{children:[(0,q.jsx)(Te,{state:p,label:`PING`,tooltip:d?.pingReachable?`${d.pingLatencyMs??`?`}ms`:d?.pingError??`Not checked`}),(0,q.jsx)(Te,{state:f.state,label:`OMNITRON`,tooltip:f.tooltip})]}),(0,q.jsx)(C,{arrow:!0,title:d?.checkedAt?`Last checked ${new Date(d.checkedAt).toLocaleString()}`:`This node has never been checked`,children:(0,q.jsx)(B,{variant:`caption`,noWrap:!0,sx:{ml:`auto`,fontSize:10,color:g?`warning.main`:`text.disabled`},children:Se(d?.checkedAt)})})]}),(0,q.jsx)(_,{sx:{mb:1.5}}),(0,q.jsxs)(l,{spacing:.5,children:[d?.omnitronVersion&&(0,q.jsx)(Ze,{version:d.omnitronVersion,standing:Oe(d.omnitronVersion,c)}),(0,q.jsx)(Qe,{label:`Runtime`,value:e.runtime}),(0,q.jsx)(Qe,{label:`Daemon Port`,value:String(e.daemonPort)}),!e.isLocal&&(0,q.jsx)(Qe,{label:`SSH User`,value:e.sshUser}),d?.os&&(0,q.jsx)(Qe,{label:`OS`,value:`${d.os.platform} ${d.os.arch}`}),d?.omnitronUptime!=null&&d.omnitronUptime>0&&(0,q.jsx)(Qe,{label:`Uptime`,value:$e(d.omnitronUptime)}),!e.isLocal&&(0,q.jsx)(Xe,{mesh:u})]}),e.tags.length>0&&(0,q.jsx)(l,{direction:`row`,spacing:.5,useFlexGap:!0,sx:{mt:1.5,flexWrap:`wrap`},children:e.tags.map(e=>(0,q.jsx)(U,{label:e,size:`small`,variant:`outlined`,sx:{height:22,fontSize:11}},e))}),!e.isLocal&&(0,q.jsx)(A,{sx:{mt:`auto`,pt:1.5},children:(0,q.jsxs)(l,{spacing:.75,children:[(0,q.jsx)($,{data:o,metric:`ping`,label:`PING`,segWidth:je,gap:Me,height:Ne,lastCheckAt:s}),(0,q.jsx)($,{data:o,metric:`omnitron`,label:`OMNITRON`,segWidth:je,gap:Me,height:Ne,lastCheckAt:s})]})})]})})}function Je(e){let t=e.lastHeartbeat?` Last heartbeat ${Se(new Date(e.lastHeartbeat).toISOString())}.`:``;return!e.inMesh||e.status===`disconnected`?{text:`not joined`,tone:`idle`,tooltip:e.lastError??`This master is not connected to the node. Nothing it collects is being replicated.`}:e.status===`error`?{text:`failing`,tone:`bad`,tooltip:e.lastError??`The connection to this node is failing.`}:e.status===`connecting`?{text:`joining`,tone:`quiet`,tooltip:`Connecting.`}:e.authenticated?e.via===`ssh-tunnel`?{text:`over SSH`,tone:`info`,tooltip:`Replicating through an SSH tunnel: this node's daemon port is not open to this master.${t}`}:{text:`direct`,tone:`good`,tooltip:`Replicating over a direct connection to the daemon port.${t}`}:{text:`unauthenticated`,tone:`warn`,tooltip:`Connected, but without a credential this node accepts — it answers pings and replicates nothing.`}}var Ye={idle:`text.disabled`,quiet:`text.secondary`,bad:`error.main`,warn:`warning.main`,info:`info.main`,good:`success.main`};function Xe({mesh:e}){if(!e)return null;let t=Je(e);return(0,q.jsxs)(l,{direction:`row`,sx:{justifyContent:`space-between`,alignItems:`center`},children:[(0,q.jsx)(B,{variant:`caption`,sx:{color:`text.disabled`,fontSize:11},children:`Mesh`}),(0,q.jsx)(C,{arrow:!0,title:t.tooltip,children:(0,q.jsx)(B,{variant:`caption`,noWrap:!0,sx:{fontSize:11,color:Ye[t.tone],maxWidth:190},children:t.text})})]})}function Ze({version:e,standing:t}){let[n,r]=e.split(`+`),i=r?.split(`.`)[1],a=i?`${n} · ${i.slice(0,7)}`:n,o=t===`behind`?{text:`behind`,color:`warning.main`}:t===`differs`?{text:`differs`,color:`info.main`}:null;return(0,q.jsxs)(l,{direction:`row`,sx:{justifyContent:`space-between`,alignItems:`center`},children:[(0,q.jsx)(B,{variant:`caption`,sx:{color:`text.disabled`,fontSize:11},children:`Version`}),(0,q.jsx)(C,{arrow:!0,title:e,children:(0,q.jsxs)(l,{direction:`row`,spacing:.75,sx:{alignItems:`center`},children:[o&&(0,q.jsx)(B,{variant:`caption`,sx:{fontSize:10,color:o.color},children:o.text}),(0,q.jsx)(B,{variant:`caption`,noWrap:!0,sx:{fontSize:11,maxWidth:190},children:a})]})})]})}function Qe({label:e,value:t}){return(0,q.jsxs)(l,{direction:`row`,sx:{justifyContent:`space-between`,alignItems:`center`},children:[(0,q.jsx)(B,{variant:`caption`,sx:{color:`text.disabled`},children:e}),(0,q.jsx)(B,{variant:`caption`,sx:{fontWeight:500},children:t})]})}function $e(e){let t=Math.floor(e/1e3);if(t<60)return`${t}s`;let n=Math.floor(t/60);if(n<60)return`${n}m`;let r=Math.floor(n/60);return r<24?`${r}h ${n%60}m`:`${Math.floor(r/24)}d ${r%24}h`}var et={name:``,host:``,sshPort:22,sshUser:`root`,sshAuthMethod:`key`,sshPrivateKey:``,sshPassphrase:``,sshPassword:``,runtime:`node`,daemonPort:9700,tags:``};function tt({open:e,onClose:t,onSubmit:n,editNode:r,sshKeys:i,loading:a,error:s,onDismissError:c}){let[u,d]=(0,K.useState)(et);(0,K.useEffect)(()=>{e&&d(r?{name:r.name,host:r.host,sshPort:r.sshPort,sshUser:r.sshUser,sshAuthMethod:r.sshAuthMethod,sshPrivateKey:r.sshPrivateKey??``,sshPassphrase:``,sshPassword:``,runtime:r.runtime,daemonPort:r.daemonPort,tags:r.tags.join(`, `)}:{...et,sshPrivateKey:i[0]?.path??``})},[r,i,e]);let f=(e,t)=>d(n=>({...n,[e]:t})),p=!!r,m=u.name.trim()&&u.host.trim();return(0,q.jsxs)(ae,{open:e,onClose:t,maxWidth:`sm`,fullWidth:!0,children:[(0,q.jsx)(o,{children:p?`Edit "${r.name}"`:`Add Node`}),(0,q.jsxs)(se,{sx:{pt:`8px !important`},children:[s&&(0,q.jsx)(k,{onClose:c,children:s}),(0,q.jsxs)(l,{spacing:2.5,sx:{mt:1},children:[(0,q.jsx)(g,{label:`Name`,value:u.name,onChange:e=>f(`name`,e.target.value),fullWidth:!0,placeholder:`production-server-1`,autoFocus:!0}),(0,q.jsxs)(l,{direction:`row`,spacing:2,children:[(0,q.jsx)(g,{label:`Host`,value:u.host,onChange:e=>f(`host`,e.target.value),fullWidth:!0,placeholder:`192.168.1.100`}),(0,q.jsx)(g,{label:`SSH Port`,value:u.sshPort,onChange:e=>f(`sshPort`,parseInt(e.target.value,10)||22),sx:{width:120},type:`number`})]}),(0,q.jsxs)(l,{direction:`row`,spacing:2,children:[(0,q.jsx)(g,{label:`SSH User`,value:u.sshUser,onChange:e=>f(`sshUser`,e.target.value),fullWidth:!0}),(0,q.jsxs)(T,{sx:{minWidth:160},children:[(0,q.jsx)(M,{children:`Auth Method`}),(0,q.jsxs)(S,{value:u.sshAuthMethod,label:`Auth Method`,onChange:e=>f(`sshAuthMethod`,e.target.value),children:[(0,q.jsx)(w,{value:`key`,children:`SSH Key`}),(0,q.jsx)(w,{value:`password`,children:`Password`})]})]})]}),u.sshAuthMethod===`key`?(0,q.jsxs)(q.Fragment,{children:[(0,q.jsxs)(T,{fullWidth:!0,children:[(0,q.jsx)(M,{children:`SSH Private Key`}),(0,q.jsxs)(S,{value:u.sshPrivateKey,label:`SSH Private Key`,onChange:e=>f(`sshPrivateKey`,e.target.value),children:[i.map(e=>(0,q.jsx)(w,{value:e.path,children:(0,q.jsxs)(l,{direction:`row`,spacing:1,sx:{alignItems:`center`,width:`100%`},children:[(0,q.jsx)(B,{variant:`body2`,sx:{fontWeight:500},children:e.name}),(0,q.jsx)(U,{label:e.type,size:`small`,sx:{height:20,fontSize:11}}),(0,q.jsx)(B,{variant:`caption`,noWrap:!0,sx:{color:`text.disabled`,ml:`auto`},children:e.path})]})},e.path)),i.length===0&&(0,q.jsx)(w,{disabled:!0,children:(0,q.jsx)(B,{variant:`body2`,sx:{color:`text.secondary`},children:`No SSH keys found`})})]})]}),(0,q.jsx)(g,{label:`Key Passphrase`,value:u.sshPassphrase,onChange:e=>f(`sshPassphrase`,e.target.value),fullWidth:!0,type:`password`,placeholder:r?.hasPassphrase?`Encrypted — leave empty to keep`:`Leave empty if key is not encrypted`,size:`small`,helperText:r?.hasPassphrase?`Passphrase is stored encrypted. Enter new value to change.`:void 0})]}):(0,q.jsx)(g,{label:`SSH Password`,value:u.sshPassword,onChange:e=>f(`sshPassword`,e.target.value),fullWidth:!0,type:`password`,placeholder:r?.hasPassword?`Stored — leave empty to keep`:``,helperText:r?.hasPassword?`Password is stored encrypted. Enter a new value to change it.`:void 0}),(0,q.jsx)(_,{}),(0,q.jsxs)(l,{direction:`row`,spacing:2,children:[(0,q.jsxs)(T,{sx:{minWidth:140},children:[(0,q.jsx)(M,{children:`Runtime`}),(0,q.jsxs)(S,{value:u.runtime,label:`Runtime`,onChange:e=>f(`runtime`,e.target.value),children:[(0,q.jsx)(w,{value:`node`,children:`Node.js`}),(0,q.jsx)(w,{value:`bun`,children:`Bun`})]})]}),(0,q.jsx)(g,{label:`Daemon Port`,value:u.daemonPort,onChange:e=>f(`daemonPort`,parseInt(e.target.value,10)||9700),sx:{width:140},type:`number`}),(0,q.jsx)(g,{label:`Tags`,value:u.tags,onChange:e=>f(`tags`,e.target.value),fullWidth:!0,placeholder:`production, gpu`,helperText:`Comma-separated`})]})]})]}),(0,q.jsxs)(I,{sx:{px:3,pb:2},children:[(0,q.jsx)(O,{onClick:t,color:`inherit`,children:`Cancel`}),(0,q.jsx)(O,{variant:`contained`,onClick:()=>n(u),disabled:!m||a,children:p?`Save`:`Add Node`})]})]})}function nt({open:e,onClose:t,onSaved:n}){let[r,a]=(0,K.useState)(null),[s,c]=(0,K.useState)(!1),[d,f]=(0,K.useState)(null);(0,K.useEffect)(()=>{e&&(f(null),i.getCheckConfig().then(e=>a(e)).catch(e=>f(e?.message??`Could not read the current settings`)))},[e]);let p=(e,t)=>a(n=>n&&{...n,[e]:t});return(0,q.jsxs)(ae,{open:e,onClose:s?void 0:t,maxWidth:`xs`,fullWidth:!0,children:[(0,q.jsx)(o,{children:`Check Settings`}),(0,q.jsxs)(se,{sx:{pt:`8px !important`},children:[d&&(0,q.jsx)(k,{onClose:()=>f(null),children:d}),r?(0,q.jsxs)(l,{spacing:2.5,sx:{mt:1},children:[(0,q.jsxs)(T,{fullWidth:!0,children:[(0,q.jsx)(M,{children:`ICMP Ping`}),(0,q.jsxs)(S,{value:r.pingEnabled?`on`:`off`,label:`ICMP Ping`,onChange:e=>p(`pingEnabled`,e.target.value===`on`),children:[(0,q.jsx)(w,{value:`on`,children:`Enabled`}),(0,q.jsx)(w,{value:`off`,children:`Disabled`})]})]}),(0,q.jsx)(g,{label:`Ping timeout (ms)`,type:`number`,fullWidth:!0,value:r.pingTimeout,onChange:e=>p(`pingTimeout`,parseInt(e.target.value,10)||0),helperText:`250-60000`,disabled:!r.pingEnabled}),(0,q.jsx)(g,{label:`SSH timeout (ms)`,type:`number`,fullWidth:!0,value:r.sshTimeout,onChange:e=>p(`sshTimeout`,parseInt(e.target.value,10)||0),helperText:`1000-120000`}),(0,q.jsx)(g,{label:`Omnitron probe timeout (ms)`,type:`number`,fullWidth:!0,value:r.omnitronCheckTimeout,onChange:e=>p(`omnitronCheckTimeout`,parseInt(e.target.value,10)||0),helperText:`1000-120000`}),(0,q.jsx)(g,{label:`Concurrent checks`,type:`number`,fullWidth:!0,value:r.concurrency,onChange:e=>p(`concurrency`,parseInt(e.target.value,10)||0),helperText:`1-100 - how many nodes are checked at once`})]}):(0,q.jsx)(u,{variant:`rounded`,height:220})]}),(0,q.jsxs)(I,{sx:{px:3,pb:2},children:[(0,q.jsx)(O,{onClick:t,color:`inherit`,disabled:s,children:`Cancel`}),(0,q.jsx)(O,{variant:`contained`,onClick:async()=>{if(r){c(!0),f(null);try{n(await i.setCheckConfig(r)),t()}catch(e){f(e?.message??`Failed to save settings.`)}finally{c(!1)}}},disabled:!r||s,children:s?`Saving...`:`Save`})]})]})}function rt(){let[e,t]=(0,K.useState)([]),[r,a]=(0,K.useState)([]),[s,c]=(0,K.useState)(!0),[d,f]=(0,K.useState)(null),[m,g]=(0,K.useState)(!1),[_,y]=(0,K.useState)(null),[b,x]=(0,K.useState)(null),[S,C]=(0,K.useState)(!1),[w,T]=(0,K.useState)(null),[E,D]=(0,K.useState)({}),[te,A]=(0,K.useState)({}),[j,M]=(0,K.useState)(null),[ne,re]=(0,K.useState)(!1),[P,F]=(0,K.useState)({uptimeIntervalMs:ve,retentionDays:ye}),L=(0,K.useRef)(P);L.current=P;let[R,z]=(0,K.useState)(null),V=(0,K.useRef)([]);V.current=e;let[H,U]=(0,K.useState)({}),[W,le]=(0,K.useState)({}),G=(0,K.useCallback)(async()=>{try{let e=await i.listNodes();return t(e),M(null),e}catch(e){return M(e?.message??`Could not reach the daemon`),V.current}finally{c(!1)}},[]),ue=(0,K.useCallback)(async()=>{try{let e=await i.getMeshStatus();U(Object.fromEntries(e.map(e=>[e.nodeId,e])))}catch{}},[]),de=(0,K.useCallback)(async e=>{let t=await Promise.allSettled(e.map(e=>i.getNodeClusterState({nodeId:e.id}))),n={};for(let e of t)e.status===`fulfilled`&&e.value&&(n[e.value.nodeId]=e.value);Object.keys(n).length>0&&le(n)},[]),J=(0,K.useCallback)(async e=>{let t={},n={},r=null;await Promise.allSettled(e.map(async e=>{try{let{uptimeIntervalMs:r,retentionDays:a}=L.current,[o,s]=await Promise.all([i.getUptimeBar({nodeId:e.id,bucketCount:be(a,r),intervalMs:r}),i.getCheckHistory({nodeId:e.id,limit:1}).catch(()=>null)]);t[e.id]=o,s&&(n[e.id]=s[0]?.checkedAt??null)}catch(e){r??=e?.message??`Could not load uptime history`}})),D(e=>({...e,...t})),A(e=>({...e,...n})),z(r)},[]),pe=(0,K.useCallback)(async()=>{try{a(await i.listSshKeys())}catch{}},[]),me=N(e=>e.connected),Y=N(e=>e.lastNodeEvent),he=N(e=>e.initialize);(0,K.useEffect)(()=>he(),[he]),oe(()=>void G(),{intervalMs:me?12e4:3e4}),oe(()=>void ue(),{intervalMs:15e3}),oe(()=>void de(V.current),{intervalMs:6e4}),(0,K.useEffect)(()=>{Y&&G()},[Y,G]),oe(()=>void(async()=>{await J(V.current)})(),{intervalMs:xe});let ge=e.map(e=>e.id).sort().join(`,`);(0,K.useEffect)(()=>{ge&&J(V.current)},[ge,J]),(0,K.useEffect)(()=>{pe()},[pe]),(0,K.useEffect)(()=>{Promise.resolve().then(()=>i.getHistoryConfig()).then(e=>F(e)).catch(()=>{})},[]);let _e=(0,K.useMemo)(()=>ke(e.map(e=>e.status?.omnitronVersion)),[e]),X=ee(),Se=(0,K.useCallback)(async t=>{let n=e.find(e=>e.id===t)?.name??t;f(t);try{let e=await i.checkNodeStatus({id:t});if(e.sshConnected){let t=e.sshLatencyMs==null?``:` (${e.sshLatencyMs}ms)`;X.success(`${n}: SSH connected${t}`)}else e.sshConnected===!1?X.error(`${n}: SSH failed — ${e.sshError??`Connection refused`}`):X.warning(`${n}: this check did not use SSH — ${e.omnitronConnected?`omnitron answered on its Netron port`:e.omnitronError??`no answer on the Netron port`}`)}catch(e){X.error(`${n}: ${e?.message??`Check failed`}`)}finally{f(null)}},[e,X]),[Z,Ce]=(0,K.useState)(null),[we,Te]=(0,K.useState)(!1),[Ee,Q]=(0,K.useState)(null),$=(0,K.useRef)(!1),De=e.find(e=>e.id===Z),Oe=(0,K.useCallback)(async()=>{if(Z&&!$.current){$.current=!0,Te(!0),Q(null);try{await i.removeNode({id:Z}),await G(),Ce(null)}catch(e){Q(e?.message??`Failed to remove node.`)}finally{$.current=!1,Te(!1)}}},[Z,G]),Ae=(0,K.useCallback)(()=>{$.current||(Ce(null),Q(null))},[]),je=(0,K.useCallback)(()=>{y(null),T(null),g(!0)},[]),Me=(0,K.useCallback)(e=>{y(e),T(null),g(!0)},[]),Ne=(0,K.useCallback)(()=>{g(!1),y(null),T(null)},[]),Pe=(0,K.useCallback)(async e=>{C(!0),T(null);try{let t={name:e.name.trim(),host:e.host.trim(),sshPort:e.sshPort,sshUser:e.sshUser.trim(),sshAuthMethod:e.sshAuthMethod,sshPrivateKey:e.sshAuthMethod===`key`?e.sshPrivateKey:void 0,sshPassphrase:e.sshAuthMethod===`key`&&e.sshPassphrase?e.sshPassphrase:void 0,sshPassword:e.sshAuthMethod===`password`&&e.sshPassword?e.sshPassword:void 0,runtime:e.runtime,daemonPort:e.daemonPort,tags:e.tags.split(`,`).map(e=>e.trim()).filter(Boolean)};_?await i.updateNode({id:_.id,...t}):await i.addNode(t),Ne(),await G()}catch(e){T(e?.message??`Failed to save node.`)}finally{C(!1)}},[_,G,Ne]),Fe=[...e].sort((e,t)=>e.isLocal===t.isLocal?e.name.localeCompare(t.name):e.isLocal?-1:1);return(0,q.jsxs)(l,{spacing:3,children:[(0,q.jsx)(ce,{links:[{name:`Nodes`}],action:(0,q.jsxs)(l,{direction:`row`,spacing:1,children:[(0,q.jsx)(O,{variant:`outlined`,size:`small`,startIcon:(0,q.jsx)(v,{sx:{fontSize:18}}),onClick:()=>re(!0),children:`Check Settings`}),(0,q.jsx)(O,{variant:`outlined`,size:`small`,startIcon:(0,q.jsx)(h,{sx:{fontSize:18}}),onClick:async()=>{let e=await G();await J(e)},children:`Refresh`}),(0,q.jsx)(O,{variant:`contained`,size:`small`,startIcon:(0,q.jsx)(p,{sx:{fontSize:18}}),onClick:je,children:`Add Node`})]})}),(0,q.jsx)(We,{states:W}),(0,q.jsx)(fe,{nodes:e}),j&&(0,q.jsxs)(k,{severity:`warning`,onClose:()=>M(null),children:[`Could not refresh the node list — `,j,`. The cards below are the last state the daemon reported.`]}),R&&(0,q.jsxs)(k,{severity:`warning`,onClose:()=>z(null),children:[`Could not refresh the uptime history — `,R,`. The strips below are the last aggregation that arrived, and may be behind the cards.`]}),s?(0,q.jsx)(n,{container:!0,spacing:3,children:[1,2,3].map(e=>(0,q.jsx)(n,{size:{xs:12,sm:6,md:4},children:(0,q.jsx)(u,{variant:`rounded`,height:300})},e))}):Fe.length===0?(0,q.jsx)(ie,{title:j?`No nodes to show`:`No nodes registered`,description:j?`The list could not be refreshed, so this may not be the whole picture.`:`Add a node to manage a remote host from here.`}):(0,q.jsx)(n,{container:!0,spacing:3,children:Fe.map(e=>(0,q.jsx)(n,{size:{xs:12,sm:6,md:4},children:(0,q.jsx)(qe,{node:e,onEdit:Me,onRemove:Ce,onCheckSsh:Se,onDiagnose:x,checking:d===e.id,uptimeData:E[e.id]??[],lastCheckAt:te[e.id]??null,newest:_e,mesh:H[e.id]})},e.id))}),(0,q.jsx)(Ke,{open:!!b,onClose:()=>x(null),node:b?e.find(e=>e.id===b.id)??b:null}),(0,q.jsxs)(ae,{open:!!Z,onClose:Ae,maxWidth:`xs`,fullWidth:!0,children:[(0,q.jsx)(o,{children:`Remove Node`}),(0,q.jsxs)(se,{children:[(0,q.jsxs)(B,{variant:`body2`,children:[`Remove `,(0,q.jsx)(`strong`,{children:De?.name??Z}),`? This cannot be undone.`]}),Ee&&(0,q.jsx)(k,{onClose:()=>Q(null),children:Ee})]}),(0,q.jsxs)(I,{children:[(0,q.jsx)(O,{onClick:Ae,color:`inherit`,disabled:we,children:`Cancel`}),(0,q.jsx)(O,{onClick:Oe,color:`error`,variant:`contained`,disabled:we,children:we?`Removing…`:`Remove`})]})]}),(0,q.jsx)(tt,{open:m,onClose:Ne,onSubmit:Pe,editNode:_,sshKeys:r,loading:S,error:w,onDismissError:()=>T(null)}),(0,q.jsx)(nt,{open:ne,onClose:()=>re(!1),onSaved:e=>{X.success(`Check settings saved — ping ${e.pingEnabled?`on`:`off`}, SSH timeout ${e.sshTimeout}ms`),G()}})]})}export{Ge as NodeRelay,De as buildStampOf,rt as default,Je as meshStanding,ke as newestVersion,Oe as versionStanding};
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import{r as e}from"./rolldown-runtime-XKyaHtl9.js";import{t}from"./react-DlmbjZJV.js";import{g as n}from"./client-BmqFExWT.js";import{$n as r,$t as i,A as a,An as o,At as s,Bt as c,M as l,Mt as u,On as d,P as f,Pt as p,Yt as m,_ as h,bn as g,cn as _,in as v,j as y,nn as b,nt as x,rn as S,sn as C,tn as w,vn as T,vt as E,yn as D,yt as O}from"./index-vMnY_4jR.js";import{r as k,t as A}from"./formatters-BqjL73N3.js";import{t as j}from"./settled-pair-C7SjZuns.js";var M=e(t(),1),N=r(),P={success:`success`,failed:`error`,running:`info`,pending:`warning`,cancelled:`default`};function F({open:e,onClose:t,onCreated:r}){let[a,o]=(0,M.useState)(``),[s,l]=(0,M.useState)(``),[u,d]=(0,M.useState)(`[
|
|
2
|
+
{ "name": "build", "run": "echo building..." },
|
|
3
|
+
{ "name": "test", "run": "echo testing...", "dependsOn": ["build"] }
|
|
4
|
+
]`),[f,m]=(0,M.useState)(null);return(0,N.jsxs)(S,{open:e,onClose:t,maxWidth:`sm`,fullWidth:!0,children:[(0,N.jsx)(i,{children:`Create Pipeline`}),(0,N.jsx)(w,{children:(0,N.jsxs)(c,{spacing:2.5,sx:{mt:1},children:[f&&(0,N.jsx)(O,{severity:`error`,variant:`outlined`,children:f}),(0,N.jsx)(p,{label:`Name`,value:a,onChange:e=>o(e.target.value),size:`small`,fullWidth:!0}),(0,N.jsx)(p,{label:`Description`,value:s,onChange:e=>l(e.target.value),size:`small`,fullWidth:!0}),(0,N.jsx)(p,{label:`Steps (JSON)`,value:u,onChange:e=>d(e.target.value),size:`small`,fullWidth:!0,multiline:!0,rows:6,slotProps:{input:{sx:{fontFamily:`monospace`,fontSize:12}}}})]})}),(0,N.jsxs)(b,{children:[(0,N.jsx)(g,{onClick:t,size:`small`,children:`Cancel`}),(0,N.jsx)(g,{variant:`contained`,onClick:async()=>{try{let e=JSON.parse(u);await n.createPipeline({name:a,description:s||void 0,steps:e}),o(``),l(``),m(null),r(),t()}catch(e){m(e?.message??`Failed to create pipeline`)}},size:`small`,disabled:!a,children:`Create`})]})]})}function I({run:e}){return(0,N.jsxs)(_,{sx:{pl:4,pr:2,pb:2},children:[e.status===`running`&&(0,N.jsx)(m,{sx:{mb:1}}),(0,N.jsxs)(T,{variant:`caption`,sx:{color:`text.secondary`,mb:1,display:`block`},children:[`Triggered by: `,e.triggeredBy,` | Started: `,A(e.startedAt),e.completedAt&&` | Completed: ${A(e.completedAt)}`]}),e.steps.map((e,t)=>(0,N.jsxs)(c,{direction:`row`,spacing:1,sx:{alignItems:`center`,py:.5},children:[(0,N.jsx)(D,{label:e.status,size:`small`,color:P[e.status]??`default`,variant:`filled`,sx:{minWidth:70,fontWeight:600,fontSize:11}}),(0,N.jsx)(T,{variant:`body2`,sx:{fontWeight:500},children:e.name}),(0,N.jsx)(T,{variant:`caption`,sx:{color:`text.secondary`,fontFamily:`monospace`},children:k(e.duration)}),e.error&&(0,N.jsx)(T,{variant:`caption`,sx:{color:`error.main`,fontFamily:`monospace`},children:e.error})]},t))]})}function L(){let[e,t]=(0,M.useState)(!1),[r,i]=(0,M.useState)(null),{data:p,loading:m,error:_,refresh:b}=x(async()=>{let{first:e,second:t,partialFailure:r}=await j([n.listPipelines(),n.listRuns({limit:50})],[[],[]]);return{pipelineList:e,runs:t,partialFailure:r}},{intervalMs:1e4}),[S,w]=(0,M.useState)(null),[k,L]=(0,M.useState)(null),[R,z]=(0,M.useState)(0),[B,V]=(0,M.useState)(25),[H,U]=(0,M.useState)(0),[W,G]=(0,M.useState)(25),K=p?.pipelineList??[],q=p?.runs??[],J=p?.partialFailure??null,Y=async e=>{try{await n.executePipeline({id:e}),b()}catch(e){w(e?.message??`Failed to execute pipeline`)}},X=async()=>{let e=k;if(e)try{await n.deletePipeline({id:e}),L(null),await b()}catch(e){w(e?.message??`Failed to delete pipeline`)}},Z=K.find(e=>e.id===k),Q=q.slice(H*W,H*W+W),$=[{key:`pipeline`,header:`Pipeline`,render:e=>{let t=K.find(t=>t.id===e.pipelineId);return(0,N.jsx)(o,{"aria-expanded":r===e.id,onClick:()=>i(r===e.id?null:e.id),sx:{fontWeight:600,fontSize:`0.8125rem`,textAlign:`left`},children:t?.name??e.pipelineId.slice(0,8)})}},{key:`status`,header:`Status`,render:e=>(0,N.jsx)(D,{label:e.status,size:`small`,color:P[e.status]??`default`,variant:`filled`,sx:{fontWeight:600}})},{key:`startedAt`,header:`Started`,render:e=>(0,N.jsx)(T,{variant:`caption`,sx:{color:`text.secondary`},children:A(e.startedAt)})},{key:`completedAt`,header:`Completed`,render:e=>(0,N.jsx)(T,{variant:`caption`,sx:{color:`text.secondary`},children:e.completedAt?A(e.completedAt):`--`})},{key:`triggeredBy`,header:`Triggered By`,render:e=>(0,N.jsx)(T,{variant:`caption`,sx:{color:`text.secondary`},children:e.triggeredBy})}],ee=K.slice(R*B,R*B+B);return(0,N.jsxs)(c,{spacing:3,children:[(0,N.jsx)(s,{open:k!==null,onClose:()=>L(null),onConfirm:X,title:`Delete pipeline?`,content:(0,N.jsxs)(N.Fragment,{children:[(0,N.jsx)(`b`,{children:Z?.name??k}),` and its run history will be removed.`]}),confirmLabel:`Delete`,confirmColor:`error`}),(0,N.jsx)(E,{links:[{name:`Pipelines`}],action:(0,N.jsxs)(c,{direction:`row`,spacing:1,children:[(0,N.jsx)(d,{size:`small`,onClick:b,title:`Refresh`,children:(0,N.jsx)(f,{})}),(0,N.jsx)(g,{variant:`contained`,size:`small`,startIcon:(0,N.jsx)(l,{}),onClick:()=>t(!0),children:`New Pipeline`})]})}),(_||S||J)&&(0,N.jsx)(O,{closable:!0,severity:`warning`,variant:`outlined`,onClose:()=>w(null),children:S??_??`Some data is unavailable: ${J}`}),(0,N.jsxs)(C,{variant:`outlined`,children:[(0,N.jsx)(v,{slotProps:{title:{variant:`subtitle1`,fontWeight:600}},title:`Pipeline Definitions`,avatar:(0,N.jsx)(a,{})}),(0,N.jsx)(u,{columns:[{key:`name`,header:`Name`,render:e=>(0,N.jsx)(T,{variant:`body2`,sx:{fontWeight:600},children:e.name})},{key:`description`,header:`Description`,render:e=>(0,N.jsx)(T,{variant:`caption`,sx:{color:`text.secondary`},children:e.description??`--`})},{key:`steps`,header:`Steps`,render:e=>e.steps.length},{key:`triggers`,header:`Triggers`,render:e=>e.triggers.length},{key:`createdAt`,header:`Created`,render:e=>(0,N.jsx)(T,{variant:`caption`,sx:{color:`text.secondary`},children:A(e.createdAt)})},{key:`actions`,header:`Actions`,align:`right`,render:e=>(0,N.jsxs)(c,{direction:`row`,spacing:.5,sx:{justifyContent:`flex-end`},children:[(0,N.jsx)(d,{size:`small`,color:`error`,onClick:()=>L(e.id),title:`Delete`,children:(0,N.jsx)(h,{})}),(0,N.jsx)(d,{size:`small`,onClick:()=>Y(e.id),title:`Run`,children:(0,N.jsx)(y,{})})]})}],data:ee,total:K.length,loading:m,loadError:_??J??null,emptyMessage:`No pipelines defined`,rowKey:e=>e.id,page:R,pageSize:B,onPageChange:z,onPageSizeChange:e=>{V(e),z(0)},dense:!0})]}),(0,N.jsxs)(C,{variant:`outlined`,children:[(0,N.jsx)(v,{slotProps:{title:{variant:`subtitle1`,fontWeight:600}},title:`Run History`}),(0,N.jsx)(u,{columns:$,data:Q,total:q.length,loading:m,loadError:_??J??null,emptyMessage:`No pipeline runs yet`,rowKey:e=>e.id,renderExpanded:e=>r===e.id?(0,N.jsx)(I,{run:e}):null,page:H,pageSize:W,onPageChange:U,onPageSizeChange:e=>{G(e),U(0)},dense:!0})]}),(0,N.jsx)(F,{open:e,onClose:()=>t(!1),onCreated:b})]})}export{L as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{r as e}from"./rolldown-runtime-XKyaHtl9.js";import{t}from"./react-DlmbjZJV.js";import{t as n}from"./Grid-DizFZYue.js";import{$n as r,$t as i,Bt as a,Ct as o,Dt as s,Gn as c,M as l,N as u,On as d,P as f,Pt as p,Qt as m,R as h,Tt as g,Vt as _,an as v,bn as y,cn as b,ct as x,ir as S,kt as C,nn as w,on as T,rn as E,rr as D,rt as O,sn as k,tn as A,vn as j,vt as M,y as N,yn as P,yt as F}from"./index-vMnY_4jR.js";import{c as I}from"./formatters-BqjL73N3.js";var L=e(t(),1),R=r();function z({project:e,onEdit:t,onRemove:n,onOpen:r}){let i=e.runningStacks>0;return(0,R.jsxs)(k,{sx:{height:`100%`,display:`flex`,flexDirection:`column`,cursor:`pointer`,transition:`border-color 0.2s, box-shadow 0.2s`,"&:hover":{borderColor:e=>c(e.palette.primary.main,.3),boxShadow:e=>e.shadows[8]}},variant:`outlined`,onClick:()=>r(e.name),children:[(0,R.jsxs)(v,{sx:{flex:1,pb:`12px !important`},children:[(0,R.jsxs)(a,{direction:`row`,sx:{alignItems:`flex-start`,justifyContent:`space-between`,mb:1.5},children:[(0,R.jsxs)(a,{direction:`row`,spacing:1,sx:{alignItems:`center`,minWidth:0},children:[(0,R.jsx)(u,{sx:{fontSize:28,color:i?`primary.main`:`text.secondary`,flexShrink:0}}),(0,R.jsxs)(b,{sx:{minWidth:0},children:[(0,R.jsx)(j,{variant:`subtitle2`,noWrap:!0,sx:{fontWeight:700},children:e.displayName}),(0,R.jsx)(j,{variant:`caption`,noWrap:!0,sx:{color:`text.disabled`},children:e.name})]})]}),(0,R.jsx)(s,{color:i?`success`:`default`,sx:{flexShrink:0},children:i?`${e.runningStacks} live`:`idle`})]}),(0,R.jsx)(m,{sx:{mb:1.5}}),(0,R.jsx)(B,{label:`Path`,value:e.path,mono:!0}),(0,R.jsxs)(a,{spacing:.5,sx:{mt:1},children:[(0,R.jsx)(B,{label:`Stacks`,value:`${e.runningStacks} / ${e.totalStacks}`}),e.enabledStacks.length>0&&(0,R.jsx)(B,{label:`Enabled`,value:e.enabledStacks.join(`, `)}),(0,R.jsx)(B,{label:`Registered`,value:I(e.registeredAt)})]}),e.enabledStacks.length>0&&(0,R.jsx)(a,{direction:`row`,spacing:.5,useFlexGap:!0,sx:{mt:1.5,flexWrap:`wrap`},children:e.enabledStacks.map(e=>(0,R.jsx)(P,{label:e,size:`small`,variant:`outlined`,sx:{height:22,fontSize:11}},e))})]}),(0,R.jsxs)(T,{sx:{px:2,pb:1.5,justifyContent:`space-between`},onClick:e=>e.stopPropagation(),children:[(0,R.jsx)(_,{title:`Remove project`,children:(0,R.jsx)(d,{size:`small`,color:`error`,onClick:()=>n(e.name),disabled:i,children:(0,R.jsx)(N,{sx:{fontSize:18}})})}),(0,R.jsx)(_,{title:`Settings`,children:(0,R.jsx)(d,{size:`small`,onClick:()=>t(e),children:(0,R.jsx)(h,{sx:{fontSize:18}})})})]})]})}function B({label:e,value:t,mono:n}){return(0,R.jsxs)(a,{direction:`row`,spacing:1,sx:{justifyContent:`space-between`,alignItems:`center`},children:[(0,R.jsx)(j,{variant:`caption`,sx:{color:`text.disabled`,flexShrink:0},children:e}),(0,R.jsx)(j,{variant:`caption`,noWrap:!0,title:t,sx:{fontWeight:500,textAlign:`right`,minWidth:0,...n&&{fontFamily:`monospace`,fontSize:11}},children:t})]})}function V({open:e,onClose:t,project:n,onSave:r,loading:o}){let[s,c]=(0,L.useState)(``);if((0,L.useEffect)(()=>{e&&n&&c(n.path)},[e,n]),!n)return null;let l=s.trim()!==n.path,u=s.trim().length>0&&l;return(0,R.jsxs)(E,{open:e,onClose:t,maxWidth:`sm`,fullWidth:!0,children:[(0,R.jsxs)(i,{children:[`Project Settings — `,n.displayName]}),(0,R.jsx)(A,{sx:{pt:`8px !important`},children:(0,R.jsxs)(a,{spacing:2.5,sx:{mt:1},children:[(0,R.jsx)(p,{label:`Project Name`,value:n.displayName,disabled:!0,fullWidth:!0,helperText:`Derived from omnitron.config.ts — change it there to rename.`}),(0,R.jsx)(p,{label:`Registry Name`,value:n.name,disabled:!0,fullWidth:!0,size:`small`}),(0,R.jsx)(p,{label:`Project Path`,value:s,onChange:e=>c(e.target.value),fullWidth:!0,placeholder:`/absolute/path/to/project`,helperText:`Absolute path to the monorepo root containing omnitron.config.ts`,slotProps:{input:{sx:{fontFamily:`monospace`,fontSize:14}}}}),(0,R.jsx)(p,{label:`Registered`,value:new Date(n.registeredAt).toLocaleString(),disabled:!0,fullWidth:!0,size:`small`})]})}),(0,R.jsxs)(w,{sx:{px:3,pb:2},children:[(0,R.jsx)(y,{onClick:t,color:`inherit`,children:`Cancel`}),(0,R.jsx)(y,{variant:`contained`,onClick:()=>r(n.name,{path:s.trim()}),disabled:!u||o,children:`Save`})]})]})}function H({open:e,onClose:t,onAdd:n,loading:r}){let[o,s]=(0,L.useState)(``),[c,l]=(0,L.useState)(``);(0,L.useEffect)(()=>{e&&(s(``),l(``))},[e]);let u=o.trim().length>0&&c.trim().length>0;return(0,R.jsxs)(E,{open:e,onClose:t,maxWidth:`sm`,fullWidth:!0,children:[(0,R.jsx)(i,{children:`Add Project`}),(0,R.jsx)(A,{sx:{pt:`8px !important`},children:(0,R.jsxs)(a,{spacing:2.5,sx:{mt:1},children:[(0,R.jsx)(p,{label:`Project Name`,value:o,onChange:e=>s(e.target.value),fullWidth:!0,autoFocus:!0,placeholder:`my-project`,helperText:`Unique identifier for the project registry`}),(0,R.jsx)(p,{label:`Project Path`,value:c,onChange:e=>l(e.target.value),fullWidth:!0,placeholder:`/absolute/path/to/project`,helperText:`Absolute path to the monorepo root containing omnitron.config.ts`,slotProps:{input:{sx:{fontFamily:`monospace`,fontSize:14}}}})]})}),(0,R.jsxs)(w,{sx:{px:3,pb:2},children:[(0,R.jsx)(y,{onClick:t,color:`inherit`,children:`Cancel`}),(0,R.jsx)(y,{variant:`contained`,onClick:()=>n(o.trim(),c.trim()),disabled:!u||r,children:`Add Project`})]})]})}function U(){let e=x(e=>e.projects),t=x(e=>e.loading),r=x(e=>e.error),s=x(e=>e.clearError),c=x(e=>e.fetchProjects),u=x(e=>e.addProject),d=x(e=>e.updateProject),p=x(e=>e.removeProject),m=x(e=>e.selectProject),h=S(),{pathname:_}=D(),v=g(),[T,k]=(0,L.useState)(null),[N,P]=(0,L.useState)(!1),[I,B]=(0,L.useState)(null),[U,W]=(0,L.useState)(!1);O(()=>void c(),{intervalMs:15e3});let G=(0,L.useCallback)(e=>{let t=m(e,_);h(t)},[m,h,_]),K=(0,L.useCallback)(async(e,t)=>{W(!0);try{await u(e,t),P(!1),v.success(`Project "${e}" added`)}catch(e){v.error(e?.message??`Failed to add project`)}finally{W(!1)}},[u,v]),q=(0,L.useCallback)(async(e,t)=>{W(!0);try{await d(e,t),k(null),v.success(`Project "${e}" updated`)}catch(e){v.error(e?.message??`Failed to update project`)}finally{W(!1)}},[d,v]),J=(0,L.useCallback)(async()=>{if(I){W(!0);try{await p(I),v.success(`Project "${I}" removed`)}catch(e){v.error(e?.message??`Failed to remove project`)}finally{B(null),W(!1)}}},[I,p,v]),Y=e.find(e=>e.name===I);return(0,R.jsxs)(a,{spacing:3,children:[(0,R.jsx)(M,{links:[{name:`Projects`}],action:(0,R.jsxs)(a,{direction:`row`,spacing:1,children:[(0,R.jsx)(y,{variant:`outlined`,size:`small`,startIcon:(0,R.jsx)(f,{sx:{fontSize:18}}),onClick:()=>c(),children:`Refresh`}),(0,R.jsx)(y,{variant:`contained`,size:`small`,startIcon:(0,R.jsx)(l,{sx:{fontSize:18}}),onClick:()=>P(!0),children:`Add Project`})]})}),r&&(0,R.jsx)(F,{closable:!0,severity:`error`,onClose:s,children:r}),t&&e.length===0?(0,R.jsx)(n,{container:!0,spacing:3,children:[1,2,3].map(e=>(0,R.jsx)(n,{size:{xs:12,sm:6,md:4},children:(0,R.jsx)(o,{variant:`rounded`,height:260})},e))}):e.length===0?(0,R.jsx)(b,{sx:{flex:1,display:`flex`,alignItems:`center`,justifyContent:`center`,minHeight:300},children:(0,R.jsx)(C,{title:`No projects`,description:`Register your first project to get started. A project is a monorepo with omnitron.config.ts at the root.`})}):(0,R.jsx)(n,{container:!0,spacing:3,children:e.map(e=>(0,R.jsx)(n,{size:{xs:12,sm:6,md:4},children:(0,R.jsx)(z,{project:e,onEdit:k,onRemove:B,onOpen:G})},e.name))}),(0,R.jsx)(V,{open:!!T,onClose:()=>k(null),project:T,onSave:q,loading:U}),(0,R.jsx)(H,{open:N,onClose:()=>P(!1),onAdd:K,loading:U}),(0,R.jsxs)(E,{open:!!I,onClose:()=>B(null),maxWidth:`xs`,fullWidth:!0,children:[(0,R.jsx)(i,{children:`Remove Project`}),(0,R.jsxs)(A,{children:[(0,R.jsxs)(j,{variant:`body2`,children:[`Remove `,(0,R.jsx)(`strong`,{children:Y?.displayName??I}),` from the registry? This does not delete any files on disk.`]}),Y&&Y.runningStacks>0&&(0,R.jsxs)(F,{severity:`warning`,sx:{mt:2},children:[`This project has `,Y.runningStacks,` running stack(s). Stop them first.`]})]}),(0,R.jsxs)(w,{children:[(0,R.jsx)(y,{onClick:()=>B(null),color:`inherit`,children:`Cancel`}),(0,R.jsx)(y,{onClick:J,color:`error`,variant:`contained`,disabled:U||(Y?.runningStacks??0)>0,children:`Remove`})]})]})]})}export{U as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{t as e}from"./rolldown-runtime-XKyaHtl9.js";var t=e((e=>{var t=Symbol.for(`react.transitional.element`),n=Symbol.for(`react.portal`),r=Symbol.for(`react.fragment`),i=Symbol.for(`react.strict_mode`),a=Symbol.for(`react.profiler`),o=Symbol.for(`react.consumer`),s=Symbol.for(`react.context`),c=Symbol.for(`react.forward_ref`),l=Symbol.for(`react.suspense`),u=Symbol.for(`react.memo`),d=Symbol.for(`react.lazy`),f=Symbol.for(`react.activity`),p=Symbol.for(`react.view_transition`),m=Symbol.iterator;function h(e){return typeof e!=`object`||!e?null:(e=m&&e[m]||e[`@@iterator`],typeof e==`function`?e:null)}var g={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},_=Object.assign,v={};function y(e,t,n){this.props=e,this.context=t,this.refs=v,this.updater=n||g}y.prototype.isReactComponent={},y.prototype.setState=function(e,t){if(typeof e!=`object`&&typeof e!=`function`&&e!=null)throw Error(`takes an object of state variables to update or a function which returns an object of state variables.`);this.updater.enqueueSetState(this,e,t,`setState`)},y.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,`forceUpdate`)};function b(){}b.prototype=y.prototype;function x(e,t,n){this.props=e,this.context=t,this.refs=v,this.updater=n||g}var S=x.prototype=new b;S.constructor=x,_(S,y.prototype),S.isPureReactComponent=!0;var C=Array.isArray;function w(){}var T={H:null,A:null,T:null,S:null},E=Object.prototype.hasOwnProperty;function D(e,n,r){var i=r.ref;return{$$typeof:t,type:e,key:n,ref:i===void 0?null:i,props:r}}function O(e,t){return D(e.type,t,e.props)}function k(e){return typeof e==`object`&&!!e&&e.$$typeof===t}function A(e){var t={"=":`=0`,":":`=2`};return`$`+e.replace(/[=:]/g,function(e){return t[e]})}var j=/\/+/g;function M(e,t){return typeof e==`object`&&e&&e.key!=null?A(``+e.key):t.toString(36)}function N(e){switch(e.status){case`fulfilled`:return e.value;case`rejected`:throw e.reason;default:switch(typeof e.status==`string`?e.then(w,w):(e.status=`pending`,e.then(function(t){e.status===`pending`&&(e.status=`fulfilled`,e.value=t)},function(t){e.status===`pending`&&(e.status=`rejected`,e.reason=t)})),e.status){case`fulfilled`:return e.value;case`rejected`:throw e.reason}}throw e}function P(e,r,i,a,o){var s=typeof e;(s===`undefined`||s===`boolean`)&&(e=null);var c=!1;if(e===null)c=!0;else switch(s){case`bigint`:case`string`:case`number`:c=!0;break;case`object`:switch(e.$$typeof){case t:case n:c=!0;break;case d:return c=e._init,P(c(e._payload),r,i,a,o)}}if(c)return o=o(e),c=a===``?`.`+M(e,0):a,C(o)?(i=``,c!=null&&(i=c.replace(j,`$&/`)+`/`),P(o,r,i,``,function(e){return e})):o!=null&&(k(o)&&(o=O(o,i+(o.key==null||e&&e.key===o.key?``:(``+o.key).replace(j,`$&/`)+`/`)+c)),r.push(o)),1;c=0;var l=a===``?`.`:a+`:`;if(C(e))for(var u=0;u<e.length;u++)a=e[u],s=l+M(a,u),c+=P(a,r,i,s,o);else if(u=h(e),typeof u==`function`)for(e=u.call(e),u=0;!(a=e.next()).done;)a=a.value,s=l+M(a,u++),c+=P(a,r,i,s,o);else if(s===`object`){if(typeof e.then==`function`)return P(N(e),r,i,a,o);throw r=String(e),Error(`Objects are not valid as a React child (found: `+(r===`[object Object]`?`object with keys {`+Object.keys(e).join(`, `)+`}`:r)+`). If you meant to render a collection of children, use an array instead.`)}return c}function F(e,t,n){if(e==null)return e;var r=[],i=0;return P(e,r,``,``,function(e){return t.call(n,e,i++)}),r}function I(e){if(e._status===-1){var t=e._result,n=t();n.then(function(t){(e._status===0||e._status===-1)&&(e._status=1,e._result=t,n.status===void 0&&(n.status=`fulfilled`,n.value=t))},function(t){(e._status===0||e._status===-1)&&(e._status=2,e._result=t,n.status===void 0&&(n.status=`rejected`,n.reason=t))}),e._status===-1&&(e._status=0,e._result=n)}if(e._status===1)return e._result.default;throw e._result}var L=typeof reportError==`function`?reportError:function(e){if(typeof window==`object`&&typeof window.ErrorEvent==`function`){var t=new window.ErrorEvent(`error`,{bubbles:!0,cancelable:!0,message:typeof e==`object`&&e&&typeof e.message==`string`?String(e.message):String(e),error:e});if(!window.dispatchEvent(t))return}else if(typeof process==`object`&&typeof process.emit==`function`){process.emit(`uncaughtException`,e);return}console.error(e)};function R(e){var t=T.T,n={};n.types=t===null?null:t.types,T.T=n;try{var r=e(),i=T.S;i!==null&&i(n,r),typeof r==`object`&&r&&typeof r.then==`function`&&r.then(w,L)}catch(e){L(e)}finally{t!==null&&n.types!==null&&(t.types=n.types),T.T=t}}function z(e){var t=T.T;if(t!==null){var n=t.types;n===null?t.types=[e]:n.indexOf(e)===-1&&n.push(e)}else R(z.bind(null,e))}var B={map:F,forEach:function(e,t,n){F(e,function(){t.apply(this,arguments)},n)},count:function(e){var t=0;return F(e,function(){t++}),t},toArray:function(e){return F(e,function(e){return e})||[]},only:function(e){if(!k(e))throw Error(`React.Children.only expected to receive a single React element child.`);return e}};e.Activity=f,e.Children=B,e.Component=y,e.Fragment=r,e.Profiler=a,e.PureComponent=x,e.StrictMode=i,e.Suspense=l,e.ViewTransition=p,e.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE=T,e.__COMPILER_RUNTIME={__proto__:null,c:function(e){return T.H.useMemoCache(e)}},e.addTransitionType=z,e.cache=function(e){return function(){return e.apply(null,arguments)}},e.cacheSignal=function(){return null},e.cloneElement=function(e,t,n){if(e==null)throw Error(`The argument must be a React element, but you passed `+e+`.`);var r=_({},e.props),i=e.key;if(t!=null)for(a in t.key!==void 0&&(i=``+t.key),t)!E.call(t,a)||a===`key`||a===`__self`||a===`__source`||a===`ref`&&t.ref===void 0||(r[a]=t[a]);var a=arguments.length-2;if(a===1)r.children=n;else if(1<a){for(var o=Array(a),s=0;s<a;s++)o[s]=arguments[s+2];r.children=o}return D(e.type,i,r)},e.createContext=function(e){return e={$$typeof:s,_currentValue:e,_currentValue2:e,_threadCount:0,Provider:null,Consumer:null},e.Provider=e,e.Consumer={$$typeof:o,_context:e},e},e.createElement=function(e,t,n){var r,i={},a=null;if(t!=null)for(r in t.key!==void 0&&(a=``+t.key),t)E.call(t,r)&&r!==`key`&&r!==`__self`&&r!==`__source`&&(i[r]=t[r]);var o=arguments.length-2;if(o===1)i.children=n;else if(1<o){for(var s=Array(o),c=0;c<o;c++)s[c]=arguments[c+2];i.children=s}if(e&&e.defaultProps)for(r in o=e.defaultProps,o)i[r]===void 0&&(i[r]=o[r]);return D(e,a,i)},e.createRef=function(){return{current:null}},e.forwardRef=function(e){return{$$typeof:c,render:e}},e.isValidElement=k,e.lazy=function(e){return{$$typeof:d,_payload:{_status:-1,_result:e},_init:I}},e.memo=function(e,t){return{$$typeof:u,type:e,compare:t===void 0?null:t}},e.startTransition=R,e.unstable_useCacheRefresh=function(){return T.H.useCacheRefresh()},e.use=function(e){return T.H.use(e)},e.useActionState=function(e,t,n){return T.H.useActionState(e,t,n)},e.useCallback=function(e,t){return T.H.useCallback(e,t)},e.useContext=function(e){return T.H.useContext(e)},e.useDebugValue=function(){},e.useDeferredValue=function(e,t){return T.H.useDeferredValue(e,t)},e.useEffect=function(e,t){return T.H.useEffect(e,t)},e.useEffectEvent=function(e){return T.H.useEffectEvent(e)},e.useId=function(){return T.H.useId()},e.useImperativeHandle=function(e,t,n){return T.H.useImperativeHandle(e,t,n)},e.useInsertionEffect=function(e,t){return T.H.useInsertionEffect(e,t)},e.useLayoutEffect=function(e,t){return T.H.useLayoutEffect(e,t)},e.useMemo=function(e,t){return T.H.useMemo(e,t)},e.useOptimistic=function(e,t){return T.H.useOptimistic(e,t)},e.useReducer=function(e,t,n){return T.H.useReducer(e,t,n)},e.useRef=function(e){return T.H.useRef(e)},e.useState=function(e){return T.H.useState(e)},e.useSyncExternalStore=function(e,t,n){return T.H.useSyncExternalStore(e,t,n)},e.useTransition=function(){return T.H.useTransition()},e.version=`19.3.1`})),n=e(((e,n)=>{n.exports=t()}));export{n as t};
|