Version 2.8.19: Sitzung haelt Stille aus, kein Aenderungsprotokoll

This commit is contained in:
alientim committed 2026-09-13 13:56:57 +02:00
1 parent d34baa67be
commit 42316ba137
3 files changed
+30 -28

No files matched your search

+1 -1
View File
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
[project]
name = "tesm"
version = "2.8.18"
version = "2.8.19"
description = "TESM -- Verwaltung und Ueberwachung von PoE-Endgeraeten und Aruba-Switchen"
requires-python = ">=3.11"
dependencies = [
+8 -6
View File
@@ -411,12 +411,14 @@ def vnc_connection(device_id: int):
ziel = vnc.ziel(device)
if not ziel:
abort(404)
with transaction():
_audit(
conn,
"device.vnc_opened",
str(device["name"]),
f"Verbindungsdatei für {ziel}:{port}",
# Kein Eintrag in der Aenderungskette: eine Verbindungsdatei ist derselbe
# Vorgang wie die Sitzung im Browser, nur fuer einen Viewer auf dem
# Arbeitsplatz -- und sie aendert nichts. Wer zusieht, steht im laufenden
# Protokoll; das Aenderungsprotokoll bleibt die Liste der Eingriffe.
live = core().registry.get("live_log")
if live is not None:
live.info(
"vnc", f"{current_user.username} lädt die Verbindungsdatei für {device['name']}"
)
return Response(
vnc.verbindungsdatei(
+21 -21
View File
@@ -231,19 +231,25 @@ def _strecke(ws, device_id: int) -> None: # type: ignore[no-untyped-def]
except OSError as exc:
ws.close(1011, f"{host}:{port} antwortet nicht ({exc}).")
return
# Das Zeitlimit galt dem *Aufbau* -- danach muss es weg.
#
# ``create_connection`` setzt es an den Socket, und dort gilt es fuer jede
# weitere Leseoperation. Ein Bildschirm, auf dem sich gerade nichts tut,
# schickt sekundenlang nichts; nach sechs Sekunden Stille brach das Lesen
# mit einer Zeitueberschreitung ab, und die Sitzung war weg. Genau so
# beobachtet: Bild steht, nach fuenf bis zehn Sekunden Schluss.
gegenstelle.settimeout(None)
# Ins **laufende** Protokoll, nicht in die Aenderungskette: eine
# Bildschirmsitzung aendert nichts an der Anlage. Das Aenderungsprotokoll
# soll beantworten, wer was umgestellt hat -- wer wann zugesehen hat,
# gehoert nicht in dieselbe Liste und macht sie in einem Betrieb mit
# ein paar Dutzend Geraeten unlesbar. Sichtbar ist die Sitzung trotzdem,
# solange sie laeuft.
begonnen = time.monotonic()
with extension.database.transaction(conn):
audit.log(
conn,
actor=current_user.username,
actor_id=current_user.id,
action="device.screen_opened",
target=str(device["name"]),
detail=f"Bildschirmsitzung zu {host}:{port}",
ip=client_ip(),
severity="warning",
)
live = extension.registry.get("live_log")
if live is not None:
live.info("vnc", f"{current_user.username} öffnet den Bildschirm von {device['name']}")
laeuft = threading.Event()
laeuft.set()
@@ -289,14 +295,8 @@ def _strecke(ws, device_id: int) -> None: # type: ignore[no-untyped-def]
pass
gegenstelle.close()
dauer = int(time.monotonic() - begonnen)
with extension.database.session() as frisch, extension.database.transaction(frisch):
audit.log(
frisch,
actor=current_user.username,
actor_id=current_user.id,
action="device.screen_closed",
target=str(device["name"]),
detail=f"Dauer {dauer}s",
ip=client_ip(),
severity="info",
if live is not None:
live.info(
"vnc",
f"Bildschirmsitzung {device['name']} beendet ({dauer}s)",
)