diff --git a/plugins/dynamix.docker.manager/DockerContainers.page b/plugins/dynamix.docker.manager/DockerContainers.page
index 11337c7e8..6686db52d 100644
--- a/plugins/dynamix.docker.manager/DockerContainers.page
+++ b/plugins/dynamix.docker.manager/DockerContainers.page
@@ -17,6 +17,9 @@ Markdown="false"
* all copies or substantial portions of the Software.
*/
?>
+
+if (!exec("pgrep docker_load")) exec("$docroot/plugins/dynamix.docker.manager/scripts/docker_load >/dev/null 2>&1 &");
+?>
@@ -42,8 +46,8 @@ tbody > tr.sortable:hover{cursor:move}
- | Application | Version | Network | Port Mappings (App to Host) | Volume Mappings (App to Host) | Autostart | Log |
- |
+ | Application | Version | Network | Port Mappings (App to Host) | Volume Mappings (App to Host) | CPU load | Memory load | Autostart | Log |
+ |
@@ -112,6 +116,15 @@ function loadlist(update) {
if (!update) $('input#updateAll').hide();
});
}
+var watchDocker = new NchanSubscriber('/sub/dockerload', /^((?!chrome|android).)*safari/i.test(navigator.userAgent) ? {subscriber:'longpoll'} : {});
+watchDocker.on('message', function(data) {
+ data = data.split('\n');
+ for (var i=0,row; row=data[i]; i++) {
+ var id = row.split(' ');
+ $('#cpu-'+id[0]).css('width',id[1]).text(id[1].replace('.','=$display['number'][0]?>'));
+ $('#mem-'+id[0]).css('width',id[2]).text(id[2].replace('.','=$display['number'][0]?>'));
+ }
+});
$(function() {
$('.advancedview').switchButton({labels_placement:'left', on_label:'Advanced View', off_label:'Basic View', checked:$.cookie('docker_listview_mode')=='advanced'});
$('.advancedview').change(function() {
@@ -121,5 +134,6 @@ $(function() {
listview();
});
$.post('/plugins/dynamix.docker.manager/include/DockerUpdate.php',{},function(u){loadlist(u);});
+ watchDocker.start();
});
diff --git a/plugins/dynamix.docker.manager/include/DockerContainers.php b/plugins/dynamix.docker.manager/include/DockerContainers.php
index 49cb5495b..0f51dee7f 100644
--- a/plugins/dynamix.docker.manager/include/DockerContainers.php
+++ b/plugins/dynamix.docker.manager/include/DockerContainers.php
@@ -39,7 +39,6 @@ $docker = ['var docker=[];'];
$null = '0.0.0.0';
$menu = [];
-$n = 0;
foreach ($containers as $ct) {
$name = $ct['Name'];
$id = $ct['Id'];
@@ -49,10 +48,11 @@ foreach ($containers as $ct) {
$is_autostart = $info['autostart'] ? 'true':'false';
$updateStatus = $info['updated']=='true'||$info['updated']=='undef' ? 'true':'false';
$template = $info['template'];
+ $shell = $info['shell'];
$webGui = html_entity_decode($info['url']);
$support = html_entity_decode($info['Support']);
$project = html_entity_decode($info['Project']);
- $menu[] = sprintf("addDockerContainerContext('%s','%s','%s',%s,%s,%s,%s,'%s','%s','%s','%s');", addslashes($name), addslashes($ct['ImageId']), addslashes($template), $running, $paused, $updateStatus, $is_autostart, addslashes($webGui), $id, addslashes($support), addslashes($project));
+ $menu[] = sprintf("addDockerContainerContext('%s','%s','%s',%s,%s,%s,%s,'%s','%s','%s','%s','%s');", addslashes($name), addslashes($ct['ImageId']), addslashes($template), $running, $paused, $updateStatus, $is_autostart, addslashes($webGui), $shell, $id, addslashes($support), addslashes($project));
$docker[] = "docker.push({name:'$name',id:'$id',state:$running,pause:$paused,update:'$updateStatus'});";
$shape = $running ? ($paused ? 'pause' : 'play') : 'square';
$status = $running ? ($paused ? 'paused' : 'started') : 'stopped';
@@ -100,6 +100,8 @@ foreach ($containers as $ct) {
echo "{$ct['NetworkMode']} | ";
echo "".implode(' ',$ports)." | ";
echo "".implode(' ',$paths)." | ";
+ echo "- | ";
+ echo "- | ";
echo " | ";
echo " ";
echo htmlspecialchars(str_replace('Up','Uptime',$ct['Status']))." Created ".htmlspecialchars($ct['Created'])." | ";
@@ -115,7 +117,7 @@ foreach ($images as $image) {
echo "";
echo "(orphan image) Image ID: $id ";
echo "".implode(' ',array_map('htmlspecialchars',$image['Tags']))." | ";
- echo " | ";
+ echo " | ";
echo "Created ".htmlspecialchars($image['Created'])." | ";
}
echo "\0".implode($menu).implode($docker);
diff --git a/plugins/dynamix.docker.manager/scripts/docker_load b/plugins/dynamix.docker.manager/scripts/docker_load
new file mode 100644
index 000000000..46045d301
--- /dev/null
+++ b/plugins/dynamix.docker.manager/scripts/docker_load
@@ -0,0 +1,6 @@
+#!/bin/bash
+
+while :; do
+ curl --data "$(docker stats --no-stream --format='{{.Container}} {{.CPUPerc}} {{.MemPerc}}')" --unix-socket /var/run/nginx.socket http://localhost/pub/dockerload?buffer_length=0 >/dev/null 2>&1
+ sleep 1
+done &