You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
81 lines
1.9 KiB
81 lines
1.9 KiB
# logbus/publisher.py
|
|
|
|
import logging
|
|
import os
|
|
|
|
logger = logging.getLogger("logbus")
|
|
|
|
logger.setLevel(logging.WARNING)
|
|
|
|
# ============================================================
|
|
# FILE LOGGER — log.txt in BOOKSCRAPER_OUTPUT_DIR
|
|
# ============================================================
|
|
try:
|
|
root = os.getenv("BOOKSCRAPER_OUTPUT_DIR", "output")
|
|
os.makedirs(root, exist_ok=True)
|
|
|
|
file_path = os.path.join(root, "log.txt")
|
|
|
|
file_handler = logging.FileHandler(file_path, mode="a", encoding="utf-8")
|
|
file_formatter = logging.Formatter("%(message)s") # exact zoals input
|
|
file_handler.setFormatter(file_formatter)
|
|
|
|
logger.addHandler(file_handler)
|
|
|
|
except Exception:
|
|
# Logging naar file mag nooit de app laten crashen
|
|
pass
|
|
|
|
|
|
def log(message: str):
|
|
"""
|
|
Dumb logger:
|
|
- skip lege messages
|
|
- stuur message 1:1 door
|
|
- geen prefixes
|
|
- geen mutaties
|
|
"""
|
|
|
|
if not message or not message.strip():
|
|
return
|
|
|
|
# console
|
|
logger.warning(message)
|
|
|
|
# UI-echo
|
|
try:
|
|
from scraper.ui_log import push_ui
|
|
|
|
push_ui(message)
|
|
except Exception:
|
|
pass
|
|
|
|
|
|
# ============================================================
|
|
# Delta-based log retrieval using Redis indexes
|
|
# ============================================================
|
|
|
|
|
|
def get_ui_logs_delta(last_index: int):
|
|
"""
|
|
Returns (new_lines, total_count)
|
|
Only returns log lines AFTER last_index.
|
|
|
|
Example:
|
|
last_index = 10 → returns logs with Redis indexes 11..end
|
|
"""
|
|
# Determine total lines in buffer
|
|
total = r.llen(UI_LOG_KEY)
|
|
|
|
if total == 0:
|
|
return [], 0
|
|
|
|
# First load OR index invalid → send entire buffer
|
|
if last_index < 0 or last_index >= total:
|
|
logs = r.lrange(UI_LOG_KEY, 0, -1)
|
|
return logs, total
|
|
|
|
# Only new lines:
|
|
new_lines = r.lrange(UI_LOG_KEY, last_index + 1, -1)
|
|
return new_lines, total
|