Skip to content

Releases: Adam-Sizzler/v2ray-stat

v26.2.22

22 Feb 11:05

Choose a tag to compare

v26.2.22 Pre-release
Pre-release

Full Changelog: v26.2.15...v26.2.22

v26.2.15

14 Feb 17:04

Choose a tag to compare

v26.2.15 Pre-release
Pre-release

Full Changelog: v26.1.27...v26.2.15

Новый UI: Масштабное обновление фронтенда. Добавлены новые скрипты (script.js), стили (styles.css) и библиотека иконок (svg.js) для интерфейса подписок.

  • Безопасность доступа: Внедрен AuthMiddleware. Теперь доступ к статическим активам API защищен проверкой сессионного токена. В случае отсутствия авторизации реализован редирект.

  • Защита от кэширования: Добавлены заголовки Cache-Control: no-store, чтобы гарантировать актуальность проверки сессии при каждом запросе.

Улучшение обработки данных

  • Гибкие единицы измерения: Функция FormatData теперь поддерживает динамический выбор единиц (bps, byte, MiB, GiB и т.д.) на основе конфигурации мониторинга.

  • Логирование: Добавлен LoggingMiddleware для детального отслеживания HTTP-запросов (метод, путь, время ответа, IP).

v26.1.27

26 Jan 19:43

Choose a tag to compare

v26.1.27 Pre-release
Pre-release

Full Changelog: v26.1.26...v26.1.27

Основные изменения

  • Рефакторинг статистики: Полностью переработана логика агрегации почасового трафика (aggregateHourlyStats). Теперь используется система накопления разницы (diff) через mutex, что повышает точность данных.

  • Умные фильтры истории: В HistoryStatsHandler добавлен параметр date с поддержкой "умного" парсинга (год, месяц, день или диапазон через запятую).

  • Режим суммирования: Добавлен флаг sum=true, позволяющий получить агрегированные данные за период с расчетом средней скорости (Rate).

  • Улучшение таблиц: В FormatTable добавлена поддержка выравнивания чисел по правому краю и автоматическое форматирование колонок Total и Rate (bps/byte).

Чистка кода

  • Удален неиспользуемый файл backend/db/temp.go.

  • Оптимизирована структура БД: удалены лишние поля updated_at из таблиц статистики.

v26.1.26

25 Jan 18:06

Choose a tag to compare

v26.1.26 Pre-release
Pre-release

Full Changelog: v26.1.23...v26.1.26

Новая функциональность

  • Добавлена система сбора исторической статистики с почасовой агрегацией данных
  • Новые API-эндпоинты для доступа к историческим данным:
    • /api/v1/history - JSON API с фильтрацией по периоду и типу данных
    • /api/v1/history-text - текстовое представление в виде таблицы
  • Поддержка группировки по пользователям/источникам и по времени

Изменения в структуре базы данных

  • Добавлены таблицы для хранения исторических данных:
    • daily_user_stats - статистика по пользователям
    • daily_source_stats - статистика по источникам (inbounds)
  • Созданы соответствующие индексы для оптимизации запросов

Улучшения конфигурации

  • Все порты в конфигурационных файлах теперь используют тип int вместо string
  • Улучшена валидация конфигурационных параметров
  • Обновлены регулярные выражения для парсинга логов

Изменения в логике работы с пользователями

  • Обновление учетных данных существующих пользователей вместо возврата ошибки при добавлении
  • Улучшен процесс синхронизации UUID пользователей между нодами
  • Добавлена очистка старых записей при замене UUID

Мониторинг и агрегация

  • Реализован фоновый процесс агрегации статистики каждые 10 минут
  • Добавлены механизмы для корректного расчета дельты трафика
  • Улучшено логирование процессов агрегации

Подписки и клиенты

  • Расширен список поддерживаемых клиентов для определения типа подписки
  • Добавлены новые user-agent для современных клиентов (Clash Meta, Sing-box и др.)

Исправления ошибок

  • Исправлены race conditions при работе с глобальными переменными статистики
  • Улучшена обработка ошибок в задачах (tasks)
  • Исправлены проблемы с форматами времени и часовыми поясами

Технические улучшения

  • Рефакторинг кода: вынесена логика агрегации в отдельные модули
  • Улучшена производительность запросов к базе данных
  • Добавлено более детальное логирование для отладки

API изменения

  • Перемещены legacy endpoint'ы в /api/v1/old/
  • Новые task-based endpoint'ы теперь являются основными для операций с пользователями
  • Улучшена структура ответов API

