From d9ebcefc5e463dc83bb47c4ce41fd7f22939068d Mon Sep 17 00:00:00 2001 From: Rykov Date: Thu, 25 Dec 2025 01:10:20 +0300 Subject: [PATCH] Add logs page. --- src/config.py | 19 ++++++++++++++++++- src/webhook.py | 25 ++++++++++++++++++++++++- 2 files changed, 42 insertions(+), 2 deletions(-) diff --git a/src/config.py b/src/config.py index ae4e248..75685a1 100644 --- a/src/config.py +++ b/src/config.py @@ -1,5 +1,6 @@ import logging import os +from collections import deque from telebot import logger @@ -21,4 +22,20 @@ if not is_url_reachable(RULES_URL): logging.basicConfig(level=logging.INFO, format="%(asctime)s %(message)s", datefmt="%Y-%m-%d %H:%M:%S", force=True) logger.setLevel(logging.ERROR) -logging.critical(f'LOGGER {logging.getLogger()}: ') \ No newline at end of file + +# Лог в буфер для HTML: +log_buffer = deque(maxlen=1500) + +class BufferHandler(logging.Handler): + def emit(self, record): + log_buffer.append(self.format(record)) + + +buffer_handler = BufferHandler() +buffer_handler.setLevel(logging.ERROR) +buffer_handler.setFormatter(logging.Formatter( + "%(asctime)s %(levelname)s %(name)s | %(message)s", + datefmt="%Y-%m-%d %H:%M:%S" +)) + +logging.getLogger().addHandler(buffer_handler) diff --git a/src/webhook.py b/src/webhook.py index 65d57c5..c7d9542 100644 --- a/src/webhook.py +++ b/src/webhook.py @@ -1,12 +1,14 @@ import asyncio +import html import logging import requests import telebot from fastapi import FastAPI +from starlette.responses import HTMLResponse from .commands import bot -from .config import TOKEN +from .config import TOKEN, log_buffer logging.warning("[START] Webhook server") app = FastAPI(docs=None, redoc_url=None) @@ -22,6 +24,27 @@ async def webhook(update: dict): return None +@app.get("/stan-logs", response_class=HTMLResponse) +def logs(): + body = "
".join(html.escape(line) for line in log_buffer) + return f""" + + + + Stan Logs + + + {body} + + """ + + @app.get("/healthz") async def healthcheck(): """Проверка здоровья для Docker."""