Provisioning | Electric Cherry
{#snippet actions()}
Fleet actions
{#if active.some(row => row.canCancel)}{/if}
{/snippet}
{#if $page.url.searchParams.has('returnTo')}{/if}
saveContext(true)} ariaLabel="Provisioning views" idPrefix="deployment-tabs" panelId="deployment-panel" />
{#if filtered}{/if}
{ housePartyNotice = `Destruction queued for ${count} server${count === 1 ? '' : 's'}.`; tab = 'active'; clearFilters(); void load(); }} /> {#if housePartyNotice}

{housePartyNotice}

{/if} {#if cancellationNotice}

{cancellationNotice}

{/if}
{#if error}{/if}
{#if tab === 'active'}

{filtered ? `${visibleActive.length} of ${active.length}` : active.length} active{#if queueSummary} · {queueSummary}{/if}

{:else}

History {historyTotal}

{/if}
{#if needsReview}{/if} {#if tab === 'active'}{error ? 'Updates interrupted' : 'Updates every 5s'} {:else}{historyUpdatedAt ? `Updated ${age(historyUpdatedAt).toLowerCase()}` : ''}{/if}
{#if tab === 'active'} {#if loading}

Loading provisioning activity…

{:else if !visibleActive.length} {:else}{@render operationTable(visibleActive)}{/if} {:else} {#if historyError}{/if} {#if historyLoading}

Loading provisioning history…

{:else if !historyError && !history.length} {:else}{@render operationTable(history)}{/if} {/if}
{#snippet operationTable(rows: Deployment[])}
{#each rows as row (row.id)} {@const status = provisioningQueueStatus(row)} {@const primarySource = row.sources?.[0]} {@const operationHref = contextHref(`/provisioning/${encodeURIComponent(row.id)}`, $page.url)} {@const isExpanded = expanded[row.id] ?? false} {/each}
ServerOperationStatusSourceStartedDetails
{actionLabels[row.action]} {status.label}{#if ['queued','waiting'].includes(status.group) && row.phaseStartedAt && now - Date.parse(row.phaseStartedAt) >= 600000}In this stage {elapsedTime(row.phaseStartedAt, now)}{/if} {#if primarySource?.href}{primarySource.label}{:else}{primarySource?.label ?? (row.triggered_by === 'ui' ? 'Manual' : 'System')}{/if}{#if (row.sources?.length ?? 0) > 1}+{row.sources!.length - 1} more{/if}
{/snippet}