From 72cd0dbf94165b56f37538b5d2a01387efd14bc1 Mon Sep 17 00:00:00 2001 From: Willian Galvani Date: Fri, 13 Mar 2026 15:28:27 -0300 Subject: [PATCH] Frontend: limit calls to /status to 0.5hz --- core/frontend/src/store/frontend.ts | 5 +++++ core/frontend/src/utils/api.ts | 6 ++++++ 2 files changed, 11 insertions(+) diff --git a/core/frontend/src/store/frontend.ts b/core/frontend/src/store/frontend.ts index 7d4e365ef6..e1333edc68 100644 --- a/core/frontend/src/store/frontend.ts +++ b/core/frontend/src/store/frontend.ts @@ -17,6 +17,8 @@ class FrontendStore extends VuexModule { backend_status_request = null as Promise | null + last_backend_online_time: Date = new Date() + backend_offline = false frontend_id = (() => { @@ -32,6 +34,9 @@ class FrontendStore extends VuexModule { @Mutation setBackendOffline(offline: boolean): void { + if (!offline) { + this.last_backend_online_time = new Date() + } this.backend_offline = offline } } diff --git a/core/frontend/src/utils/api.ts b/core/frontend/src/utils/api.ts index 28f3348a7f..16308daa69 100644 --- a/core/frontend/src/utils/api.ts +++ b/core/frontend/src/utils/api.ts @@ -12,8 +12,14 @@ export const isBackendOffline = (error: any): boolean => { return false; } +const minimum_backend_status_check_interval = 2000 + const axios_backend_instance: AxiosInstance = axios.create() axios_backend_instance.interceptors.request.use(async (config) => { + const online_recently = frontend.last_backend_online_time.getTime() + minimum_backend_status_check_interval > new Date().getTime() + if (online_recently) { + return config + } // Check if there's already a backend status request running. If yes, use it. If not, start one. if (frontend.backend_status_request === null) { frontend.setBackendStatusRequest(axios.get(frontend.backend_status_url, { timeout: 5000 }))