perf(deploy): flatten-session caching, bulk DeploySiteAsync, paged management queries

This commit is contained in:
Joseph Doherty
2026-08-14 21:14:22 -04:00
parent ee193cd2bb
commit 48b3c40a7f
59 changed files with 3051 additions and 231 deletions
+31
View File
@@ -952,6 +952,37 @@ scadabridge --url <url> deploy instance --id <int>
|--------|----------|-------------|
| `--id` | yes | Instance ID |
#### `deploy site`
Deploy **every deployable instance** at one site in a single batched operation.
Each instance keeps the full single-instance semantics — its own deployment ID and
revision hash, its own per-instance operation lock, its own optimistically-concurrent
status record, and the same query-before-redeploy idempotency check. The batch is
**not** all-or-nothing: an instance that cannot be deployed (wrong state, failed
validation, lock already held, site round-trip timed out) is reported as a failed row
and the rest proceed. Each failed instance is individually retryable with
`instance deploy --id`.
Site round-trips run with bounded concurrency
(`ScadaBridge:DeploymentManager:SiteDeploymentMaxParallelism`, default 4), each under
`SiteDeploymentTimeoutPerInstance` (default 120 s), so one wedged instance cannot stall
the batch. The client waits up to 5 minutes.
`--site-id` is **required** — unlike `deploy artifacts`, omitting it does not mean
fleet-wide.
```sh
scadabridge --url <url> deploy site --site-id <int>
```
| Option | Required | Description |
|--------|----------|-------------|
| `--site-id` | yes | Target site ID. A site-scoped (non-Administrator) Deployer must supply an in-scope site. |
Output is a per-instance result matrix (`instanceId`, `uniqueName`, `deploymentId`,
`success`, `errorMessage`) plus `successCount` / `failureCount`.
#### `deploy artifacts`
Deploy compiled artifacts to one or all sites (same as `site deploy-artifacts`).