v26.1.23

22 Jan 17:45

Choose a tag to compare

v26.1.23 Pre-release
Pre-release

Full Changelog: v26.1.22.1...v26.1.23


🔁 Управление сервисами

  • Добавлен контекст с таймаутом при рестарте сервисов, чтобы операции не зависали бесконечно.
  • Улучшена логика рестарта Docker-контейнеров (singbox, xray) с корректной нормализацией имён.
  • После рестарта Docker-контейнера добавлена небольшая задержка для стабилизации состояния.

⚙️ Конфигурация Node

  • Упрощена и приведена в порядок config.yml.

  • Чётко разделены и переименованы флаги:

    • service_manager: systemd | docker
    • features.haproxy
    • features.restart
  • Обновлено регулярное выражение для парсинга access-логов Xray/Sing-box.

  • Удалены устаревшие и дублирующиеся параметры.

👥 Управление пользователями

  • Добавлены ретраи при получении списка пользователей после рестарта core-сервиса (add / delete).

  • Корректная обработка ситуации, когда API core-сервиса ещё не поднялся.

  • HAProxy:

    • Обновление CSV вынесено под единый флаг haproxy
    • Рестарт HAProxy выполняется только при включённой опции features.restart

🌐 Subscription handler

  • Улучшено определение клиентов Sing-box:

    • добавлена поддержка sfa, sfi, sfm, sft, karing, rabbithole
  • Более корректная классификация User-Agent’ов.

🧹 Прочее

  • Удалён случайно закоммиченный бинарный файл.
  • Код приведён к более предсказуемому и безопасному поведению при ошибках.

v26.1.22.1

22 Jan 16:12

Choose a tag to compare

v26.1.22.1 Pre-release
Pre-release

Full Changelog: v26.1.22...v26.1.22.1


🛠 Система версионирования (Build Info)

Теперь все компоненты системы (Backend, Node, Subscription) поддерживают расширенную информацию о сборке.

  • Добавлен флаг --version для бинарных файлов.
  • Вывод включает: версию, ревизию (git commit), теги сборки, статус CGO и версию Go.

🏗 Оптимизация жизненного цикла БД и ресурсов

  • Исправление утечки контекстов: Логика синхронизации БД вынесена в отдельную функцию performSyncCycle, что гарантирует корректную работу defer syncCancel() и предотвращает накопление ресурсов в памяти.
  • Безопасное переподключение SQLite: Теперь при пересоздании файловой базы старое соединение закрывается принудительно, исключая утечки файловых дескрипторов.
  • Graceful Shutdown: Исправлена работа с WaitGroup — теперь приложение корректно ожидает завершения всех фоновых задач перед выходом.

🐛 Исправления логики (Bug Fixes)

  • Статус Last Seen: Исправлена логика отображения статусов online/never в SQL-запросах. Порядок условий CASE приведен к корректному виду.
  • Мониторинг активности: Исправлено пороговое значение lastSeen в traffic_manager.go. Теперь статус активности пользователя (inactive) определяется корректно относительно временных меток.
  • Add User: Значение времени при добавлении пользователя инициализируется корректно (0 вместо текущего времени в определенных сценариях) для синхронизации состояний.

📦 Изменения в именовании артефактов

Бинарные файлы в релизах теперь имеют измененные названия:

  • v2ray-stat-backend ➡️ v2rs-backend
  • v2ray-stat-node ➡️ v2rs-node
  • v2ray-stat-sub ➡️ v2rs-sub

🔧 Технические изменения

  • Увеличены таймауты синхронизации БД до 15 секунд для повышения стабильности на медленных дисках.
  • Добавлена поддержка тегов сборки (например, journald) непосредственно в Docker-образы.

Как пользоваться новой проверкой версии:

./v2rs-backend --version
# Выведет:
# version: 26.1.22.1
# environment: go1.25 linux/amd64
# tags: journald
# revision: a1b2c3d4...
# cgo: enabled

v26.1.22

21 Jan 18:50

Choose a tag to compare

v26.1.22 Pre-release
Pre-release

Full Changelog: v26.1.21.2...v26.1.22

🚀 Release: Service Manager Refactoring & HAProxy CSV Integration

В данном обновлении мы значительно переработали логику управления сервисами и перешли на более надежный метод аутентификации в HAProxy через CSV-файлы.

🛠 Ключевые изменения:

1. Универсальный менеджер сервисов (ServiceManager)

