fix(container-stat): fix cpu/mem charts on Windows containers

* Fixing the CPU and Memory charts on Windows containers

* Fixing the CPU and Memory charts on Windows containers
pull/2445/head
Yassir Hannoun 2018-11-08 01:31:33 +01:00 committed by Anthony Lapenna
parent 55b50c2a49
commit 309620545c
3 changed files with 42 additions and 17 deletions

View File

@ -63,9 +63,17 @@ function ContainerViewModel(data) {
}
function ContainerStatsViewModel(data) {
this.Date = data.read;
this.MemoryUsage = data.memory_stats.usage - data.memory_stats.stats.cache;
this.MemoryCache = data.memory_stats.stats.cache;
this.read = data.read;
this.preread = data.preread;
if(data.memory_stats.privateworkingset !== undefined) { // Windows
this.MemoryUsage = data.memory_stats.privateworkingset;
this.MemoryCache = 0;
this.NumProcs = data.num_procs;
this.isWindows = true;
} else { // Linux
this.MemoryUsage = data.memory_stats.usage - data.memory_stats.stats.cache;
this.MemoryCache = data.memory_stats.stats.cache;
}
this.PreviousCPUTotalUsage = data.precpu_stats.cpu_usage.total_usage;
this.PreviousCPUSystemUsage = data.precpu_stats.system_cpu_usage;
this.CurrentCPUTotalUsage = data.cpu_stats.cpu_usage.total_usage;

View File

@ -23,21 +23,21 @@ function ($q, $scope, $transition$, $document, $interval, ContainerService, Char
if (stats.Networks.length > 0) {
var rx = stats.Networks[0].rx_bytes;
var tx = stats.Networks[0].tx_bytes;
var label = moment(stats.Date).format('HH:mm:ss');
var label = moment(stats.read).format('HH:mm:ss');
ChartService.UpdateNetworkChart(label, rx, tx, chart);
}
}
function updateMemoryChart(stats, chart) {
var label = moment(stats.Date).format('HH:mm:ss');
var label = moment(stats.read).format('HH:mm:ss');
ChartService.UpdateMemoryChart(label, stats.MemoryUsage, stats.MemoryCache, chart);
}
function updateCPUChart(stats, chart) {
var label = moment(stats.Date).format('HH:mm:ss');
var value = calculateCPUPercentUnix(stats);
var label = moment(stats.read).format('HH:mm:ss');
var value = stats.isWindows ? calculateCPUPercentWindows(stats) : calculateCPUPercentUnix(stats);
ChartService.UpdateCPUChart(label, value, chart);
}
@ -54,6 +54,17 @@ function ($q, $scope, $transition$, $document, $interval, ContainerService, Char
return cpuPercent;
}
function calculateCPUPercentWindows(stats) {
var possIntervals = stats.NumProcs * parseFloat(
moment(stats.read, 'YYYY-MM-DDTHH:mm:ss.SSSSSSSSSZ').valueOf() - moment(stats.preread, 'YYYY-MM-DDTHH:mm:ss.SSSSSSSSSZ').valueOf());
var windowsCpuUsage = 0.0;
if(possIntervals > 0) {
windowsCpuUsage = parseFloat(stats.CurrentCPUTotalUsage - stats.PreviousCPUTotalUsage) / parseFloat(possIntervals * 100);
}
return windowsCpuUsage;
}
$scope.changeUpdateRepeater = function() {
var networkChart = $scope.networkChart;
var cpuChart = $scope.cpuChart;

View File

@ -135,6 +135,14 @@ angular.module('portainer.app')
});
};
function LimitChartItems(chart, CHART_LIMIT) {
if (chart.data.datasets[0].data.length > CHART_LIMIT) {
chart.data.labels.pop();
chart.data.datasets[0].data.pop();
chart.data.datasets[1].data.pop();
}
}
function UpdateChart(label, value, chart) {
chart.data.labels.push(label);
chart.data.datasets[0].data.push(value);
@ -150,13 +158,15 @@ angular.module('portainer.app')
service.UpdateMemoryChart = function UpdateChart(label, memoryValue, cacheValue, chart) {
chart.data.labels.push(label);
chart.data.datasets[0].data.push(memoryValue);
chart.data.datasets[1].data.push(cacheValue);
if (chart.data.datasets[0].data.length > CHART_LIMIT) {
chart.data.labels.pop();
chart.data.datasets[0].data.pop();
if(cacheValue) {
chart.data.datasets[1].data.push(cacheValue);
} else { // cache values are not available for Windows
chart.data.datasets.splice(1, 1);
}
LimitChartItems(chart);
chart.update(0);
};
service.UpdateCPUChart = UpdateChart;
@ -166,11 +176,7 @@ angular.module('portainer.app')
chart.data.datasets[0].data.push(rx);
chart.data.datasets[1].data.push(tx);
if (chart.data.datasets[0].data.length > CHART_LIMIT) {
chart.data.labels.pop();
chart.data.datasets[0].data.pop();
chart.data.datasets[1].data.pop();
}
LimitChartItems(chart);
chart.update(0);
};