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

30 lines
4.9 KiB
Markdown

# TODO
## UI / UX
- [x] **Предупреждение о несохранённых изменениях при переходе между вкладками (Unsaved Changes Guard / Modal)**:
- Если у пользователя есть несохранённые изменения в настройках (`ModulesPage`, `SettingsPage` — сервер, боты и др.) и он переходит на другую вкладку (в боковом меню `Shell.tsx` или кнопками навигации), показывать pop-up диалог подтверждения.
- Опции в диалоге:
- **Сохранить (Save)** — сохранить внесённые изменения и перейти на выбранную страницу.
- **Сбросить (Discard)** — отменить несохранённые изменения и перейти на выбранную страницу.
- **Отмена (Cancel)** — остаться на текущей странице с сохранением введённых данных.
- *Контекст:* Предотвратит случайную потерю настроек, когда пользователь меняет параметры модуля/сервера и сразу уходит на вкладку Overview для запуска сервера (см. [Issue #45](https://github.com/Corfirean/coa-server-manager/issues/45)).
## Сервер и стабильность
- [x] **Автоподнятие сервера при падении (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) и кнопку разворота полного текста крашлога / копирования.