Add log time ranges and filter

This commit is contained in:
2026-02-07 22:43:35 +03:00
parent 86fe88e464
commit 23fa70f15c
3 changed files with 111 additions and 6 deletions

View File

@@ -4,7 +4,8 @@ from app import dp
from auth import is_admin_msg
from keyboards import docker_kb, docker_inline_kb
from services.docker import container_uptime, docker_cmd
from state import DOCKER_MAP
from state import DOCKER_MAP, LOG_FILTER_PENDING
import time
async def cmd_docker_status(msg: Message):
@@ -74,3 +75,39 @@ async def dl(msg: Message):
async def ds(msg: Message):
if is_admin_msg(msg):
await cmd_docker_status(msg)
@dp.message(F.text)
async def log_filter_input(msg: Message):
if not is_admin_msg(msg):
return
pending = LOG_FILTER_PENDING.pop(msg.from_user.id, None)
if not pending:
return
alias = pending["alias"]
real = DOCKER_MAP.get(alias)
if not real:
await msg.answer("⚠️ Container not found", reply_markup=docker_kb)
return
needle = (msg.text or "").strip()
if not needle:
await msg.answer("⚠️ Empty filter text", reply_markup=docker_kb)
return
since_ts = str(int(time.time() - int(pending.get("since_sec", 1800))))
rc, out = await docker_cmd(["logs", "--since", since_ts, "--tail", "400", real])
if rc != 0:
await msg.answer(out, reply_markup=docker_kb)
return
lines = [line for line in out.splitlines() if needle.lower() in line.lower()]
filtered = "\n".join(lines) if lines else "(no matches)"
await msg.answer(
f"📜 **Logs filter: {alias}**\n```{filtered}```",
parse_mode="Markdown",
reply_markup=docker_kb,
)