mirror of
https://github.com/portainer/portainer.git
synced 2025-07-24 07:49:41 +02:00
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
This commit is contained in:
parent
55b50c2a49
commit
309620545c
3 changed files with 42 additions and 17 deletions
|
@ -63,9 +63,17 @@ function ContainerViewModel(data) {
|
||||||
}
|
}
|
||||||
|
|
||||||
function ContainerStatsViewModel(data) {
|
function ContainerStatsViewModel(data) {
|
||||||
this.Date = data.read;
|
this.read = data.read;
|
||||||
this.MemoryUsage = data.memory_stats.usage - data.memory_stats.stats.cache;
|
this.preread = data.preread;
|
||||||
this.MemoryCache = data.memory_stats.stats.cache;
|
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.PreviousCPUTotalUsage = data.precpu_stats.cpu_usage.total_usage;
|
||||||
this.PreviousCPUSystemUsage = data.precpu_stats.system_cpu_usage;
|
this.PreviousCPUSystemUsage = data.precpu_stats.system_cpu_usage;
|
||||||
this.CurrentCPUTotalUsage = data.cpu_stats.cpu_usage.total_usage;
|
this.CurrentCPUTotalUsage = data.cpu_stats.cpu_usage.total_usage;
|
||||||
|
|
|
@ -23,21 +23,21 @@ function ($q, $scope, $transition$, $document, $interval, ContainerService, Char
|
||||||
if (stats.Networks.length > 0) {
|
if (stats.Networks.length > 0) {
|
||||||
var rx = stats.Networks[0].rx_bytes;
|
var rx = stats.Networks[0].rx_bytes;
|
||||||
var tx = stats.Networks[0].tx_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);
|
ChartService.UpdateNetworkChart(label, rx, tx, chart);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function updateMemoryChart(stats, 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);
|
ChartService.UpdateMemoryChart(label, stats.MemoryUsage, stats.MemoryCache, chart);
|
||||||
}
|
}
|
||||||
|
|
||||||
function updateCPUChart(stats, chart) {
|
function updateCPUChart(stats, chart) {
|
||||||
var label = moment(stats.Date).format('HH:mm:ss');
|
var label = moment(stats.read).format('HH:mm:ss');
|
||||||
var value = calculateCPUPercentUnix(stats);
|
var value = stats.isWindows ? calculateCPUPercentWindows(stats) : calculateCPUPercentUnix(stats);
|
||||||
|
|
||||||
ChartService.UpdateCPUChart(label, value, chart);
|
ChartService.UpdateCPUChart(label, value, chart);
|
||||||
}
|
}
|
||||||
|
@ -54,6 +54,17 @@ function ($q, $scope, $transition$, $document, $interval, ContainerService, Char
|
||||||
return cpuPercent;
|
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() {
|
$scope.changeUpdateRepeater = function() {
|
||||||
var networkChart = $scope.networkChart;
|
var networkChart = $scope.networkChart;
|
||||||
var cpuChart = $scope.cpuChart;
|
var cpuChart = $scope.cpuChart;
|
||||||
|
|
|
@ -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) {
|
function UpdateChart(label, value, chart) {
|
||||||
chart.data.labels.push(label);
|
chart.data.labels.push(label);
|
||||||
chart.data.datasets[0].data.push(value);
|
chart.data.datasets[0].data.push(value);
|
||||||
|
@ -150,13 +158,15 @@ angular.module('portainer.app')
|
||||||
service.UpdateMemoryChart = function UpdateChart(label, memoryValue, cacheValue, chart) {
|
service.UpdateMemoryChart = function UpdateChart(label, memoryValue, cacheValue, chart) {
|
||||||
chart.data.labels.push(label);
|
chart.data.labels.push(label);
|
||||||
chart.data.datasets[0].data.push(memoryValue);
|
chart.data.datasets[0].data.push(memoryValue);
|
||||||
chart.data.datasets[1].data.push(cacheValue);
|
|
||||||
|
if(cacheValue) {
|
||||||
if (chart.data.datasets[0].data.length > CHART_LIMIT) {
|
chart.data.datasets[1].data.push(cacheValue);
|
||||||
chart.data.labels.pop();
|
} else { // cache values are not available for Windows
|
||||||
chart.data.datasets[0].data.pop();
|
chart.data.datasets.splice(1, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
LimitChartItems(chart);
|
||||||
|
|
||||||
chart.update(0);
|
chart.update(0);
|
||||||
};
|
};
|
||||||
service.UpdateCPUChart = UpdateChart;
|
service.UpdateCPUChart = UpdateChart;
|
||||||
|
@ -166,11 +176,7 @@ angular.module('portainer.app')
|
||||||
chart.data.datasets[0].data.push(rx);
|
chart.data.datasets[0].data.push(rx);
|
||||||
chart.data.datasets[1].data.push(tx);
|
chart.data.datasets[1].data.push(tx);
|
||||||
|
|
||||||
if (chart.data.datasets[0].data.length > CHART_LIMIT) {
|
LimitChartItems(chart);
|
||||||
chart.data.labels.pop();
|
|
||||||
chart.data.datasets[0].data.pop();
|
|
||||||
chart.data.datasets[1].data.pop();
|
|
||||||
}
|
|
||||||
|
|
||||||
chart.update(0);
|
chart.update(0);
|
||||||
};
|
};
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue