Diagnose: Volltest mit echtem Ausweis

Ein 401 ohne Anmeldung beweist nur, dass die Adresse existiert -- nicht,
dass die Antwort auch bei ANGEMELDETEM Zugriff kommt. Genau dort blieb
die Verwaltung stehen.

Die Diagnose geht jetzt denselben Weg wie die Verwaltung: Ausweis von
der Zugangswand holen, damit die Einstellungen abrufen, Zeit messen. Mit
eigenem Zeitlimit von 12 Sekunden, damit die Diagnose nicht selbst
haengt, wenn die Adresse haengt -- ein Pruefwerkzeug, das am selben
Problem scheitert, ist wertlos.

Damit ist der Befund eindeutig statt vermutet: entweder 'Erfolgreich in
X ms', oder eine Statusnummer samt Antworttext, oder 'KEINE Antwort
innerhalb von 12 Sekunden'.
This commit is contained in:
2026-08-23 17:30:23 +02:00
parent 2ec935ccc6
commit 4ad99b5c37
+58
View File
@@ -246,6 +246,64 @@ code { background: rgba(127,208,232,.1); padding: .1rem .35rem; border-radius: 5
zeile("bad", "Zahlungen-Bereich", "Nicht erreichbar: " + (e.message || ""));
}
/* 4b. DER ENTSCHEIDENDE TEST: derselbe Ablauf wie in der Verwaltung,
mit einem echten Ausweis.
Ein 401 ohne Anmeldung beweist nur, dass die Adresse existiert.
Es beweist NICHT, dass die Antwort auch dann kommt, wenn man
angemeldet ist -- und genau dort blieb die Verwaltung stehen.
Deshalb hier der volle Weg: Ausweis holen, damit die Einstellungen
abrufen, Zeit messen. Bricht es ab, steht hier die Ursache. */
try {
var t1 = Date.now();
var aw = await fetch("/webdesign/api-ausweis", { cache: "no-store" });
var awMs = Date.now() - t1;
if (!aw.ok) {
zeile("bad", "Ausweis für die Verwaltung",
"Die Zugangswand gibt keinen aus (Status " + aw.status + "). "
+ "Dann fragt die Verwaltung nach dem Code — das ist die Ursache.");
} else {
var awD = await aw.json();
if (!awD.ausweis) {
zeile("bad", "Ausweis für die Verwaltung",
"Kein Ausweis" + (awD.grund ? " (" + awD.grund + ")" : "")
+ ". Ohne ihn kann die Verwaltung keine Daten laden.");
} else {
zeile("gut", "Ausweis für die Verwaltung", "Erhalten in " + awMs + " ms.");
/* Jetzt der eigentliche Abruf -- mit eigenem Zeitlimit, damit
die Diagnose nicht selbst haengt, wenn die Adresse haengt. */
var abbruch = new AbortController();
var wecker = setTimeout(function () { abbruch.abort(); }, 12000);
var t2 = Date.now();
try {
var ein = await fetch(API + "/webdesign/admin/einstellungen", {
headers: { Authorization: "Bearer " + awD.ausweis },
cache: "no-store",
signal: abbruch.signal,
});
var einMs = Date.now() - t2;
var txt = await ein.text();
if (ein.status === 200) {
zeile("gut", "Einstellungen abrufen",
"Erfolgreich in " + einMs + " ms (" + txt.length + " Zeichen Antwort).");
} else {
zeile("bad", "Einstellungen abrufen",
"Status " + ein.status + " nach " + einMs + " ms. Antwort: " + txt.slice(0, 160));
}
} catch (e2) {
zeile("bad", "Einstellungen abrufen",
e2.name === "AbortError"
? "KEINE Antwort innerhalb von 12 Sekunden — die Anfrage bleibt hängen."
: "Fehlgeschlagen: " + (e2.message || e2.name));
} finally { clearTimeout(wecker); }
}
}
} catch (e) {
zeile("bad", "Ausweis für die Verwaltung", "Nicht abrufbar: " + (e.message || ""));
}
/* 5. Anmeldung im Browser vorhanden? */
try {
var tok = sessionStorage.getItem("wd-vw-token");