From c1f4a82ee195f9d3e0c735cedfa669c38f8b8364 Mon Sep 17 00:00:00 2001 From: Taras Kushnir Date: Tue, 11 Nov 2025 10:00:16 +0200 Subject: [PATCH] Add retry for fetching usage chart data --- web/layouts/settings-usage/scripts.html | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/web/layouts/settings-usage/scripts.html b/web/layouts/settings-usage/scripts.html index 0ce80153..ff793945 100644 --- a/web/layouts/settings-usage/scripts.html +++ b/web/layouts/settings-usage/scripts.html @@ -209,11 +209,24 @@ this.setLegend(legend1, 'Requests', this.requestedColor); } - async fetchChartData(spinnerElement) { + async fetchChartData(spinnerElement, maxRetries = 3, baseDelay = 1000) { if (spinnerElement) { spinnerElement.style.display = 'flex'; } try { - const response = await fetch('{{ partsURL $.Const.UserEndpoint $.Const.Stats | safeJS }}'); - return await response.json(); + for (let attempt = 1; attempt <= maxRetries; attempt++) { + const response = await fetch('{{ partsURL $.Const.UserEndpoint $.Const.Stats | safeJS }}'); + if (response.ok) { + return await response.json(); + } + + if (response.status === 429 || response.status === 503) { + const retryDelay = baseDelay * Math.pow(2, attempt - 1); + await new Promise(resolve => setTimeout(resolve, retryDelay)); + continue; + } + + const errorText = await response.text(); + throw new Error(`Request failed (${response.status}): ${errorText || response.statusText}`); + } } catch (error) { console.error('Error fetching chart data:', error); return null;