Теперь поддерживается гибкое управление процессами в зависимости от среды окружения:

  • Systemd: Стандартное управление через systemctl для классических инсталляций.
  • Docker: Прямое управление контейнерами через Docker API (используется пакет github.com/docker/docker).
  • Гибкая конфигурация: В config.yml добавлен параметр service_manager, позволяющий выбрать способ перезапуска служб.

2. Интеграция HAProxy через CSV

Мы отказались от прямого редактирования Lua-скриптов в пользу стандартного механизма аутентификации HAProxy через CSV-таблицы:

  • Новый модуль haproxy/auth.go: Обеспечивает атомарную запись пользователей в users.csv с использованием временных файлов (защита от повреждения конфига).
  • Миграция: Файл auth_lua.go удален, логика перенесена в модуль обработки CSV.
  • Безопасность: Добавлено хеширование паролей (SHA-224) для протокола Trojan при записи в CSV.

3. Повышение отказоустойчивости (Graceful Error Handling)

  • Non-blocking Restart: Ошибки при рестарте ядра (Xray/Singbox) или HAProxy теперь логируются, но не прерывают выполнение основной операции. Это позволяет обновить конфигурационные файлы даже если служба временно недоступна или запускается вручную.
  • Таймауты: Для всех операций перезапуска добавлен контекст с таймаутом 15 секунд.

⚙️ Изменения в конфигурации (config.yml):

# Выбор менеджера: systemd или docker
service_manager: systemd 

features:
  haproxy_auth: true  # Включает обновление users.csv
  restart: true       # Автоматический перезапуск после изменений

📝 Список изменений (Short Changelog):

  • Refactor: Реализован интерфейс ServiceManager для поддержки Docker и Systemd.
  • Feature: Добавлена поддержка динамического обновления users.csv для HAProxy.
  • Fix: Исправлено прерывание удаления пользователей при ошибках systemctl (теперь выполнение продолжается).
  • Clean up: Удален устаревший функционал работы с Lua-файлами.

v26.1.21.2

20 Jan 18:38

Choose a tag to compare

v26.1.21.2 Pre-release
Pre-release

Full Changelog: v26.1.20...v26.1.21.2

  • Устранена ошибка, при которой не добавлялись ID пользователей в базу данных, из за чего не работала подписка при запросе к CC
  • Устранена ошибка связанная с часовым поясом
  • Добавлено логирование и переписана функция считывания логов, теперь сборки для docker образов не используют библиотеку "github.com/coreos/go-systemd/v22/sdjournal". Для этого использовать -tags [journald|nojournald]

v26.1.20

19 Jan 18:07

Choose a tag to compare

v26.1.20 Pre-release
Pre-release

Full Changelog: v26.1.19.2...v26.1.20

Native Journald Support & Flexible Log Parsing

  • Поддержка systemd-journald: Добавлена возможность читать логи напрямую из системного журнала. Это избавляет от необходимости настраивать запись в отдельные файлы и следить за их ротацией.

  • Гибкий маппинг полей (Log Mapping): Теперь вы можете сами определять, в каких группах регулярного выражения находятся IP, Domain и User. Это позволяет поддерживать Xray, Sing-box, HAProxy и любые другие сервисы без изменения кода.

  • Автоматическая ротация: Для файловых источников реализована функция runDailyCleanup, которая безопасно очищает файл лога раз в сутки, предотвращая переполнение диска.

Технические улучшения

  • Оптимизация Regex: Регулярные выражения теперь компилируются один раз при инициализации процессора, что значительно снижает нагрузку на CPU при обработке больших потоков логов.

  • Абстракция LogSource: Логика чтения вынесена в интерфейс LogSource, что позволило разделить реализацию для файлов и Journald.

  • Безопасный парсинг: Добавлены проверки на границы индексов групп в regex, что предотвращает панику приложения при неверных настройках конфигурации.

Изменения в конфигурации (config.yml)

Добавлены новые параметры в блок core:

core:
  log_source: "journal"          # Источник: "file" или "journal"
  log_service_name: "xray"       # Имя юнита для journald
  access_log_map:                # Маппинг групп регулярного выражения
    ip: 1
    domain: 2
    user: 3

v26.1.19.2

18 Jan 19:28

Choose a tag to compare

v26.1.19.2 Pre-release
Pre-release

Full Changelog: v26.1.19.1...v26.1.19.2

  • При добавлении новых пользователей в базу присмаивается значение равное 1 для колонки last_seen, что означает никогда не был подключен