Dashboard Top Process: Pause/Resume auto-refresh button

This commit is contained in:
master3395
2026-04-10 18:52:20 +02:00
parent 06a3823c57
commit 9941a09865
4 changed files with 129 additions and 18 deletions

View File

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

View File

@@ -1337,6 +1337,15 @@
<!-- Top Process Tab -->
<div id="top-process" class="tab-content">
<div ng-if="!loadingTopProcesses" style="display: flex; justify-content: flex-end; align-items: center; flex-wrap: wrap; gap: 10px; margin-bottom: 12px; padding: 4px 0;">
<span ng-if="topProcessPaused" style="font-size: 12px; color: #d97706; font-weight: 600;">
<i class="fas fa-pause-circle"></i> Auto-refresh paused
</span>
<button type="button" ng-click="toggleTopProcessPause()" class="btn-primary" style="padding: 6px 14px; font-size: 12px; display: inline-flex; align-items: center; gap: 6px;">
<i class="fas" ng-class="topProcessPaused ? 'fa-play' : 'fa-pause'"></i>
<span>{$ topProcessPaused ? 'Resume updates' : 'Pause updates' $}</span>
</button>
</div>
<div ng-if="loadingTopProcesses" style="text-align: center; padding: 20px; color: #8893a7;">
Loading top processes...
</div>

View File

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

View File

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