A container list that refreshes every five seconds is wrong for up to five seconds, and it costs the daemon a full list call per tab whether anything changed or not. FleetOps lists do not poll. They follow events.
One stream per environment, shared
Docker publishes an event stream: a container started, died, was renamed. FleetOps opens one events stream per environment and shares it among every browser tab looking at that environment. Ten people watching the same host cost the daemon one stream, not ten.
Each tab has one websocket to the server. It subscribes to topics on that socket: events, stats, logs, exec, task and, for Kubernetes, kube-watch. In the browser, an event patches the cached list directly, so the row changes in place without refetching anything.
Stats are reference-counted per container. Only rows on screen subscribe, and a container’s stats stream closes when the last viewer scrolls away.
Kubernetes works the same way with watch streams. A watch is shared between everyone viewing the same list and stops 30 seconds after the last viewer leaves. A viewer who arrives late gets a snapshot first, then changes.
When a reader falls behind
Every subscription has a bounded queue, and each topic has a rule for when it fills:
| Topic | When the queue is full |
|---|---|
| Events, stats | Drop the oldest items. Only the latest state matters. |
| Logs | Drop lines and send a gap message, which the viewer shows. |
| Terminal | Real backpressure. Keystrokes and output are never dropped. |
A slow tab never slows the server or the other tabs.
Saying when it is not live
Live by default only works if the page is honest when it is not. When the websocket drops, or a Kubernetes watch is refused, the page says so, with the reason and how old its data is. It never shows stale state as current. When the connection returns, lists resync and logs resume from where they stopped, without repeating lines.
That rule comes before speed. A list that might be wrong is worse during an incident than a list that tells you it is paused.