瀏覽代碼

[Web] Load all container states at once in debug.php

André 7 年之前
父節點
當前提交
4579124120
共有 2 個文件被更改,包括 27 次插入3 次删除
  1. 5 3
      data/web/debug.php
  2. 22 0
      data/web/inc/functions.docker.inc.php

+ 5 - 3
data/web/debug.php

@@ -83,14 +83,15 @@ $_SESSION['return_to'] = $_SERVER['REQUEST_URI'];
               'netfilter-mailcow',
               'clamd-mailcow'
             );
+            $container_states = (docker($container, 'states'));
             foreach ($container_array as $container) {
-                $container_stats = docker($container, 'info');
+                $container_state = $container_states[$container];
                 ?>
                 <li class="list-group-item">
                 <?=$container;?>
                 <?php
                 date_default_timezone_set('UTC');
-                $StartedAt = date_parse($container_stats['State']['StartedAt']);
+                $StartedAt = date_parse($container_state['StartedAt']);
                 if ($StartedAt['hour'] !== false) {
                   $date = new \DateTime();
                   $date->setTimestamp(mktime(
@@ -110,7 +111,7 @@ $_SESSION['return_to'] = $_SERVER['REQUEST_URI'];
                 ?>
                 <small>(Started on <?=$started;?>),
                 <a href data-toggle="modal" data-container="<?=$container;?>" data-target="#RestartContainer">Restart</a></small>
-                <span class="pull-right label label-<?=($container_stats !== false && !empty($container_stats)) ? (($container_stats['State']['Running'] == 1) ? 'success' : 'danger') : 'default'; ?>">&nbsp;&nbsp;&nbsp;</span>
+                <span class="pull-right label label-<?=($container_state !== false && !empty($container_state)) ? (($container_state['Running'] == 1) ? 'success' : 'danger') : 'default'; ?>">&nbsp;&nbsp;&nbsp;</span>
                 </li>
               <?php
               }
@@ -198,6 +199,7 @@ $_SESSION['return_to'] = $_SERVER['REQUEST_URI'];
               </div>
             </div>
             <div class="panel-body">
+              <div id="rspamd_donut" style="height:400px;width:100%; "></div>
               <div class="table-responsive">
                 <table class="table table-striped table-condensed log-table" id="rspamd_history"></table>
               </div>

+ 22 - 0
data/web/inc/functions.docker.inc.php

@@ -26,6 +26,28 @@ function docker($service_name, $action, $attr1 = null, $attr2 = null, $extra_hea
         }
       }
       return false;
+    case 'states':
+      curl_setopt($curl, CURLOPT_URL, 'http://dockerapi:8080/containers/json');
+      curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
+      curl_setopt($curl, CURLOPT_POST, 0);
+      curl_setopt($curl, CURLOPT_TIMEOUT, 10);
+      $response = curl_exec($curl);
+      if ($response === false) {
+        $err = curl_error($curl);
+        curl_close($curl);
+        return $err;
+      }
+      else {
+        curl_close($curl);
+        $containers = json_decode($response, true);
+        if (!empty($containers)) {
+          foreach ($containers as $container) {
+            $out[$container['Config']['Labels']['com.docker.compose.service']] = $container['State'];
+          }
+        }
+        return (!empty($out)) ? $out : false;
+      }
+      return false;
     break;
     case 'info':
       $container_id = docker($service_name, 'get_id');