Aktifkan fallback proxy paralel publikasi

This commit is contained in:
GuavaPopper
2026-06-05 13:21:37 +07:00
parent 46dab9afef
commit 8b6364c53a
+28 -23
View File
@@ -78,7 +78,9 @@
dashboardRuntimeFetch: 'always', dashboardRuntimeFetch: 'always',
dashboardTargetUrl: 'https://dashboard.informatika.untan.ac.id/index.php?penelitian', dashboardTargetUrl: 'https://dashboard.informatika.untan.ac.id/index.php?penelitian',
dashboardProxyTemplates: [ dashboardProxyTemplates: [
'https://api.codetabs.com/v1/proxy?quest={{url}}' 'https://api.codetabs.com/v1/proxy?quest={{url}}',
'https://api.allorigins.win/get?url={{url}}&ts={{ts}}',
'https://thingproxy.freeboard.io/fetch/{{rawUrl}}'
] ]
}; };
</script> </script>
@@ -1631,6 +1633,22 @@
updateStatPub(newData.length); updateStatPub(newData.length);
} }
async function fetchProxyRows(proxyUrl) {
const controller = new AbortController();
const timeoutId = setTimeout(() => controller.abort(), 15000);
try {
const response = await fetch(proxyUrl, { signal: controller.signal });
if (!response.ok) throw new Error(`HTTP_ERROR_${response.status}`);
const responseData = await response.text();
const html = extractDashboardHtml(responseData);
return parseDashboardRows(html);
} finally {
clearTimeout(timeoutId);
}
}
async function fetchDashboardData() { async function fetchDashboardData() {
const grid = document.getElementById('riset-grid'); const grid = document.getElementById('riset-grid');
if (grid) { if (grid) {
@@ -1681,28 +1699,15 @@
return; return;
} }
for (const getProxyUrl of proxyServers) { try {
const controller = new AbortController(); const proxyUrls = proxyServers.map((getProxyUrl) => getProxyUrl(targetUrl));
const timeoutId = setTimeout(() => controller.abort(), 15000); const rows = await Promise.any(proxyUrls.map((proxyUrl) => fetchProxyRows(proxyUrl)));
applyDashboardRows(rows);
try { return;
const proxyUrl = getProxyUrl(targetUrl); } catch (error) {
lastError = error instanceof AggregateError && error.errors?.length
const response = await fetch(proxyUrl, { signal: controller.signal }); ? error.errors[error.errors.length - 1]
clearTimeout(timeoutId); : error;
if (!response.ok) throw new Error(`HTTP_ERROR_${response.status}`);
const responseData = await response.text();
const html = extractDashboardHtml(responseData);
const rows = parseDashboardRows(html);
applyDashboardRows(rows);
return; // Berhasil! Keluar dari loop
} catch (error) {
clearTimeout(timeoutId);
lastError = error;
// Lanjut ke proxy berikutnya...
}
} }
// Jika semua proxy gagal // Jika semua proxy gagal