Servers · Electric Cherry
{#if canOperate}{/if}
{announcement}
{#if canOperate}{/if} {#if $fleetError} {/if} {#if servers.length}
{healthy.length ? players : '—'} {plural(players, 'player')} · {liveCount} live {plural(liveCount, 'match', 'matches')} {healthy.length}/{servers.length} healthy {#if campaigns}{campaigns} active {campaigns === 1 ? 'campaign' : 'campaigns'}{/if} {$fleetError ? 'Reconnecting…' : `Live · updated ${snapshotAge < 60 ? `${snapshotAge} s` : `${Math.floor(snapshotAge / 60)} min`} ago`}
{/if} {#if integrations?.native && !integrations.hostsReady}
Prepare a game host · Connect a host, prepare its runtime, and download game files.Review hosts →
{/if} {#if servers.length === 0} {#snippet actions()}{#if canOperate}{/if}{/snippet} {:else} {#if view === 'cards' && problems.length}

Needs attention {problems.length}

{#each problems as server (server.name)} {@const status = serverHealth(server, observationNow())} {@const operation = attentionOperations.find(item => item.server === server.name)} {@const operationIssue = operation && status.state === 'online'} {@const actionLabel = operationIssue ? 'Review operation' : status.actionLabel}

{operationIssue ? operation.label : status.reason}{operationIssue ? operation.label : status.shortReason}{#if status.since} · Evidence {elapsedSince(status.since, $uiNow)} ago{/if}

{actionLabel}
{/each}
{/if}
{#if viewOptionsOpen}
{/if}
{#each filters as item} {@const count = servers.filter(server => matchesView(server, '', item.id)).length} {/each}
{#if query || filter !== 'all' || game}{/if}
{#if filtered.length === 0} {#snippet actions()}{/snippet} {/if} {#if view === 'cards'} {#each sections as section (section.title)}

{section.title} {section.servers.length}

{#each grouped(section.servers) as [key, group] (key)} {#if group.title}

{group.title}

{#if canOperate && group.launch}{/if}
{/if}
{#each group.servers as server (server.name)}
togglePin(server.name)} longestMatch={spotlight?.name === server.name} mapLabelOverride={fleetIdentity(server).map} /> {@render serverOperations(server)}
{/each}
{/each}
{/each} {:else if filtered.length}
{#each groups as [key, group] (key)} {#if group.title}{/if} {#each group.servers as server (server.name)} {@const round = currentRound(server, $telemetryByServer.get(server.name), observationNow())} {/each} {/each}
Fleet servers
ServerStatusPlayersRoundMatch timeOperationPin
{group.title} · {group.servers.length} {group.servers.length === 1 ? 'server' : 'servers'}
{freshServer(server, observationNow()) ? server.last_players ?? '—' : '—'} {round ?? '—'}{matchDuration(server) >= 0 ? elapsedSince(server.game_started_at, $uiNow) : '—'} {@render serverOperations(server)}
{/if} {/if}
{#snippet serverOperations(server: FleetServer)} {@const operations = activeOperations.filter(op => op.server === server.name)} {#if operations.length}
{#each operations as operation (operation.key)} {operation.label} → {/each}
{/if} {/snippet}