second version

This commit is contained in:
Dusan Vojacek
2026-04-03 14:23:16 +02:00
parent 897b95f728
commit 9f4126946d
105 changed files with 9738 additions and 1470 deletions

View File

@@ -0,0 +1,25 @@
import asyncio
import logging
from datetime import datetime, timezone
from .ws_manager import manager
class WSLogHandler(logging.Handler):
"""Posílá log záznamy přes WebSocket všem připojeným klientům /ws/logs."""
def emit(self, record: logging.LogRecord) -> None:
try:
loop = asyncio.get_running_loop()
except RuntimeError:
return
ts = datetime.fromtimestamp(record.created, tz=timezone.utc).strftime("%H:%M:%S")
msg = {
"ts": ts,
"level": record.levelname,
"logger": record.name.split(".")[-1],
"msg": record.getMessage(),
}
loop.call_soon_threadsafe(
lambda: asyncio.ensure_future(manager.broadcast_log(msg))
)