App Dev · · 4 min read
NetLay: Sixty VMs and one card
Groups worked beautifully until the first real server farm went into one, which needed two fixes, stop counting things twice and stop drawing lists nobody reads.
The card that ate the map#
Groups from post fourteen worked exactly as intended on my own network, which has reception desks with three PCs on them.
Then somebody put a real server farm in one.
"a Server with 60+ VMS attached and each VM is also part of the group when you stack the group it is huge. Whats the best approach"
Sixty one rows. A card taller than the screen, scrolling off both ends, with the rest of the map hiding behind it. A feature designed to reduce clutter producing the worst clutter in the application.
There were two separate problems in there, which took me a while to separate.
Counting the same thing twice.#
The first is conceptual. If a server is in a group, and sixty virtual machines live on that server, are those machines in the group?
They are, obviously, in the sense that matters. But they are not separate members, they are consequences of one member being there. Adding each one individually is the user doing bookkeeping on behalf of the data model, which is always a sign the model is wrong.
So membership is inherited now. A hosted device, which means a virtual machine, a container or a wireless client, belongs to whatever group its host belongs to. The host is the member. Its guests come along.
That rippled further than I expected. Working out which group something is effectively in, deciding which nodes to hide when a card collapses, the member list in the inspector, and the picker for adding a device to a group all had to understand the difference between a direct member and an inherited one. The inspector now says how many hosted devices belong through their host, and a virtual machine's own inspector tells you it is in the group through its host and does not need adding separately.
There was a follow up the next day, because of course the opposite case exists. Virtual machines in a group whose host is not in it. A collapsed card can only list things that have a position on the map, and a VM does not have one of its own, so the host appears as a dashed stand in row with a badge saying how many of its guests are in the group. Making a group out of nothing but virtual machines now puts the card on their hosts rather than at the top left corner of the map, which is where it went the first time I tried it.
Rows for exceptions, dots for the rest.#
The second problem is simply that sixty of anything is too many to list.
Up to eight members, it still draws rows, because a short list is readable and useful.
Past that, it changes shape. One summary line saying sixty devices, fifty eight up, one down, one degraded. Then a full row for every device that is down, degraded, slow or very slow, because those are the ones you need names for. Then the healthy ones become a grid of status dots, twelve to a line, which you can hover for the name, address and status, or click to select.

Host cards got exactly the same treatment, because a server with thirty virtual machines had this problem before groups existed and I had been quietly tolerating it. A host row inside a group card now carries its own small badge, sixty, or sixty with two down.
What I turned down.#
Two obvious options did not survive.
Scrolling inside the card fights the map. The wheel is already zoom, and a scrollable region inside a pan and zoom canvas is a trap that makes people lose their place.
Paging through members hides the thing you need, because the one device that is broken has a two in three chance of being on a page you are not looking at.
The principle I settled on, and which I would apply again, is that the map's job is to show what needs attention. The full list of sixty machines already exists in two other places, the inspector and the search box, and neither of them is fighting for pixels. A card on the map should say everything is fine except these two, and let you go elsewhere for the rest.
Next time, a diagram you can read like a document.