Version 2.8.21: die Seite wartet nicht mehr stumm

This commit is contained in:
alientim committed 2026-09-13 14:14:38 +02:00
1 parent 3b3ce96678
commit a528e9f3b2
3 files changed
+35 -2

No files matched your search

+1 -1
View File
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
[project]
name = "tesm"
version = "2.8.20"
version = "2.8.21"
description = "TESM -- Verwaltung und Ueberwachung von PoE-Endgeraeten und Aruba-Switchen"
requires-python = ">=3.11"
dependencies = [
+1 -1
View File
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
[project]
name = "tesm-core"
version = "2.8.10"
version = "2.8.11"
description = "Gemeinsames Anwendungsgeruest (Auth, RBAC, Navigation, Design-System, Migrationen) fuer TESM und TESM-Lizenzserver"
requires-python = ">=3.11"
dependencies = [
@@ -38,6 +38,15 @@ const gescheitert = new Set();
//: RealVNC Server zaehlt abgebrochene Versuche mit -- wer dreimal anklopft,
//: sperrt sich aus.
const HOECHSTENS = 2;
//: So lange darf "wird aufgebaut" stehen, bevor die Seite selbst nachsieht.
//:
//: Der Server hat eigene Grenzen und meldet sich, wenn das Geraet schweigt --
//: aber nur, wenn die Leitung dorthin ueberhaupt steht. Kommt die
//: WebSocket-Verbindung gar nicht erst zustande, wartet noVNC ohne jedes
//: Ereignis, und die Seite stuende stumm bis zum Seitenwechsel. Genau so
//: gemeldet: "Verbindung wird aufgebaut ..." und sonst nichts.
const AUFBAU_GRENZE = 12000;
// Den *Grund* eines Fehlschlags kennt nur ``_fail`` -- das Ereignis
// "disconnect" traegt ihn nicht, und der Weg ueber die Protokollausgabe
// funktioniert nicht: die Bibliothek bindet ``console.error`` beim Laden, also
@@ -87,6 +96,7 @@ function starten(wurzel) {
);
let rfb = null;
let aufbauUhr = 0;
let versuche = 0;
let stand = false;
let letzterZugang = {};
@@ -164,6 +174,25 @@ function starten(wurzel) {
letzterCode = 0;
letzterZugang = zugang;
versuche += 1;
window.clearTimeout(aufbauUhr);
aufbauUhr = window.setTimeout(() => {
// Weder verbunden noch abgebrochen noch nach Zugangsdaten gefragt --
// dann haengt es an der Leitung, nicht am VNC-Server.
melden("Es kommt keine Antwort. Wird geprüft, woran es liegt …", "warnung");
streckeTesten().then((steht) => {
melden(
steht
? "Die WebSocket-Strecke zu TESM steht, aber die Sitzung kommt nicht " +
"zustande. Antwortet der VNC-Server auf dem Gerät noch? Ein Neustart " +
"des VNC-Dienstes räumt eine Sperre ab."
: "Die WebSocket-Verbindung zu TESM kommt nicht zustande – auch eine " +
"einfache Probe scheitert. Ein Proxy zwischen Browser und TESM muss " +
"die Kopfzeilen Upgrade und Connection durchreichen (nginx: " +
"location /ws/ mit proxy_set_header Upgrade $http_upgrade).",
"fehler",
);
});
}, AUFBAU_GRENZE);
// Was abgerissen ist, wird nicht noch einmal gewaehlt. Sonst faende noVNC
// dasselbe Verfahren wieder zuerst -- und der zweite Anlauf waere eine
@@ -185,6 +214,7 @@ function starten(wurzel) {
rfb.focusOnClick = true;
rfb.addEventListener("connect", () => {
window.clearTimeout(aufbauUhr);
stand = true;
melden(`Verbunden mit ${wurzel.dataset.ziel}`, "ok");
abfrage.hidden = true;
@@ -194,6 +224,7 @@ function starten(wurzel) {
});
rfb.addEventListener("disconnect", (ereignis) => {
window.clearTimeout(aufbauUhr);
leinwand.hidden = true;
knopfTrennen.hidden = true;
knopfStrg.hidden = true;
@@ -236,6 +267,7 @@ function starten(wurzel) {
});
rfb.addEventListener("credentialsrequired", (ereignis) => {
window.clearTimeout(aufbauUhr);
const gefragt = ereignis.detail.types || ["password"];
abfrage.hidden = false;
feldBenutzer.closest("label").hidden = !gefragt.includes("username");
@@ -244,6 +276,7 @@ function starten(wurzel) {
});
rfb.addEventListener("securityfailure", (ereignis) => {
window.clearTimeout(aufbauUhr);
melden(
`Anmeldung abgelehnt: ${ereignis.detail.reason || "kein Grund genannt"}`,
"fehler",