Handle browser-blocked status checks
All checks were successful
Build & Push Docker Image to Gitea Registry / build-and-push (push) Successful in 12s

This commit is contained in:
Kroonk
2026-05-21 15:40:50 +02:00
parent 2125601e56
commit 8f2b4faad9
8 changed files with 50 additions and 22 deletions

View File

@@ -217,17 +217,20 @@ async function probe(url) {
signal: controller.signal
});
return {
ok: true,
status: 'online',
ms: Math.round(performance.now() - started),
detail: response.type === 'opaque'
? 'Erreichbar. HTTP-Details wegen Browser-CORS nicht lesbar.'
: `HTTP ${response.status}`
};
} catch (error) {
const isTimeout = error.name === 'AbortError';
return {
ok: false,
status: isTimeout ? 'offline' : 'unknown',
ms: Math.round(performance.now() - started),
detail: error.name === 'AbortError' ? 'Timeout nach 6 Sekunden.' : error.message
detail: isTimeout
? 'Timeout nach 6 Sekunden.'
: 'Der Browser blockiert diese Pruefung wahrscheinlich wegen CORS/CORB. Der Dienst kann trotzdem online sein.'
};
} finally {
window.clearTimeout(timeout);
@@ -238,12 +241,20 @@ async function checkRow(row) {
const service = config.services[Number(row.dataset.index)];
const diagnostic = row.querySelector('.diagnostic');
diagnostic.textContent = 'Pruefe...';
row.classList.remove('is-online', 'is-offline');
row.classList.remove('is-online', 'is-offline', 'is-unknown');
const result = await probe(service.url);
row.classList.toggle('is-online', result.ok);
row.classList.toggle('is-offline', !result.ok);
diagnostic.textContent = `${result.ok ? 'Online' : 'Fehler'} - ${result.ms} ms - ${result.detail}`;
row.classList.toggle('is-online', result.status === 'online');
row.classList.toggle('is-offline', result.status === 'offline');
row.classList.toggle('is-unknown', result.status === 'unknown');
const label = {
online: 'Online',
offline: 'Fehler',
unknown: 'Nicht im Browser pruefbar'
}[result.status];
diagnostic.textContent = `${label} - ${result.ms} ms - ${result.detail}`;
}
function saveLocal() {
@@ -315,4 +326,3 @@ downloadConfigButton.addEventListener('click', downloadConfig);
boot().catch((error) => {
loginMessage.textContent = `Adminseite konnte nicht starten: ${error.message}`;
});