- Fix dashboard metrics alternating to 0 by merging partial batches
in gateway before broadcasting to WebSocket clients. The aggregator
sends metrics in batches of 20, causing partial updates that
overwrote each other. Gateway now maintains machine_metrics_cache
that accumulates metrics across batches.
- Remove misleading gRPC calls counter from internals page (only
incremented on health checks, not actual metric flow). Replace
with cached_machines counter showing tracked machines.
- Update internals.html stats panel to show Events, Broadcasts,
Clients, and Machines instead of gRPC calls.