-
fix(uplink): cross-site MAC-collision guards, liveness from metric batches; app-icon proxy
Release / frontend (push) Canceled after 0sRelease / linux (amd64) (push) Canceled after 0sRelease / linux (arm64) (push) Canceled after 0sRelease / windows (push) Canceled after 0sRelease / macos (push) Canceled after 0sRelease / release (push) Canceled after 0sBuild and Push Docker Image / build-and-push (push) Canceled after 0sreleased this
2026-06-12 00:15:19 +03:00 | 227 commits to main since this releaseDocker-bridge agents on different machines derive identical MACs
(02:42:… from equal bridge IPs), which broke three things on the hub:- a spoke's self-linked guest resolved to the HUB's own collector row
and attached a foreign hypervisor topology to it, while the real
guest row lost its parent (dokploy detaching from mika-pve); - the spoke node's own metric batches resolved to the hub's id=1 row
and were skipped as 'our own machine' — no stats, no applications; - nothing maintained last_seen for replicated hosts (CmdHostLastSeen
was never published), so remote cards stayed red while charts moved.
Fixes:
- UpsertConnectorHost: a remote-origin row never claims the local
collector row; topology equal to the incoming external_id is shed
(heals rows decorated before the guard); created rows fall back to a
stable synthetic LAA MAC when the real one is taken; - applyHostUpsert skips remote agents whose MAC equals our own row;
- applyMetricBatch resolves remote batches origin-first (MAC within
origin, then name) and bumps the host's last_seen — a host streaming
metrics is alive, cards go green without a heartbeat command; - hosts repo: GetHostByOriginAndName.
New: server-side application-icon resolver (GET /api/v1/app-icons/:slug)
— collapsed-name matching against the live selfh.st index
('nginxproxymanager' → 'nginx-proxy-manager', unique-prefix 'crafty' →
'crafty-controller'), CDN candidates fetched once, 24h in-memory cache- browser cache headers; the frontend now asks the backend instead of
hitting CDNs per client, keeping the favicon fallback.
Downloads
- a spoke's self-linked guest resolved to the HUB's own collector row