Version 2.8.19: Sitzung haelt Stille aus, kein Aenderungsprotokoll
This commit is contained in:
1 parent
d34baa67be
commit
42316ba137
3 files changed
+30
-28
No files matched your search
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|||||||
|
|
||||||
[project]
|
[project]
|
||||||
name = "tesm"
|
name = "tesm"
|
||||||
version = "2.8.18"
|
version = "2.8.19"
|
||||||
description = "TESM -- Verwaltung und Ueberwachung von PoE-Endgeraeten und Aruba-Switchen"
|
description = "TESM -- Verwaltung und Ueberwachung von PoE-Endgeraeten und Aruba-Switchen"
|
||||||
requires-python = ">=3.11"
|
requires-python = ">=3.11"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
|
|||||||
@@ -411,12 +411,14 @@ def vnc_connection(device_id: int):
|
|||||||
ziel = vnc.ziel(device)
|
ziel = vnc.ziel(device)
|
||||||
if not ziel:
|
if not ziel:
|
||||||
abort(404)
|
abort(404)
|
||||||
with transaction():
|
# Kein Eintrag in der Aenderungskette: eine Verbindungsdatei ist derselbe
|
||||||
_audit(
|
# Vorgang wie die Sitzung im Browser, nur fuer einen Viewer auf dem
|
||||||
conn,
|
# Arbeitsplatz -- und sie aendert nichts. Wer zusieht, steht im laufenden
|
||||||
"device.vnc_opened",
|
# Protokoll; das Aenderungsprotokoll bleibt die Liste der Eingriffe.
|
||||||
str(device["name"]),
|
live = core().registry.get("live_log")
|
||||||
f"Verbindungsdatei für {ziel}:{port}",
|
if live is not None:
|
||||||
|
live.info(
|
||||||
|
"vnc", f"{current_user.username} lädt die Verbindungsdatei für {device['name']}"
|
||||||
)
|
)
|
||||||
return Response(
|
return Response(
|
||||||
vnc.verbindungsdatei(
|
vnc.verbindungsdatei(
|
||||||
|
|||||||
@@ -231,19 +231,25 @@ def _strecke(ws, device_id: int) -> None: # type: ignore[no-untyped-def]
|
|||||||
except OSError as exc:
|
except OSError as exc:
|
||||||
ws.close(1011, f"{host}:{port} antwortet nicht ({exc}).")
|
ws.close(1011, f"{host}:{port} antwortet nicht ({exc}).")
|
||||||
return
|
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()
|
begonnen = time.monotonic()
|
||||||
with extension.database.transaction(conn):
|
live = extension.registry.get("live_log")
|
||||||
audit.log(
|
if live is not None:
|
||||||
conn,
|
live.info("vnc", f"{current_user.username} öffnet den Bildschirm von {device['name']}")
|
||||||
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",
|
|
||||||
)
|
|
||||||
|
|
||||||
laeuft = threading.Event()
|
laeuft = threading.Event()
|
||||||
laeuft.set()
|
laeuft.set()
|
||||||
@@ -289,14 +295,8 @@ def _strecke(ws, device_id: int) -> None: # type: ignore[no-untyped-def]
|
|||||||
pass
|
pass
|
||||||
gegenstelle.close()
|
gegenstelle.close()
|
||||||
dauer = int(time.monotonic() - begonnen)
|
dauer = int(time.monotonic() - begonnen)
|
||||||
with extension.database.session() as frisch, extension.database.transaction(frisch):
|
if live is not None:
|
||||||
audit.log(
|
live.info(
|
||||||
frisch,
|
"vnc",
|
||||||
actor=current_user.username,
|
f"Bildschirmsitzung {device['name']} beendet ({dauer}s)",
|
||||||
actor_id=current_user.id,
|
|
||||||
action="device.screen_closed",
|
|
||||||
target=str(device["name"]),
|
|
||||||
detail=f"Dauer {dauer}s",
|
|
||||||
ip=client_ip(),
|
|
||||||
severity="info",
|
|
||||||
)
|
)
|
||||||
Reference in new issue
Block a user