umbau 1.0
This commit is contained in:
@ -34,14 +34,15 @@ from dataclasses import dataclass, field
|
||||
class ActiveSession:
|
||||
session_id: int
|
||||
task: asyncio.Task
|
||||
user_id: int
|
||||
watchers: set[asyncio.Queue] = field(default_factory=set)
|
||||
|
||||
|
||||
_active: dict[int, ActiveSession] = {}
|
||||
|
||||
|
||||
def register(session_id: int, task: asyncio.Task) -> None:
|
||||
_active[session_id] = ActiveSession(session_id=session_id, task=task)
|
||||
def register(session_id: int, task: asyncio.Task, user_id: int) -> None:
|
||||
_active[session_id] = ActiveSession(session_id=session_id, task=task, user_id=user_id)
|
||||
|
||||
|
||||
def unregister(session_id: int) -> None:
|
||||
@ -56,6 +57,22 @@ def all_ids() -> set[int]:
|
||||
return set(_active.keys())
|
||||
|
||||
|
||||
def count_total() -> int:
|
||||
"""Anzahl aller laufenden Sitzungen auf diesem Prozess (E.4,
|
||||
Umsetzungsauftrag Teil E: globale Obergrenze)."""
|
||||
return len(_active)
|
||||
|
||||
|
||||
def count_for_user(user_id: int) -> int:
|
||||
"""Anzahl laufender Sitzungen eines Benutzers auf diesem Prozess (E.4:
|
||||
Obergrenze je Benutzer). Bewusst prozesslokal wie die gesamte Registry
|
||||
(siehe Moduldoc) -- bei einem einzelnen uvicorn-Worker (Standard-
|
||||
Deployment) ist das gleichbedeutend mit "insgesamt", bei mehreren
|
||||
Workern zaehlt es nur die auf DIESEM Worker laufenden Sitzungen dieses
|
||||
Benutzers."""
|
||||
return sum(1 for entry in _active.values() if entry.user_id == user_id)
|
||||
|
||||
|
||||
def add_watcher(session_id: int) -> asyncio.Queue | None:
|
||||
"""Meldet einen Beobachter fuer eine laufende Sitzung an. Gibt None
|
||||
zurueck, wenn die Sitzung nicht (mehr) auf diesem Prozess laeuft --
|
||||
|
||||
Reference in New Issue
Block a user