Erster Stand des öffentlichen Ausschnitts aus dem Vault. Die .gitignore arbeitet als Positivliste: ausgeschlossen ist alles, eingeschlossen nur, was ausdrücklich wieder aufgenommen wird. Notizen, Projekte, Finanzen, das Sitzungsgedächtnis und settings.local.json bleiben damit außen vor. Der Kundenname in AI/Regelwerk/seo.md ist durch eine neutrale Bezeichnung ersetzt; die Regeln selbst sind unverändert. Co-Authored-By: Claude Opus 5 <[email protected]>
59 lines
2.1 KiB
Python
59 lines
2.1 KiB
Python
"""Eigener Lauf zu Teil 3b: Bekommen zwei Verbindungen am laufenden Backend denselben Snapshot?
|
|
|
|
Koordinator-Pruefskript, nicht fuers Repo. Laeuft in WSL gegen ws://127.0.0.1:8144/ws/uebersicht.
|
|
Frage: Tragen die Snapshots beider Verbindungen dieselben zeit-Werte (ein Bau je Takt), und kommt
|
|
der erste Snapshot einer spaeteren Verbindung sofort? Herkunft: Projektvorgabe (Spec, C4a).
|
|
Was es nicht sieht: die Zahl der Broker-Anfragen selbst (die zaehlt der Test mit der Attrappe).
|
|
"""
|
|
|
|
import asyncio
|
|
import json
|
|
import sys
|
|
import time
|
|
|
|
import websockets
|
|
|
|
PORT = sys.argv[1] if len(sys.argv) > 1 else "8144"
|
|
ADRESSE = f"ws://127.0.0.1:{PORT}/ws/uebersicht"
|
|
|
|
|
|
async def lies(name: str, anzahl: int, ergebnis: dict) -> None:
|
|
t0 = time.monotonic()
|
|
async with websockets.connect(ADRESSE) as strom:
|
|
zeiten = []
|
|
for i in range(anzahl):
|
|
daten = json.loads(await strom.recv())
|
|
if i == 0:
|
|
ergebnis[name + "_erste_nach_s"] = round(time.monotonic() - t0, 3)
|
|
zeiten.append(daten["zeit"])
|
|
ergebnis[name] = zeiten
|
|
|
|
|
|
async def main() -> int:
|
|
ergebnis: dict = {}
|
|
erste = asyncio.create_task(lies("a", 4, ergebnis))
|
|
await asyncio.sleep(2.0)
|
|
zweite = asyncio.create_task(lies("b", 3, ergebnis))
|
|
await asyncio.gather(erste, zweite)
|
|
print(json.dumps(ergebnis, indent=2))
|
|
gemeinsam = set(ergebnis["a"]) & set(ergebnis["b"])
|
|
print("gemeinsame zeit-Werte:", len(gemeinsam))
|
|
befunde = []
|
|
if len(gemeinsam) < 2:
|
|
befunde.append("die zwei Verbindungen teilen weniger als zwei Snapshots")
|
|
if ergebnis["b"][0] not in ergebnis["a"]:
|
|
befunde.append("der erste Snapshot der spaeteren Verbindung ist kein Snapshot der ersten")
|
|
if ergebnis["b_erste_nach_s"] > 1.0:
|
|
befunde.append(f"die spaetere Verbindung wartete {ergebnis['b_erste_nach_s']} s auf ihren ersten Snapshot")
|
|
for text in befunde:
|
|
print("BEFUND:", text)
|
|
return 2 if befunde else 0
|
|
|
|
|
|
if __name__ == "__main__":
|
|
try:
|
|
sys.exit(asyncio.run(main()))
|
|
except Exception as ausnahme:
|
|
print("BEFUND: unerwarteter Abbruch:", repr(ausnahme))
|
|
sys.exit(2)
|