AdityaGupta1 / mobycraft

A Minecraft client-side mod to manage and visualize Docker containers in Minecraft
Apache License 2.0
35 stars 7 forks source link

need to speed up docker container refresh #68

Closed aspyker closed 8 years ago

aspyker commented 8 years ago

and saw: [00:50:39] [Server thread/INFO] [STDOUT]: [org.redfrog404.mobycraft.commands.dockerjava.MainCommand:onTick:317]: about to redraw containers [00:50:40] [Server thread/INFO] [STDOUT]: [org.redfrog404.mobycraft.commands.dockerjava.MainCommand:onTick:325]: after redrawing containers [00:50:42] [Server thread/INFO] [STDOUT]: [org.redfrog404.mobycraft.commands.dockerjava.MainCommand:onTick:317]: about to redraw containers [00:50:43] [Server thread/INFO] [STDOUT]: [org.redfrog404.mobycraft.commands.dockerjava.MainCommand:onTick:325]: after redrawing containers [00:50:44] [Server thread/INFO] [STDOUT]: [org.redfrog404.mobycraft.commands.dockerjava.MainCommand:onTick:317]: about to redraw containers [00:50:45] [Server thread/INFO] [STDOUT]: [org.redfrog404.mobycraft.commands.dockerjava.MainCommand:onTick:325]: after redrawing containers [00:50:47] [Server thread/INFO] [STDOUT]: [org.redfrog404.mobycraft.commands.dockerjava.MainCommand:onTick:317]: about to redraw containers [00:50:48] [Server thread/INFO] [STDOUT]: [org.redfrog404.mobycraft.commands.dockerjava.MainCommand:onTick:325]: after redrawing containers [00:50:49] [Server thread/INFO] [STDOUT]: [org.redfrog404.mobycraft.commands.dockerjava.MainCommand:onTick:317]: about to redraw containers [00:50:50] [Server thread/INFO] [STDOUT]: [org.redfrog404.mobycraft.commands.dockerjava.MainCommand:onTick:325]: after redrawing containers [00:50:52] [Server thread/INFO] [STDOUT]: [org.redfrog404.mobycraft.commands.dockerjava.MainCommand:onTick:317]: about to redraw containers [00:50:53] [Server thread/INFO] [STDOUT]: [org.redfrog404.mobycraft.commands.dockerjava.MainCommand:onTick:325]: after redrawing containers [00:50:54] [Server thread/INFO] [STDOUT]: [org.redfrog404.mobycraft.commands.dockerjava.MainCommand:onTick:317]: about to redraw containers [00:50:55] [Server thread/INFO] [STDOUT]: [org.redfrog404.mobycraft.commands.dockerjava.MainCommand:onTick:325]: after redrawing containers [00:50:57] [Server thread/INFO] [STDOUT]: [org.redfrog404.mobycraft.commands.dockerjava.MainCommand:onTick:317]: about to redraw containers [00:50:58] [Server thread/INFO] [STDOUT]: [org.redfrog404.mobycraft.commands.dockerjava.MainCommand:onTick:325]: after redrawing containers

aspyker commented 8 years ago

looks like most of the time is spent querying the state of the containers:

    System.out.println("about to start query for stopped");
    for (BoxContainer container : boxContainers) {
        if (MobycraftCommandsFactory.getInstance().getListCommands().isStopped(container.getName())) {
            container.setState(false);
        }
    }
    System.out.println("just ended query for stopped");

Yields:

[01:14:34] [Server thread/INFO] [STDOUT]: [org.redfrog404.mobycraft.commands.dockerjava.MainCommand:onTick:317]: about to redraw containers [01:14:34] [Server thread/INFO] [STDOUT]: [org.redfrog404.mobycraft.utils.StructureBuilder:containerPanel:214]: about to start query for stopped [01:14:36] [Server thread/INFO] [STDOUT]: [org.redfrog404.mobycraft.utils.StructureBuilder:containerPanel:220]: just ended query for stopped [01:14:36] [Server thread/INFO] [STDOUT]: [org.redfrog404.mobycraft.commands.dockerjava.MainCommand:onTick:325]: after redrawing containers [01:14:37] [Server thread/INFO] [STDOUT]: [org.redfrog404.mobycraft.commands.dockerjava.MainCommand:onTick:317]: about to redraw containers [01:14:37] [Server thread/INFO] [STDOUT]: [org.redfrog404.mobycraft.utils.StructureBuilder:containerPanel:214]: about to start query for stopped [01:14:38] [Server thread/INFO] [STDOUT]: [org.redfrog404.mobycraft.utils.StructureBuilder:containerPanel:220]: just ended query for stopped [01:14:38] [Server thread/INFO] [STDOUT]: [org.redfrog404.mobycraft.commands.dockerjava.MainCommand:onTick:325]: after redrawing containers [01:14:39] [Server thread/INFO] [STDOUT]: [org.redfrog404.mobycraft.commands.dockerjava.MainCommand:onTick:317]: about to redraw containers [01:14:39] [Server thread/INFO] [STDOUT]: [org.redfrog404.mobycraft.utils.StructureBuilder:containerPanel:214]: about to start query for stopped [01:14:40] [Server thread/INFO] [STDOUT]: [org.redfrog404.mobycraft.utils.StructureBuilder:containerPanel:220]: just ended query for stopped [01:14:40] [Server thread/INFO] [STDOUT]: [org.redfrog404.mobycraft.commands.dockerjava.MainCommand:onTick:325]: after redrawing containers [01:14:42] [Server thread/INFO] [STDOUT]: [org.redfrog404.mobycraft.commands.dockerjava.MainCommand:onTick:317]: about to redraw containers [01:14:42] [Server thread/INFO] [STDOUT]: [org.redfrog404.mobycraft.utils.StructureBuilder:containerPanel:214]: about to start query for stopped [01:14:43] [Server thread/INFO] [STDOUT]: [org.redfrog404.mobycraft.utils.StructureBuilder:containerPanel:220]: just ended query for stopped [01:14:43] [Server thread/INFO] [STDOUT]: [org.redfrog404.mobycraft.commands.dockerjava.MainCommand:onTick:325]: after redrawing containers

marcuslinke commented 8 years ago

@AdityaGupta1 For me it seems to be an overhead to request the list of containers for each boxContainer. So probably it would be better to request list of containers once and iterate over the result or use inspect container call within the boxContainers loop.

Please note that the list containers response from docker may contain a huge amount of container data. It may include even non-running containers also.

marcuslinke commented 8 years ago

Btw. I think the most efficient way of keeping track of the containers state would be via the docker events API. See https://github.com/docker-java/docker-java/wiki#handle-events. Not sure if this would be possible in your use case.

AdityaGupta1 commented 8 years ago

Thanks @marcuslinke for pointing out the error. It really helped reduce lag time.

@aspyker give this a shot.

aspyker commented 8 years ago

Looks much better @AdityaGupta1