Index: trunk/ippMonitor/raw/storage.php
===================================================================
--- trunk/ippMonitor/raw/storage.php	(revision 42276)
+++ trunk/ippMonitor/raw/storage.php	(revision 42736)
@@ -23,5 +23,5 @@
 echo "<table border=\"0\">";
 echo "<tr>";
-echo "  <td style=width:1000px>";
+echo "  <td style=width:1200px>";
 echo "  <h1 align=\"middle\">Storage status</h1>";
 # storage timeseries
@@ -42,5 +42,4 @@
 /////////////////////////////////////////////////////////////////////////////
 
-
 ###########################################################################
 #
@@ -49,14 +48,9 @@
 ###########################################################################
 function getHosts($db) {
-    // timer start
-    $time = microtime();
-    $time = explode(' ', $time);
-    $time = $time[1] + $time[0];
-    $start = $time;
-
-    #echo "<script type=\"text/javascript\" src=\"https://www.gstatic.com/charts/loader.js\"></script>";
+    $start = microtime(true);
+
     echo "<script type=\"text/javascript\" src=\"loader.js\"></script>";
-    echo "<br><div class=\"chartWithOverlay\" style=\"position: relative; width: 640px\">"; 
-    echo "  <div id=\"disk_div\" style=\"width:1000px; height:1600px\"></div>";
+    echo "<br><div class=\"chartWithOverlay\" style=\"position: relative; width: 100%\">";
+    echo "  <div id=\"disk_div\" style=\"width:100%; height:4000px\"></div>";
     echo "  <div class=\"overlay\" style=\"position: absolute; width: 100px; top: 50px; right: 20px;\">";
     echo "    <div style=\"font-size: 12px; height: 14px; border: 1px solid; background-color: #00ff00\"><center>Free</div>";
@@ -68,88 +62,84 @@
     echo "</div>";
 
-    echo "<script type=\"text/javascript\">";
-    echo "google.charts.load('current', {packages: ['corechart', 'bar']});";
-    echo "google.charts.setOnLoadCallback(drawBarColors);";
-    echo "function drawBarColors() {";
-    echo "  var data = google.visualization.arrayToDataTable([";
-    echo "    ['Host', ";
-    echo "     'used', {type: 'string', role: 'style'}, {type: 'string', role: 'tooltip', 'p': {'html': true}}, ";
-    echo "     'free', {type: 'string', role: 'style'}, {type: 'string', role: 'tooltip', 'p': {'html': true}}],";
-
-    $sql = "SELECT host, format(total,1), format(available,2), format(used,2), writable, readable, format(used/total*100,2) FROM hosts order by host";
-    if ($debug) {echo "$sql<br>";}
+    // Set environment variables
+    putenv("PATH=/usr/local/bin:/usr/bin:/bin:/data/ippc65.0/ipp/src/psconfig//ipp-20210708-gentoo.lin64/bin");
+    putenv("PERL5LIB=/data/ippc65.0/ipp/src/psconfig//ipp-20210708-gentoo.lin64/lib");
+
+    $hostnoteall = array();
+    exec("neb-host |cut -b 17-30,86-", $hostnoteall);
+
+    $sql = "SELECT host, format(total, 2), format(available, 2), format(used, 2), writable, readable, format(used/total*100,3) as ratio 
+            FROM hosts 
+            ORDER BY host";
     $qry = $db->query($sql);
-    if (dberror($qry)) {echo "<b>error with $sql </b><br>\n";}
-    # not sure why neb-host doesn't work on ipp113 CCL.20210216
-    exec("neb-host |cut -b 17-30,86-", $hostnoteall);
+
+    if ($qry === false) {
+        echo "<b>Error with SQL query</b><br>";
+        return;
+    }
+
+    $dataRows = array();
     while ($qry->fetchInto($row)) {
-        list($host, $total, $available, $used, $writable, $readable, $ratio) = $row;
-       $hostnotes = preg_grep("/$host/", $hostnoteall);
-       $hostnote = array_values($hostnotes);
-       if ($writable == 1 && $readable == 1) {
-          if ($ratio >= 97) {
-            # space used over limits, up mode (read/write ok).
-            echo "[ \"$host\", ";
-            echo "      $used, \"stroke-width: 0.3;\"+\"stroke-color: black;\"+\"color: #ff0000;\", \"<i><b>$host: $ratio% of $total TB used</b></i><br>$hostnote[0]\", ";
-            echo " $available, \"stroke-width: 0.3;\"+\"stroke-color: black;\"+\"color: #00ff00;\", \"<i><b>$host: $available TB free</b></i>\"],";
-          }
-          else {
-            # enough space, up mode (read/write ok).
-            echo "[ \"$host\", ";
-            echo "      $used, \"stroke-width: 0.3;\"+\"stroke-color: black;\"+\"color: #ffff00;\", \"<i><b>$host: $ratio% of $total TB used</b></i><br>$hostnote[0]\", ";
-            echo " $available, \"stroke-width: 0.3;\"+\"stroke-color: black;\"+\"color: #00ff00;\", \"<i><b>$host: $available TB free</b></i>\"],";
-         }
-       }
-       else if ($writable == 0 && $readable == 1) {
-          if ($ratio >= 97) {
-            # space used over limits, repair mode (read only).
-            echo "[ \"$host\", ";
-            echo "      $used, \"stroke-width: 0.3;\"+\"stroke-color: black;\"+\"color: #ff0000;\", \"<i><b>$host: $ratio% of $total TB used<br><font color=red>$hostnote[0]\", ";
-            echo " $available, \"stroke-width: 0.3;\"+\"stroke-color: black;\"+\"color: #bbbbbb;\", \"<i><b>$host: $available TB free</b></i>\"],";
-          }
-          else {
-            # enough space, but hosts are unstable, repair mode (read only).
-            echo "[ \"$host\", ";
-            echo "      $used, \"stroke-width: 0.3;\"+\"stroke-color: black;\"+\"color: #ffff00;\", \"<i><b>$host: $ratio% of $total TB used<br>$hostnote[0]\", ";
-            echo " $available, \"stroke-width: 0.3;\"+\"stroke-color: black;\"+\"color: #bbbbbb;\", \"<i><b>$host: $available TB free</b></i>\"],";
-          }
-       }
-       else {
-            # down mode (can't read or write).
-            echo "[ \"$host\", ";
-            echo "      $used, \"stroke-width: 0.3;\"+\"stroke-color: black;\"+\"color: #bbbbbb;\", \"<i><b>$host: $ratio% used<br>$hostnote[0]\", ";
-            echo " $available, \"stroke-width: 0.3;\"+\"stroke-color: black;\"+\"color: #bbbbbb;\", \"<i><b>$host: $available TB free</b></i>\"],";
-       }
+        // Access data using numeric indices
+        $host = $row[0]; // ipp071.0
+        $total = $row[1]; // 80.0352
+        $available = $row[2]; // 10.8096
+        $used = $row[3]; // 69.2256
+        $writable = $row[4]; // 0
+        $readable = $row[5]; // 1
+        $ratio = $row[6]; // 86.493950215116
+
+        $hostnotes = preg_grep("/$host/", $hostnoteall);
+        $hostnote = reset($hostnotes);
+
+        $styles = "stroke-width: 0.5; stroke-color: black;";
+        if ($writable == 1 && $readable == 1) {
+            $usedColor = $ratio >= 97 ? "#ff0000" : "#ffff00";
+            $freeColor = "#00ff00";
+        } elseif ($writable == 0 && $readable == 1) {
+            $usedColor = $ratio >= 97 ? "#ff0000" : "#ffff00";
+            $freeColor = "#bbbbbb";
+        } else {
+            $usedColor = $freeColor = "#bbbbbb";
+        }
+
+        $dataRows[] = "[ \"$host\", $used, \"$styles color: $usedColor;\", \"$host: $ratio% of $total TB used<br>$hostnote\", 
+                       $available, \"$styles color: $freeColor;\", \"$host: $available TB free\"]";
     }
-   echo "  ]);";
-   echo "   var options = {";
-   echo "     title: 'Nebulous Disk Use across IPP Clusters',";
-   echo "     titleTextStyle: {color: 'black', fontSize: 15},";
-   echo "     width: '100%',";
-   echo "     height: '100%',";
-   echo "     tooltip: {isHtml: true},";
-   echo "     legend: { position: 'none',";
-   echo "               alignment: 'end',";
-   echo "               maxLines: 3},";
-   echo "     hAxis: {  title: 'Space (TB)',";
-   echo "               gridlines: {count: 10}";
-   echo "     },";
-   echo "     bar: { groupWidth: '95%' },";
-   echo "     chartArea: {left:70, top:30, right:20, bottom:40},";
-   echo "     fontSize: 12,";
-   echo "     isStacked: true";
-   echo "   };";
-   echo "   var chart = new google.visualization.BarChart(document.getElementById('disk_div'));";
-   echo "   chart.draw(data, options);";
-   echo " }";
-   echo "</script>";
-    $time = microtime();
-    $time = explode(' ', $time);
-    $time = $time[1] + $time[0];
-    $finish = $time;
-    $total_time = round(($finish - $start), 3);
-    $start= $finish;
+
+    echo "<script type=\"text/javascript\">
+            google.charts.load('current', {packages: ['corechart', 'bar']});
+            google.charts.setOnLoadCallback(drawBarColors);
+
+            function drawBarColors() {
+                var data = google.visualization.arrayToDataTable([
+                    ['Host', 'Used', {type: 'string', role: 'style'}, {type: 'string', role: 'tooltip', 'p': {'html': true}}, 
+                     'Free', {type: 'string', role: 'style'}, {type: 'string', role: 'tooltip', 'p': {'html': true}}],
+                    " . implode(",\n", $dataRows) . "
+                ]);
+                
+                var options = {
+                    title: 'Nebulous Disk Use across IPP Clusters',
+                    titleTextStyle: {color: 'black', fontSize: 15},
+                    width: '100%',
+                    height: '100%',
+                    tooltip: {isHtml: true},
+                    legend: { position: 'none', alignment: 'end', maxLines: 3 },
+                    hAxis: { title: 'Space (TB)', gridlines: {count: 10} },
+                    bar: { groupWidth: '95%' },
+                    chartArea: {left:100, top:50, right:20, bottom:40},
+                    fontSize: 15,
+                    isStacked: true
+                };
+
+                var chart = new google.visualization.BarChart(document.getElementById('disk_div'));
+                chart.draw(data, options);
+            }
+          </script>";
+
+    $total_time = round(microtime(true) - $start, 3);
     echo "<center>loading in $total_time seconds<br></center>";
 }
+
 
 ###########################################################################
@@ -186,6 +176,6 @@
     #echo "<script type=\"text/javascript\" src=\"https://www.gstatic.com/charts/loader.js\"></script>";
     echo "<script type=\"text/javascript\" src=\"loader.js\"></script>";
-    echo "<br><div class=\"chartWithOverlay\" style=\"position: relative; width: 640; height:400\">"; 
-    echo "  <div id=\"space_div\" style=\"width:1000; \"></div>";
+    echo "<br><div class=\"chartWithOverlay\" style=\"position: relative; width: 100%; height:400\">"; 
+    echo "  <div id=\"space_div\" style=\"width:100%; \"></div>";
     echo "  <div class=\"overlay\" style=\"position: absolute; width: 400px; bottom: 60px; left: 85px;\">";
     echo "    <div style=\"font-size: 16px; color:#0000ff; background-color:#ffffff\"><b>ipp + ippb nodes: $ippusable + $ippbusable TB (latest usable)</b></div>";
