log navigator route requests

This commit is contained in:
синечка ♡ 2026-09-14 12:07:27 +00:00
parent 7e030d1059
commit e7ca24e676
5 changed files with 21 additions and 24 deletions

1
.gitignore vendored
View file

@ -14,3 +14,4 @@ config.py
.env .env
.venv .venv
/schedule_requests.json* /schedule_requests.json*
/navigator_requests.json*

View file

@ -13,7 +13,6 @@ from models.schedule import (
group_target, group_target,
search_targets, search_targets,
) )
from models.schedule_request_log import append_schedule_request
from models.user import getAllUsers, validate from models.user import getAllUsers, validate
from utils import convert from utils import convert
@ -34,10 +33,6 @@ def start(message: Message):
if not search_target_kind: if not search_target_kind:
return send(message, "Не удалось определить тип расписания по ссылке.") return send(message, "Не удалось определить тип расписания по ссылке.")
search_query = convert.decode(query[3:]) search_query = convert.decode(query[3:])
try:
append_schedule_request(search_query)
except (OSError, ValueError) as error:
logger.error("Schedule", f"[{user.id}] Failed to save request: {error}")
try: try:
results = search_targets(search_target_kind, search_query, limit=10) results = search_targets(search_target_kind, search_query, limit=10)
except ScheduleAPIError as error: except ScheduleAPIError as error:
@ -128,10 +123,6 @@ def _finish_registration(message: Message, group_name: str) -> None:
) )
def selectGroupState(message: Message): def selectGroupState(message: Message):
query = (message.text or "").strip() query = (message.text or "").strip()
try:
append_schedule_request(query)
except (OSError, ValueError) as error:
logger.error("Schedule", f"[{message.from_user.id}] Failed to save request: {error}")
try: try:
matches = find_main_groups(query) matches = find_main_groups(query)
if len(matches) == 1 and group_exists(query): if len(matches) == 1 and group_exists(query):

View file

@ -17,6 +17,7 @@ from models.navigator import (
encode_route, encode_route,
parse_route_request, parse_route_request,
) )
from models.navigator_request_log import append_navigator_request
_SEEN_REQUESTS: dict[tuple[int, str], float] = {} _SEEN_REQUESTS: dict[tuple[int, str], float] = {}
@ -124,6 +125,11 @@ def route_request_from_webapp(message: Message):
if not _validate_map_rooms(request): if not _validate_map_rooms(request):
return send(message, "Одной из аудиторий нет на карте. Выбери аудитории из подсказок.") return send(message, "Одной из аудиторий нет на карте. Выбери аудитории из подсказок.")
try:
append_navigator_request(request)
except (OSError, ValueError) as error:
logger.error("Navigator", f"[{message.from_user.id}] failed to save request: {error}")
try: try:
route = calculate_route(request) route = calculate_route(request)
except Exception as error: # keep a future adapter from breaking polling except Exception as error: # keep a future adapter from breaking polling

View file

@ -9,7 +9,6 @@ from models.schedule import (
generateWeekSchedule, generateWeekSchedule,
search_targets, search_targets,
) )
from models.schedule_request_log import append_schedule_request
from models.user import User, validate from models.user import User, validate
@ -109,13 +108,8 @@ def search_query(message: Message):
return open_schedule_viewer(message, selected) return open_schedule_viewer(message, selected)
kind = str(user.state).partition(":")[2] kind = str(user.state).partition(":")[2]
query = message.text or ""
try: try:
append_schedule_request(query) results = search_targets(kind, message.text or "", limit=10) # type: ignore
except (OSError, ValueError) as error:
logger.error("Schedule", f"[{user.id}] Failed to save request: {error}")
try:
results = search_targets(kind, query, limit=10) # type: ignore
except ScheduleAPIError as error: except ScheduleAPIError as error:
logger.error("Schedule", f"[{user.id}] {error}") logger.error("Schedule", f"[{user.id}] {error}")
return send(message, "Сервер расписания сейчас недоступен. Попробуй ещё раз позже.") return send(message, "Сервер расписания сейчас недоступен. Попробуй ещё раз позже.")

View file

@ -5,18 +5,16 @@ import threading
from pathlib import Path from pathlib import Path
from zoneinfo import ZoneInfo from zoneinfo import ZoneInfo
from .navigator import RouteRequest
_MOSCOW = ZoneInfo("Europe/Moscow") _MOSCOW = ZoneInfo("Europe/Moscow")
_LOG_PATH = Path("schedule_requests.json") _LOG_PATH = Path("navigator_requests.json")
_LOCK = threading.RLock() _LOCK = threading.RLock()
def append_schedule_request(request: str) -> None: def append_navigator_request(request: RouteRequest) -> None:
"""Append a user-entered schedule search to the persistent JSON history.""" """Append a validated navigator request to the persistent JSON history."""
value = request.strip()
if not value:
return
with _LOCK: with _LOCK:
try: try:
with _LOG_PATH.open("r", encoding="utf-8") as file: with _LOG_PATH.open("r", encoding="utf-8") as file:
@ -30,7 +28,14 @@ def append_schedule_request(request: str) -> None:
history.append( history.append(
{ {
"time": datetime.datetime.now(_MOSCOW).isoformat(timespec="seconds"), "time": datetime.datetime.now(_MOSCOW).isoformat(timespec="seconds"),
"request": value, "start": {
"room": request.start.room,
"floor": request.start.floor,
},
"end": {
"room": request.end.room,
"floor": request.end.floor,
},
} }
) )