Files
TwitchDropsMiner/src/web/managers/console.py
Fengqing Liu 9727a9b8d2 unify game selection and expectation logic (#32)
- unify game selection and expectation logic
- refactore settings and settings manager
- formatting and coverage and precommit hook
2026-01-19 00:39:58 +11:00

51 lines
1.4 KiB
Python

"""Console output manager for logging to web interface."""
from __future__ import annotations
import asyncio
from collections import deque
from datetime import datetime
from typing import TYPE_CHECKING
if TYPE_CHECKING:
from src.web.managers.broadcaster import WebSocketBroadcaster
import logging
logger = logging.getLogger("TwitchDrops")
class ConsoleOutputManager:
"""Manages console output display in the web interface.
Buffers log messages and broadcasts them to connected clients in real-time,
maintaining a rolling history of recent messages.
"""
def __init__(self, broadcaster: WebSocketBroadcaster, max_lines: int = 1000):
self._broadcaster = broadcaster
self._buffer: deque[str] = deque(maxlen=max_lines)
def print(self, message: str):
"""Print a message to the console output with timestamp.
Args:
message: The message to display
"""
timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
line = f"[{timestamp}] | {message}"
self._buffer.append(line)
asyncio.create_task(self._broadcaster.emit("console_output", {"message": line}))
logger.info(message)
def get_history(self) -> list[str]:
"""Get the current console history buffer.
Returns:
List of timestamped console messages
"""
return list(self._buffer)