CI / ruff · mypy · pytest (pull_request) Successful in 9m40s
- app/logs/grep.py: подмножество grep (шаблон, -i -v -E -c -C N), разбор shlex без исполнения, BRE → regex, таймаут на строку и бюджет на поиск, лимиты 200 символов / 500 строк вывода - app/logs/journal.py: каждый поиск в log_queries (L-6) - бот: выбор контейнера, хвост 50/200 строк или 5 мин/1 ч/24 ч, свой grep по 24 ч, длинный результат — файлом .log (L-5) - логи Docker: не больше 50 000 строк и 5 МБ, сохраняются новейшие - fix: кнопки меню и /menu, /help больше не проглатываются шагами ввода (имя файла, содержимое, сообщение коммита, grep) — фильтр free_input Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
16 lines
600 B
Python
16 lines
600 B
Python
"""Every log search is recorded: who, which container, what, how many lines came back (SPEC L-6)."""
|
|
|
|
from typing import Any
|
|
|
|
from app.db.models import LogMode, LogQuery
|
|
from app.db.session import SessionMaker
|
|
|
|
|
|
class LogJournal:
|
|
def __init__(self, sessions: SessionMaker) -> None:
|
|
self._sessions = sessions
|
|
|
|
async def record(self, user_id: int, container: str, mode: LogMode, query: dict[str, Any], lines: int) -> None:
|
|
async with self._sessions.begin() as session:
|
|
session.add(LogQuery(user_id=user_id, container=container, mode=mode, query=query, lines=lines))
|