From c5315a6800f62ba4c307bfc560b3812c9ccf5375 Mon Sep 17 00:00:00 2001 From: Victor Marmol Date: Tue, 16 Dec 2014 10:58:22 -0800 Subject: [PATCH] Dynamically update FS gauges in a stable way. Fixes #361. --- pages/containers_html.go | 3 +-- pages/static/containers_js.go | 45 ++++++++++++++++------------------- 2 files changed, 21 insertions(+), 27 deletions(-) diff --git a/pages/containers_html.go b/pages/containers_html.go index 4efeebd6..eece2c67 100644 --- a/pages/containers_html.go +++ b/pages/containers_html.go @@ -106,8 +106,7 @@ const containersHtmlTemplate = `

Overview

-
-
+
{{if .CpuAvailable}}
diff --git a/pages/static/containers_js.go b/pages/static/containers_js.go index 51494abb..7744df6a 100644 --- a/pages/static/containers_js.go +++ b/pages/static/containers_js.go @@ -1487,20 +1487,11 @@ function hasResource(stats, resource) { return stats.stats.length > 0 && stats.stats[0][resource]; } -// Draw a gauge. -function drawGauge(elementId, cpuUsage, memoryUsage, fsUsage) { - var gauges = [['Label', 'Value']]; - if (cpuUsage >= 0) { - gauges.push(['CPU', cpuUsage]); - } - if (memoryUsage >= 0) { - gauges.push(['Memory', memoryUsage]); - } - for (var i = 0; i < fsUsage.length; i++) { - if (fsUsage[i] >= 0) { - gauges.push(['FS #' + (i + 1), fsUsage[i]]); - } - } +// Draw a set of gauges. Data is comprised of an array of arrays with two elements: +// a string label and a numeric value for the gauge. +function drawGauges(elementId, gauges) { + gauges.unshift(['Label', 'Value']); + // Create and populate the data table. var data = google.visualization.arrayToDataTable(gauges); @@ -1612,6 +1603,7 @@ function drawCpuUsageBreakdown(elementId, machineInfo, containerInfo) { // Draw the gauges for overall resource usage. function drawOverallUsage(elementId, machineInfo, containerInfo) { var cur = containerInfo.stats[containerInfo.stats.length - 1]; + var gauges = []; var cpuUsage = 0; if (containerInfo.spec.has_cpu && containerInfo.stats.length >= 2) { @@ -1624,6 +1616,7 @@ function drawOverallUsage(elementId, machineInfo, containerInfo) { if (cpuUsage > 100) { cpuUsage = 100; } + gauges.push(['CPU', cpuUsage]); } var memoryUsage = 0; @@ -1635,18 +1628,20 @@ function drawOverallUsage(elementId, machineInfo, containerInfo) { } memoryUsage = Math.round((cur.memory.usage / limit) * 100); + gauges.push(['Memory', memoryUsage]); } - var fsUsage=[]; - if (containerInfo.spec.has_filesystem) { - for(var i=0; i < cur.filesystem.length; i++) { - var limit = cur.filesystem[0].capacity; - var diskUsage = Math.round((cur.filesystem[0].usage / limit) * 100); - fsUsage.push(diskUsage); - } + var numGauges = gauges.length; + for (var i = 0; i < cur.filesystem.length; i++) { + var data = cur.filesystem[i]; + var totalUsage = Math.floor((data.usage * 100.0) / data.capacity); + var els = window.cadvisor.fsUsage.elements[data.device]; + + // Update the gauges. + gauges[numGauges + els.index] = ['FS #' + (els.index + 1), totalUsage]; } - drawGauge(elementId, cpuUsage, memoryUsage, fsUsage); + drawGauges(elementId, gauges); } var oneMegabyte = 1024 * 1024; @@ -1669,7 +1664,7 @@ function drawMemoryUsage(elementId, machineInfo, containerInfo) { data.push(elements); } - // Updating the progress bar + // Updating the progress bar. var cur = containerInfo.stats[containerInfo.stats.length-1]; var hotMemory = Math.floor((cur.memory.working_set * 100.0) / machineInfo.memory_capacity); var totalMemory = Math.floor((cur.memory.usage * 100.0) / machineInfo.memory_capacity); @@ -1732,14 +1727,13 @@ function drawFileSystemUsage(machineInfo, stats) { var el = $("
"); for (var i = 0; i < curr.filesystem.length; i++) { var data = curr.filesystem[i]; - var totalUsage = Math.floor((data.usage * 100.0)/data.capacity); + var totalUsage = Math.floor((data.usage * 100.0) / data.capacity); var humanized = humanizeMetric(data.capacity); // Update DOM elements. var els = window.cadvisor.fsUsage.elements[data.device]; els.progressElement.width(totalUsage + "%"); els.textElement.text(humanized[0].toFixed(2) + " " + humanized[1] + " (" + totalUsage + "%)"); - } } @@ -1772,6 +1766,7 @@ function startFileSystemUsage(elementId, machineInfo, stats) { window.cadvisor.fsUsage.elements[data.device] = { 'progressElement': progressElement, 'textElement': textElement, + 'index': i, }; } $("#" + elementId).empty().append(el);