Skip to content

Commit

Permalink
Dynamically create the filesystem usage.
Browse files Browse the repository at this point in the history
Fixes google#357.
  • Loading branch information
vmarmol committed Dec 16, 2014
1 parent 8eec529 commit 5b7fb6b
Show file tree
Hide file tree
Showing 3 changed files with 61 additions and 45 deletions.
13 changes: 0 additions & 13 deletions pages/containers.go
Original file line number Diff line number Diff line change
Expand Up @@ -97,8 +97,6 @@ var funcMap = template.FuncMap{
"getMemoryUsagePercent": getMemoryUsagePercent,
"getHotMemoryPercent": getHotMemoryPercent,
"getColdMemoryPercent": getColdMemoryPercent,
"getFsStats": getFsStats,
"getFsUsagePercent": getFsUsagePercent,
}

func printMask(mask string, numCores int) interface{} {
Expand Down Expand Up @@ -208,17 +206,6 @@ func getColdMemoryPercent(spec *info.ContainerSpec, stats []*info.ContainerStats
return toMemoryPercent((latestStats.Usage)-(latestStats.WorkingSet), spec, machine)
}

func getFsStats(stats []*info.ContainerStats) []info.FsStats {
if len(stats) == 0 {
return []info.FsStats{}
}
return stats[len(stats)-1].Filesystem
}

func getFsUsagePercent(limit, used uint64) uint64 {
return uint64((float64(used) / float64(limit)) * 100)
}

func serveContainersPage(m manager.Manager, w http.ResponseWriter, u *url.URL) error {
start := time.Now()

Expand Down
19 changes: 1 addition & 18 deletions pages/containers_html.go
Original file line number Diff line number Diff line change
Expand Up @@ -157,24 +157,7 @@ const containersHtmlTemplate = `
<div class="panel-heading">
<h3 class="panel-title">Filesystem</h3>
</div>
<div class="panel-body">
{{with getFsStats .Stats}}
{{range $i, $e := .}}
<div class="row col-sm-12">
<h4>FS #{{$i}}: {{$e.Device}}</h4>
</div>
<div class="col-sm-9">
<div class="progress">
<div id="fs-{{$i}}-usage-chart"></div>
<div id="progress-{{$i}}" class="progress-bar progress-bar-danger" style="width: {{getFsUsagePercent $e.Limit $e.Usage}}%">
</div>
</div>
</div>
<div class="col-sm-3" id="progress-text-{{$i}}">
{{printSize $e.Limit}} {{printUnit $e.Limit}} ({{getFsUsagePercent $e.Limit $e.Usage}}%)
</div>
{{end}}
{{end}}
<div id="filesystem-usage" class="panel-body">
</div>
</div>
{{end}}
Expand Down
74 changes: 60 additions & 14 deletions pages/static/containers_js.go
Original file line number Diff line number Diff line change
Expand Up @@ -1496,9 +1496,9 @@ function drawGauge(elementId, cpuUsage, memoryUsage, fsUsage) {
if (memoryUsage >= 0) {
gauges.push(['Memory', memoryUsage]);
}
for( var i=0; i< fsUsage.length; i++) {
for (var i = 0; i < fsUsage.length; i++) {
if (fsUsage[i] >= 0) {
gauges.push(['FS #'+i, fsUsage[i]]);
gauges.push(['FS #' + (i + 1), fsUsage[i]]);
}
}
// Create and populate the data table.
Expand Down Expand Up @@ -1726,19 +1726,59 @@ function drawNetworkErrors(elementId, machineInfo, stats) {
drawLineChart(titles, data, elementId, "Errors per second");
}

// Draw the filesystem graph
function drawFileSystemUsage(elementId, machineInfo, stats) {
var curr = stats.stats[stats.stats.length - 1];
// Update the progress bar
for(var i = 0; i < curr.filesystem.length; i++) {
// Update the filesystem usage values.
function drawFileSystemUsage(machineInfo, stats) {
var curr = stats.stats[stats.stats.length - 1];
var el = $("<div>");
for (var i = 0; i < curr.filesystem.length; i++) {
var data = curr.filesystem[i];
var totalUsage = Math.floor((data.usage * 100.0)/data.capacity);
$("#progress-"+i).width(totalUsage+"%");
var repFS = humanizeMetric(data.capacity);
$("#progress-text-"+i).html( repFS[0].toFixed(2) + " " + repFS[1] + " ("+totalUsage+"%)");
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 + "%)");

}
}

// Draw the filesystem usage nodes.
function startFileSystemUsage(elementId, machineInfo, stats) {
window.cadvisor.fsUsage = {};

// A map of device name to DOM elements.
window.cadvisor.fsUsage.elements = {};

var curr = stats.stats[stats.stats.length - 1];
var el = $("<div>");
for (var i = 0; i < curr.filesystem.length; i++) {
var data = curr.filesystem[i];
el.append($("<div>")
.addClass("row col-sm-12")
.append($("<h4>")
.text("FS #" + (i + 1) + ": " + data.device)));

var progressElement = $("<div>").addClass("progress-bar progress-bar-danger");
el.append($("<div>")
.addClass("col-sm-9")
.append($("<div>")
.addClass("progress")
.append(progressElement)));

var textElement = $("<div>").addClass("col-sm-3");
el.append(textElement);

window.cadvisor.fsUsage.elements[data.device] = {
'progressElement': progressElement,
'textElement': textElement,
};
}
$("#" + elementId).empty().append(el);

drawFileSystemUsage(machineInfo, stats);
}

// Expects an array of closures to call. After each execution the JS runtime is given control back before continuing.
// This function returns asynchronously
function stepExecute(steps) {
Expand Down Expand Up @@ -1800,11 +1840,10 @@ function drawCharts(machineInfo, containerInfo) {
// Filesystem.
if (containerInfo.spec.has_filesystem) {
steps.push(function() {
drawFileSystemUsage("filesystem-usage-chart", machineInfo, containerInfo);
drawFileSystemUsage(machineInfo, containerInfo);
});
}


stepExecute(steps);
}

Expand All @@ -1816,12 +1855,19 @@ function startPage(containerName, hasCpu, hasMemory) {
}

window.charts = {};
window.cadvisor = {};
window.cadvisor.firstRun = true;

// Get machine info, then get the stats every 1s.
getMachineInfo(function(machineInfo) {
setInterval(function() {
getStats(containerName, function(stats){
drawCharts(machineInfo, stats);
getStats(containerName, function(containerInfo){
if (window.cadvisor.firstRun && containerInfo.spec.has_filesystem) {
window.cadvisor.firstRun = false;
startFileSystemUsage("filesystem-usage", machineInfo, containerInfo);
}

drawCharts(machineInfo, containerInfo);
});
}, 1000);
});
Expand Down

0 comments on commit 5b7fb6b

Please sign in to comment.