feat(logs): раздел «Логи» — хвост и свой grep (#16)
CI / ruff · mypy · pytest (pull_request) Successful in 9m40s
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>
This commit is contained in:
+37
-1
@@ -30,7 +30,6 @@ help:
|
||||
|
||||
section:
|
||||
commit: "📝 Коммит\n\nРаздел в разработке."
|
||||
logs: "📜 Логи\n\nРаздел в разработке."
|
||||
alerts: "🚨 Алерты\n\nРаздел в разработке."
|
||||
members: "👥 Участники\n\nРаздел в разработке."
|
||||
cancelled: "Отменено. Главное меню — кнопками внизу."
|
||||
@@ -167,3 +166,40 @@ status:
|
||||
hours: "ч"
|
||||
minutes: "мин"
|
||||
seconds: "с"
|
||||
|
||||
logs:
|
||||
title: "📜 Логи · выберите контейнер"
|
||||
empty: "Контейнеров tgit не найдено."
|
||||
unavailable: "Docker недоступен, попробуйте через минуту."
|
||||
container: |-
|
||||
📜 Логи · {name}
|
||||
|
||||
Хвост, свой grep по последним 24 ч или вопрос агенту.
|
||||
tail: "{n} строк"
|
||||
since: "за {period}"
|
||||
minutes: "{n} мин"
|
||||
hours: "{n} ч"
|
||||
grep_button: "🔎 Свой grep"
|
||||
agent_button: "🤖 Спросить агента"
|
||||
agent_soon: "Агент — в следующей версии."
|
||||
to_list: "⬅️ К контейнерам"
|
||||
to_container: "⬅️ К контейнеру"
|
||||
ask_grep: |-
|
||||
🔎 Выражение grep — ищу по логу {name} за 24 ч.
|
||||
|
||||
Например: <code>-i -C 2 error</code>
|
||||
Флаги: <code>-i</code> без регистра, <code>-v</code> кроме, <code>-E</code> расширенный regex, <code>-c</code> только число, <code>-C N</code> контекст.
|
||||
head_tail: "📜 <b>{name}</b> · {scope} · строк: {lines}"
|
||||
head_grep: "🔎 <code>{command}</code>\n<b>{name}</b> · за 24 ч · совпадений: {matched}"
|
||||
nothing: "Пусто."
|
||||
truncated: "Показаны первые {n} строк."
|
||||
partial: "Поиск остановлен по времени — просмотрена часть лога."
|
||||
skipped: "Пропущено строк из-за тяжёлого шаблона: {n}."
|
||||
sent_as_file: "Результат длинный — отправил файлом."
|
||||
err_empty: "Нужен шаблон, например: <code>-i error</code>"
|
||||
err_quotes: "Не закрыта кавычка."
|
||||
err_flag: "Флаг {arg} не поддерживается. Можно: -i -v -E -c -C N"
|
||||
err_context: "После -C нужно число от 0 до 10."
|
||||
err_extra: "Нужен один шаблон, а «{arg}» лишнее. Шаблон с пробелами — в кавычках."
|
||||
err_too_long: "Шаблон длиннее 200 символов."
|
||||
err_regex: "Шаблон не разбирается: {arg}"
|
||||
|
||||
Reference in New Issue
Block a user