Назад История изменений

Что изменилось

Список доработок дашборда — на человеческом языке. Каждый блок отвечает на вопрос «что это даёт вам как пользователю / администратору».

v1.0.0 23 мая 2026 Большой рефакторинг

Полная переработка денежного потока, архитектуры и тестового покрытия. Внешне ничего не поменялось — внутри дашборд стал в разы надёжнее.

💰 Деньги

  • Платежи и реферальные комиссии теперь атомарны. Когда клиент оплачивает счёт, его баланс, журнал движений и комиссия реферера обновляются в одной транзакции БД. Если что-то прервётся посередине (сетевой сбой, рестарт процесса) — ничего не сохранится частично. Раньше реферальная комиссия писалась отдельным запросом за пределами транзакции — при крайне редком, но возможном падении между ними бухгалтерия расходилась.
  • Журнал движений (billing_ledger) стал единственным источником истины. Старая таблица payments переведена в режим «только чтение» — все новые платежи попадают через журнал, дубликатов больше нет.
  • Защита от стирания свежих клиентских записей. Раньше сохранение списка клиентов работало по принципу «снести всё и записать заново» — в редкой ситуации могла затереться только что записанная строка устаревшим in-memory снапшотом. Теперь сохранение идёт аддитивно — только новые/изменённые поля.
  • Дубликаты ежедневных списаний защищены индексом. Уникальный индекс на (client_id, date, type='charge') — повторное списание за тот же день возвращает {duplicate: true} вместо двойного снятия.
Зачем это: деньги — это то, где ошибиться нельзя. Раньше при определённых стечениях обстоятельств можно было получить расхождение между балансом клиента, журналом и комиссией партнёра. Теперь это невозможно — либо все три записи прошли, либо ни одна.

🤖 ИИ-сводка в Telegram

  • Ежедневный анализ от Claude Opus 4.7. Каждое утро в 08:00 МСК после обычной сводки прилетает блок «🔍 ИИ-анализ за день» — с интерпретацией ключевых метрик, конкретными проблемами и рекомендациями.
  • Защита от пустых сводок. Бюджет токенов поднят с 4К до 32К — adaptive thinking успевает рассуждать. Раньше при сложных днях модель тратила весь бюджет на размышления и возвращала пустой ответ.
  • Диагностика причин ошибок. Если ИИ вернул пустой ответ — в логи теперь пишется ровно почему (упёрся в лимит, ошибка авторизации, перегрузка API).

