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);