From 38b64dda38c76fa11424cba8ed012cd94a56362e Mon Sep 17 00:00:00 2001 From: "Danilo M." Date: Thu, 22 Oct 2026 11:18:54 +0200 Subject: vm: show docker containers beside the VMs Docker.qml mirrors Virsh: the docker CLI, an event stream that runs for the whole session, and `docker stats --no-stream` on the 2s timer only while the page is up. Containers are grouped by compose project, since a stack is a dozen containers that start and stop together; a container outside any project is a group of one. Verbs are start, stop, restart and resume, by container id, so no compose file is needed and nothing removes a container. The event stream is filtered to lifecycle events: health checks emit exec_* events every few seconds per container, which would make the stream a poll. It dies with the daemon, so it is retried every 10s. An inactive Loader keeps its last height and a Column still reserves it, so collapsing one card left an empty box where its detail had been. Both the container and VM detail loaders now hide while inactive; the VM one had the same bug, unseen with a single VM. Co-Authored-By: Claude Opus 5.5 --- desktop/modules/vm/README.md | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) (limited to 'desktop/modules/vm/README.md') diff --git a/desktop/modules/vm/README.md b/desktop/modules/vm/README.md index 43a3271..1f8481e 100644 --- a/desktop/modules/vm/README.md +++ b/desktop/modules/vm/README.md @@ -78,6 +78,23 @@ is constructed: `Virsh.sampling` follows the page, set in the page's lazily loaded, so a closed page costs one idle process waiting on an event socket. +## Containers + +Docker containers sit below the VMs, in `Docker.qml`, built the same way: +the docker CLI, `docker events` running for the whole session, and `docker +stats --no-stream` on the 2s timer only while the page is up. They are +grouped by `com.docker.compose.project`, since a compose stack is a dozen +containers that start and stop together; a container outside a project is a +group of one. The card dot is green when the whole group runs, yellow when +part of it does. CPU is docker's own figure, 100% per core. + +The event stream is filtered to lifecycle events: health checks emit +`exec_*` events every few seconds per container, which unfiltered would +turn the stream into a poll. It dies with the daemon, so it is retried every +10s. Verbs are start, stop, restart and resume, per container or for the +whole group by id, so no compose file is needed; nothing removes a +container. + ## Two things that bite **A config with no visible window exits.** The drawer is closed most of the -- cgit v1.2.3