Files
Дмитрий be68eb4341 Add unsaved changes navigation guard and server auto-restart with crash analyzer
- Add UnsavedChangesGuard modal (Save/Discard/Cancel) when navigating between tabs
- Wire guard into ModulesPage and SettingsPage with floating action bar
- Implement crash parser and explanation engine in coa-core
- Expose list_crashes Tauri command and CrashItem API
- Add auto-restart on unexpected server crash with crash loop protection
- Add crash counter badge and CrashHistoryModal with human-readable explanations and full crashlogs
- Support all 6 locales (en, ru, de, fr, es, zh)
2026-10-08 18:58:41 +05:00

4.9 KiB

TODO

UI / UX

  • Предупреждение о несохранённых изменениях при переходе между вкладками (Unsaved Changes Guard / Modal):
    • Если у пользователя есть несохранённые изменения в настройках (ModulesPage, SettingsPage — сервер, боты и др.) и он переходит на другую вкладку (в боковом меню Shell.tsx или кнопками навигации), показывать pop-up диалог подтверждения.
    • Опции в диалоге:
      • Сохранить (Save) — сохранить внесённые изменения и перейти на выбранную страницу.
      • Сбросить (Discard) — отменить несохранённые изменения и перейти на выбранную страницу.
      • Отмена (Cancel) — остаться на текущей странице с сохранением введённых данных.
    • Контекст: Предотвратит случайную потерю настроек, когда пользователь меняет параметры модуля/сервера и сразу уходит на вкладку Overview для запуска сервера (см. Issue #45).

Сервер и стабильность

  • Автоподнятие сервера при падении (Auto-restart on crash) со счётчиком и расшифровкой крашей:
    • Настройка: Чекбокс «Автоматически перезапускать сервер при падении» в настройках сервера / менеджера.
    • Поведение автоподнятия:
      • Перезапускать процесс сервера только если падение произошло внезапно (процесс завершился с ненулевым exit code, крашем или без команды от менеджера).
      • Если пользователь нажал кнопку «Стоп» (Stop Server), сервер останавливается полностью, автоподнятие не срабатывает.
      • Защита от бесконечного цикла крашей (Crash Loop Protection): если за короткий интервал (например, 2-3 минуты) сервер падает более 3-5 раз, автоподнятие временно прекращается, а в UI выводится критическое оповещение.
    • Счётчик падений в интерфейсе:
      • Рядом со статусом сервера (или в шапке/панели состояния) показывать бейдж со счётчиком крашей с момента старта (например: Крашей: 2).
      • При клике на счётчик открывать окно / модалку со списком последних падений с точным временем.
    • Расшифровка причин краша (Crash Explanation Engine):
      • Как парсить и определять причину:
        1. Читать свежий текстовый файл из Core/Crashes/<hash>_worldserver.exe_[date].txt.
        2. Смотреть Exception code (например, C0000005 — нарушение доступа к памяти/access violation, C0000420 — сработавший assert ядра, C00000FD — переполнение стека, E06D7363 — исключение C++ / std::bad_alloc).
        3. При C0000420 парсить блок ASSERTION FAILED (Location, Function, Condition).
        4. Анализировать последние строки Core/Logs/Server.log и Errors.log на критические маркеры (потеря соединения с MySQL, нехватка RAM/OOM, ошибка бинда портов).
        5. Проверять по встроенному словарю известных сигнатур (паттерны частых крашей с понятным описанием, например: «Сбой удаления объекта из сетки карты», «Ошибка запроса к базе данных», «Нехватка оперативной памяти»).
      • Fallback: Если сигнатура не опознана в словаре известных проблем, показывать краткую техническую выжимку (код исключения + сработавший ассерт или вершина Call Stack) и кнопку разворота полного текста крашлога / копирования.