feat(web-ui): show decky IP on SwarmDeckies, drop compose-hash column

Operators want to know what address to poke when triaging a swarm decky;
the compose-hash column was debug scaffolding that never paid off.

DeckyShard has no IP column (the deploy-time IP lives on DecnetConfig),
so the list endpoint resolves it at read time by joining shards against
the stored deployment state by decky_name. Missing lookups render as "—"
rather than erroring — the list stays useful even after a master restart
that hasn't persisted a config yet.
This commit is contained in:
2026-04-19 19:48:27 -04:00
parent 585541016f
commit e8e11b2896
3 changed files with 14 additions and 2 deletions

View File

@@ -6,6 +6,7 @@ import { Boxes, PowerOff, RefreshCw } from 'lucide-react';
interface DeckyShard {
decky_name: string;
decky_ip: string | null;
host_uuid: string;
host_name: string;
host_address: string;
@@ -87,9 +88,9 @@ const SwarmDeckies: React.FC = () => {
<thead>
<tr>
<th>Decky</th>
<th>IP</th>
<th>State</th>
<th>Services</th>
<th>Compose</th>
<th>Updated</th>
<th></th>
</tr>
@@ -98,9 +99,9 @@ const SwarmDeckies: React.FC = () => {
{h.shards.map((s) => (
<tr key={`${uuid}-${s.decky_name}`}>
<td>{s.decky_name}</td>
<td><code>{s.decky_ip || '—'}</code></td>
<td>{s.state}{s.last_error ? `${s.last_error}` : ''}</td>
<td>{s.services.join(', ')}</td>
<td><code>{s.compose_hash ? s.compose_hash.slice(0, 8) : '—'}</code></td>
<td>{new Date(s.updated_at).toLocaleString()}</td>
<td>
<button