From 487cb8fdc5905237625e62496b56f7b41455406c Mon Sep 17 00:00:00 2001 From: Lyall <58636255+Lyall-A@users.noreply.github.com> Date: Fri, 11 Jul 2025 22:41:43 +0100 Subject: [PATCH] fix: refresh interval getting incremented by 10 on status page despite a minimum of 5 (#5961) Co-authored-by: Frank Elsinga --- src/pages/StatusPage.vue | 12 ++++++++++-- test/e2e/specs/status-page.spec.js | 4 ++-- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/src/pages/StatusPage.vue b/src/pages/StatusPage.vue index e0df74fde..0c9e97c2d 100644 --- a/src/pages/StatusPage.vue +++ b/src/pages/StatusPage.vue @@ -720,7 +720,7 @@ export default { // Configure auto-refresh loop feedInterval = setInterval(() => { this.updateHeartbeatList(); - }, (this.config.autoRefreshInterval + 10) * 1000); + }, Math.max(5, this.config.autoRefreshInterval) * 1000); this.updateUpdateTimer(); }).catch( function (error) { @@ -806,7 +806,15 @@ export default { clearInterval(this.updateCountdown); this.updateCountdown = setInterval(() => { - const countdown = dayjs.duration(this.lastUpdateTime.add(this.config.autoRefreshInterval, "seconds").add(10, "seconds").diff(dayjs())); + // rounding here as otherwise we sometimes skip numbers in cases of time drift + const countdown = dayjs.duration( + Math.round( + this.lastUpdateTime + .add(Math.max(5, this.config.autoRefreshInterval), "seconds") + .diff(dayjs()) + / 1000 + ), "seconds"); + if (countdown.as("seconds") < 0) { clearInterval(this.updateCountdown); } else { diff --git a/test/e2e/specs/status-page.spec.js b/test/e2e/specs/status-page.spec.js index c8f548b60..1964f92b5 100644 --- a/test/e2e/specs/status-page.spec.js +++ b/test/e2e/specs/status-page.spec.js @@ -121,8 +121,8 @@ test.describe("Status Page", () => { await expect(page.getByTestId("update-countdown-text")).toContainText("00:"); const updateCountdown = Number((await page.getByTestId("update-countdown-text").textContent()).match(/(\d+):(\d+)/)[2]); - expect(updateCountdown).toBeGreaterThanOrEqual(refreshInterval); // cant be certain when the timer will start, so ensure it's within expected range - expect(updateCountdown).toBeLessThanOrEqual(refreshInterval + 10); + expect(updateCountdown).toBeGreaterThanOrEqual(refreshInterval - 10); // cant be certain when the timer will start, so ensure it's within expected range + expect(updateCountdown).toBeLessThanOrEqual(refreshInterval); await expect(page.locator("body")).toHaveClass(theme);