6eefb70ce7
control-panel.ps1 расширена: - Бэкап БД [B] (копия learnspace.db+wal/shm с датой в data/backups) и восстановление [R] (выбор из списка, страховочная копия .pre-restore, авто-стоп/старт сервера). - Умный статус: health-пинг /api/health (+ms), размер БД, кол-во пользователей, последняя миграция (db-status.js), версия Node, сводка .env (CLIENT_ORIGIN/JWT/LLM). Кэш в . - Создать админа [A] → scripts/create-admin.js (bcrypt, upsert role=admin, busy_timeout). - Сторож [W]: авто-перезапуск при падении (выход по клавише). Логи в backend/logs (не %TEMP%), [E] ошибки из логов. Фиксы PS 5.1: порт/путь БД читаются из .env (inline node -e с кавычками 5.1 ломает); db-status вынесен в файл-скрипт; миграция по filename DESC; UTF-8 BOM, парсинг OK. Меню — лат.+рус. клавиши. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
16 lines
833 B
JavaScript
16 lines
833 B
JavaScript
'use strict';
|
|
/* db-status.js — краткая сводка БД для панели управления: "<users>|<lastMigration>".
|
|
Путь к БД: env DB_PATH, либо argv[2], либо стандартный. Никогда не бросает. */
|
|
const path = require('path');
|
|
const { DatabaseSync } = require('node:sqlite');
|
|
|
|
const DB = process.env.DB_PATH || process.argv[2] || path.join(__dirname, '..', 'data', 'learnspace.db');
|
|
let users = '?', migr = '-';
|
|
try {
|
|
const db = new DatabaseSync(DB);
|
|
try { users = db.prepare('SELECT COUNT(*) AS n FROM users').get().n; } catch (_) {}
|
|
try { const r = db.prepare('SELECT filename FROM _migrations ORDER BY filename DESC LIMIT 1').get(); if (r) migr = r.filename; } catch (_) {}
|
|
db.close();
|
|
} catch (_) {}
|
|
process.stdout.write(String(users) + '|' + String(migr));
|