diff --git a/baseTemplate/static/baseTemplate/custom-js/system-status.js b/baseTemplate/static/baseTemplate/custom-js/system-status.js index ddb9f6f13..56a893fda 100644 --- a/baseTemplate/static/baseTemplate/custom-js/system-status.js +++ b/baseTemplate/static/baseTemplate/custom-js/system-status.js @@ -1004,6 +1004,8 @@ var dashboardStatsControllerFn = function ($scope, $http, $timeout) { $scope.topProcesses = []; $scope.loadingTopProcesses = true; $scope.errorTopProcesses = ''; + /** When true, automatic Top Process refresh is stopped (user can read the table). */ + $scope.topProcessPaused = false; /** * @param {boolean} silent If true, refresh rows in place without clearing the table (no loading spinner). */ @@ -1812,6 +1814,44 @@ var dashboardStatsControllerFn = function ($scope, $http, $timeout) { var pollInterval = 2000; // ms (charts / dashboard stats) /** Top Process list: slower refresh, silent updates (no table flash). */ var topProcessPollIntervalMs = 10000; + var topProcessPollPromise = null; + + function cancelTopProcessPoll() { + if (topProcessPollPromise) { + $timeout.cancel(topProcessPollPromise); + topProcessPollPromise = null; + } + } + + function scheduleTopProcessPoll() { + cancelTopProcessPoll(); + function tick() { + if ($scope.topProcessPaused) { + return; + } + topProcessPollPromise = $timeout(function() { + topProcessPollPromise = null; + if (!$scope.topProcessPaused) { + $scope.refreshTopProcesses(true); + } + if (!$scope.topProcessPaused) { + tick(); + } + }, topProcessPollIntervalMs); + } + tick(); + } + + $scope.toggleTopProcessPause = function() { + $scope.topProcessPaused = !$scope.topProcessPaused; + if ($scope.topProcessPaused) { + cancelTopProcessPoll(); + } else { + $scope.refreshTopProcesses(true); + scheduleTopProcessPoll(); + } + }; + var maxPoints = 30; // Expose so switchTab can create charts on first tab click if they weren't created at load @@ -2361,12 +2401,6 @@ var dashboardStatsControllerFn = function ($scope, $http, $timeout) { } pollAll(); - function scheduleTopProcessPoll() { - $timeout(function() { - $scope.refreshTopProcesses(true); - scheduleTopProcessPoll(); - }, topProcessPollIntervalMs); - } scheduleTopProcessPoll(); }, 800); diff --git a/baseTemplate/templates/baseTemplate/homePage.html b/baseTemplate/templates/baseTemplate/homePage.html index 84d0121e4..da485df46 100644 --- a/baseTemplate/templates/baseTemplate/homePage.html +++ b/baseTemplate/templates/baseTemplate/homePage.html @@ -1337,6 +1337,15 @@
+
+ + Auto-refresh paused + + +
Loading top processes...
diff --git a/public/static/baseTemplate/custom-js/system-status.js b/public/static/baseTemplate/custom-js/system-status.js index 7d850e594..64609165b 100644 --- a/public/static/baseTemplate/custom-js/system-status.js +++ b/public/static/baseTemplate/custom-js/system-status.js @@ -1004,6 +1004,8 @@ var dashboardStatsControllerFn = function ($scope, $http, $timeout) { $scope.topProcesses = []; $scope.loadingTopProcesses = true; $scope.errorTopProcesses = ''; + /** When true, automatic Top Process refresh is stopped (user can read the table). */ + $scope.topProcessPaused = false; /** * @param {boolean} silent If true, refresh rows in place without clearing the table (no loading spinner). */ @@ -1800,6 +1802,44 @@ var dashboardStatsControllerFn = function ($scope, $http, $timeout) { var pollInterval = 2000; // ms (charts / dashboard stats) /** Top Process list: slower refresh, silent updates (no table flash). */ var topProcessPollIntervalMs = 10000; + var topProcessPollPromise = null; + + function cancelTopProcessPoll() { + if (topProcessPollPromise) { + $timeout.cancel(topProcessPollPromise); + topProcessPollPromise = null; + } + } + + function scheduleTopProcessPoll() { + cancelTopProcessPoll(); + function tick() { + if ($scope.topProcessPaused) { + return; + } + topProcessPollPromise = $timeout(function() { + topProcessPollPromise = null; + if (!$scope.topProcessPaused) { + $scope.refreshTopProcesses(true); + } + if (!$scope.topProcessPaused) { + tick(); + } + }, topProcessPollIntervalMs); + } + tick(); + } + + $scope.toggleTopProcessPause = function() { + $scope.topProcessPaused = !$scope.topProcessPaused; + if ($scope.topProcessPaused) { + cancelTopProcessPoll(); + } else { + $scope.refreshTopProcesses(true); + scheduleTopProcessPoll(); + } + }; + var maxPoints = 30; // Expose so switchTab can create charts on first tab click if they weren't created at load @@ -2349,12 +2389,6 @@ var dashboardStatsControllerFn = function ($scope, $http, $timeout) { } pollAll(); - function scheduleTopProcessPoll() { - $timeout(function() { - $scope.refreshTopProcesses(true); - scheduleTopProcessPoll(); - }, topProcessPollIntervalMs); - } scheduleTopProcessPoll(); }, 800); diff --git a/static/baseTemplate/custom-js/system-status.js b/static/baseTemplate/custom-js/system-status.js index 1cc7b9e75..c6d928c79 100644 --- a/static/baseTemplate/custom-js/system-status.js +++ b/static/baseTemplate/custom-js/system-status.js @@ -1004,6 +1004,8 @@ var dashboardStatsControllerFn = function ($scope, $http, $timeout) { $scope.topProcesses = []; $scope.loadingTopProcesses = true; $scope.errorTopProcesses = ''; + /** When true, automatic Top Process refresh is stopped (user can read the table). */ + $scope.topProcessPaused = false; /** * @param {boolean} silent If true, refresh rows in place without clearing the table (no loading spinner). */ @@ -1689,6 +1691,44 @@ var dashboardStatsControllerFn = function ($scope, $http, $timeout) { var pollInterval = 2000; // ms (charts / dashboard stats) /** Top Process list: slower refresh, silent updates (no table flash). */ var topProcessPollIntervalMs = 10000; + var topProcessPollPromise = null; + + function cancelTopProcessPoll() { + if (topProcessPollPromise) { + $timeout.cancel(topProcessPollPromise); + topProcessPollPromise = null; + } + } + + function scheduleTopProcessPoll() { + cancelTopProcessPoll(); + function tick() { + if ($scope.topProcessPaused) { + return; + } + topProcessPollPromise = $timeout(function() { + topProcessPollPromise = null; + if (!$scope.topProcessPaused) { + $scope.refreshTopProcesses(true); + } + if (!$scope.topProcessPaused) { + tick(); + } + }, topProcessPollIntervalMs); + } + tick(); + } + + $scope.toggleTopProcessPause = function() { + $scope.topProcessPaused = !$scope.topProcessPaused; + if ($scope.topProcessPaused) { + cancelTopProcessPoll(); + } else { + $scope.refreshTopProcesses(true); + scheduleTopProcessPoll(); + } + }; + var maxPoints = 30; // Expose so switchTab can create charts on first tab click if they weren't created at load @@ -2238,12 +2278,6 @@ var dashboardStatsControllerFn = function ($scope, $http, $timeout) { } pollAll(); - function scheduleTopProcessPoll() { - $timeout(function() { - $scope.refreshTopProcesses(true); - scheduleTopProcessPoll(); - }, topProcessPollIntervalMs); - } scheduleTopProcessPoll(); }, 800);