feat(panel): обновление из репо, обслуживание БД, авто-прунинг, цветные логи и Сторож

- [U] Обновление из репозитория: бэкап -> git pull --ff-only -> npm install -> миграции
  -> рестарт -> health-check; при провале миграций/health предлагает откат (git reset --hard
  + восстановление БД из свежего бэкапа). Текущая версия (git short-hash + subject) в шапке.
- [M] Обслуживание БД: backend/scripts/db-maintain.js (node:sqlite) — integrity_check ->
  WAL checkpoint(TRUNCATE) -> VACUUM; VACUUM пропускается на битой БД. Авто-бэкап + стоп/старт.
- Авто-прунинг бэкапов: Backup-Db хранит последних 10 (Prune-Backups), Copy-DbFrom вынесен
  общим (реюз в Restore-Db и откате обновления), запоминается путь последнего бэкапа.
- Живые логи: отдельный tools/tail-logs.ps1 — раскраска уровней (ERROR/FATAL красным,
  WARN жёлтым, успех зелёным) вместо сырого tail; вынос из inline-команды (PS 5.1 quoting).
- Экран «Сторож»: дашборд в рамке с перерисовкой — статус-маркер, счётчики проверок/
  перезапусков, последнее событие; выход по клавише.
Все .ps1 — UTF-8 BOM, парсинг OK; db-maintain протестирован на копии БД (10.7->10.5 МБ);
рендер-смоук подтвердил выравнивание.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Maxim Dolgolyov
2026-06-19 23:10:52 +03:00
parent 27f51f1a61
commit 2e9a0ebfb1
3 changed files with 213 additions and 23 deletions
+28
View File
@@ -0,0 +1,28 @@
param([string]$Path)
# LearnSpace — просмотр живых логов сервера с раскраской уровней.
# Запускается панелью (control-panel.ps1, пункт «Живые логи») в отдельном окне.
# ERROR/FATAL — красным, WARN — жёлтым, успех/INFO — зелёным/серым.
try { chcp 65001 > $null } catch {}
try { [Console]::OutputEncoding = [System.Text.UTF8Encoding]::new() } catch {}
try { $Host.UI.RawUI.WindowTitle = 'LearnSpace — живые логи' } catch {}
Write-Host 'Живые логи (закройте окно, чтобы прекратить). ERROR — красным, WARN — жёлтым.' -ForegroundColor Cyan
Write-Host ''
if (-not $Path -or -not (Test-Path $Path)) {
Write-Host ('Файл логов не найден: ' + $Path) -ForegroundColor Red
Write-Host 'Запустите сервер через панель — лог появится в backend/logs/server.log.' -ForegroundColor DarkGray
return
}
Get-Content -Path $Path -Wait -Tail 60 | ForEach-Object {
$line = $_
$c = 'Gray'
if ($line -match '(?i)(\berror\b|\bfatal\b|\bunhandled\b|\bexception\b|error:|✗|✖)') { $c = 'Red' }
elseif ($line -match '(?i)(\bwarn\b|\bwarning\b|\bdeprecat)') { $c = 'Yellow' }
elseif ($line -match '(?i)(\blistening\b|server running|\bstarted\b|\bready\b|✓)') { $c = 'Green' }
elseif ($line -match '(?i)(\binfo\b|\bdebug\b)') { $c = 'DarkGray' }
Write-Host $line -ForegroundColor $c
}