🏗 Архитектура

  • Единый файл server.js (11 тыс. строк) разбит на 18 модулей-роутеров. Раньше всё лежало в одном месте, любая правка задевала случайные участки. Теперь auth / clients / billing / tochka / traffic / analytics / sla / proxies / simulator живут отдельно — править проще и риск зацепить чужое ушёл.
  • SQL-запросы вынесены в 5 репозиториев src/db/*. Все обращения к БД проходят через осмысленные функции вместо инлайн-SQL по всему коду.
  • Состояние централизовано в src/state/index.js. Раньше клиенты лежали в одной переменной, реферальные карты в другой, in-memory mirror журнала — в третьей. Любое расхождение давало баги вида «в БД одно, в ответе API другое».
  • 168 HTTP-эндпоинтов зафиксированы snapshot-тестом. Случайно удалить или переименовать ручку теперь не выйдет — тест падает.

🔒 Безопасность и качество

  • Восстановлен Content Security Policy. Браузер разрешает выполнять только наши скрипты + Chart.js, всё остальное блокируется на уровне политики — защита от XSS.
  • Ключ шифрования Tochka теперь обязателен. Раньше при отсутствии переменной $TOCHKA_CONFIG_KEY сервер делал производный ключ из имени хоста — при переезде на новый хост шифрование могло порваться. Теперь сервер просто откажется стартовать без явного ключа.
  • Все 44 «глухих» catch получили реакцию. Раньше ошибки могли молча проглатываться, теперь либо обрабатываются, либо пишутся в лог с уровнем warn/error.
  • ESLint 9 в строгом режиме, 0 ошибок. Кодовая база автоматически проверяется на типичные опасные паттерны.
  • 102 регрессионных теста. Покрывают денежный поток, аутентификацию, клиентский портал, веб-хуки Точки, миграции схемы.

⚙️ Эксплуатация

  • Безопасная запись файлов. Утечек состояния через unhandled promise rejection больше нет — все записи проходят через safeWriteFile.
  • Документация эксплуатации. Добавлен OPERATIONS.md с полной картой состояния: что в SQLite, что в JSON-файлах, как делать бэкап, что нельзя коммитить в git.
  • Совместимость с Node 20. Зависимости перепинованы под прод-окружение (Node 20.20), engine-strict в .npmrc блокирует установку несовместимых пакетов.
v0.9.0 3 мая 2026 Платформа

Симулятор нагрузки, ИИ-инсайты, перестройка вкладки аналитики, защита от потери данных.

🧪 Симулятор нагрузки

  • Имитация наплыва трафика на выбранные модемы: режимы ramp (плавный рост), burst (резкий всплеск), breaking-point (поиск предельной нагрузки).
  • Сравнение прогонов между собой, экспорт результатов, разбивка по каждому модему.
  • История запусков сохраняется — можно посмотреть как менялась устойчивость инфраструктуры со временем.

📊 Перестройка вкладки «Аналитика»

  • 5 подвкладок: Трафик, Инфраструктура (ротации + ёмкость + IP в одном месте), Доходность и др.
  • Удалены лишние блоки: «Планирование», «Логи доменов», «Последние неудачи в ротации».
  • Системный лог переехал в «Настройки» → «Состояние сервера».
  • Единая таблица модемов с разделителями по серверам + bulk-выбор по серверу через одну галочку.

❤️ Здоровье модемов

  • Новый health-score с порогом 5% ошибок, ступенчатой шкалой латентности, учётом длительности ротации.
  • Колонка «Здоровье» в общей таблице модемов + детальный разбор в модалке модема.
  • Аптайм считается по поллингу tracking'а (а не по UDEV драйверов ядра) — точнее.
  • Сглаживание неоднозначных часовых записей (uncertain=2) в часовом агрегаторе.
  • Сброс счётчиков в 03:00 МСК больше не даёт ложных нулей.

🛡 Защита от потери данных серверов

  • Метаданные серверов (S1, S2 и др.) теперь имеют версионную историю в kv_store_history.
  • Помощник kvSetCritical блокирует случайное уменьшение списка серверов (защита от ситуации «случайно стерли S2»).
  • Стартовая проверка целостности с baseline-сравнением — если в БД пропали критичные ключи, сервер сообщит.

💸 Биллинг + SLA

  • Исправлено race condition в начислении дневных списаний.
  • Добавлен SLA-tracking — учёт нарушений по доступности.
  • Аудит-лог использования API + системная вкладка с обзором процессов.
v0.8.0 11 апреля 2026 Мониторинг

Расширенный мониторинг прокси, авто-восстановление модемов, развёрнутая документация.

📡 Мониторинг

  • Замер задержки прокси. Через каждый порт регулярно прогоняется проверка — фиксируется connect-time и общее время ответа.
  • Аналитика по латентности: P75, P99, распределение, percentile cards в детальной модалке модема.
  • Bulk-операции: массовый сброс IP, ребут, OS Spoofing, ротация, экспорт — для выбранных модемов сразу.

🔧 Авто-восстановление

  • Авто-USB-reset для модемов, ушедших в оффлайн (вместо ручного дёрганья портов).
  • 9 точечных багфиксов: ротация, парсинг трафика, IP-история.

📝 Логирование

  • Полное логирование всех автоматических процессов (cron, билинг, ротация, ребуты) — теперь видно когда и почему сработал каждый автомат.
  • Развёрнутый README с описанием всех функций дашборда.
v0.7.0 6 апреля 2026 Серверы из БД

Конфигурация серверов переехала из .env в базу — управление через UI без перезапусков.

🗄 Изменения

  • Список серверов и стран хранится в SQLite (kv_store) — добавлять/убирать серверы можно из настроек без правки .env и рестарта.
  • Часовой агрегатор трафика версии 2 — корректнее работает с пропусками и поздними записями.
  • Поддержка серверов S3 и S4 в клиентском портале (прокси-креды, IP-адреса, фильтры).
  • Динамические COUNTRIES — флаги стран и группировки автоматически подтягиваются из объектов сервера.
v0.6.0 5 апреля 2026 Управление серверами

UI для управления серверами + поддержка переименования портов на разных моделях.

🛠 Изменения

  • Раздел «Серверы» в настройках — добавление/редактирование/удаление прямо из UI.
  • Переменная PORTNAME_OVERRIDE для серверов без поддержки переименования портов.
  • Слияние конфигурации порта при store_port — не теряет ранее заданные поля.
  • Корректная инвалидация кэша после изменения конфигурации модема.