Skip to content

v2.1.0.0

Choose a tag to compare

@SHULKERPLAY SHULKERPLAY released this 01 Jun 14:34
· 27 commits to main since this release
ba70990

Zapretyan Go \=> v2.1.0.0

В этом обновлениии введено огромное количество оптимизаций и нововведений в ядро для оптимального потребления ресурсов и гибкости настроек.

Нововведения

  • Разрешён запуск ядра без расширений. Ядро выдаст предупреждение и запустится с сохранением функционала скачивания, слияния и дедубликации списков
  • Источники доменов и IP адресов принимают массив ссылок вместо одного значения и объединяются в один файл без дубликатов
  • Добавлен отдельный флаг для отключения цвета в консоли
  • Добавлена возможность установки приложения на автозапуск как системный сервис для Windows и дистрибутивов Linux с помощью флага --install
    • Если у вас возникли проблемы при установке на системах со средами под управлением OpenRC, SysVinit или Upstart. Создайте issue или внесите исправление и отправьте нам Pull Request с подробностями ошибки с которой вы столкнулись.
  • Добавлена поддержка установки сервиса для Linux сред systemd, openrc, upstart и sysvinit
  • Добавлена Полноценная поддержка работы в качестве системного сервиса Windows с полной поддержкой корректного запуска/остановки/перезапуска сервиса из services.msc или taskmgr
  • Добавлен флаг --uninstall для удаления ранее устаовленного системного сервиса для Windows и дистрибутивов Linux
  • Добавлен технический флаг --run для исполнения приложения в режиме системного сервиса для управления некоторыми функциями и коммуникацией с системой в случае Winsvc
  • При слиянии списков IP адресов распаковываются CIDR префиксы если таковые есть в файле. Это позволяет пользователю указывать в одном файле и/или разных ссылках одновременно и IP (как 1.1.1.1) адреса и целые подсети (как 1.1.0.0/16)
  • При ротации файлов добавлен лог для каких типов файлов будет выполнена ротация
  • Функция объединения и удаления дубликатов строк списков была модифицирована и теперь поддерживает любые из трёх типов списков
  • Многопоточный подход скачивания и сборки данных повсеместно заменён линейными последовательными функциями в целях экономии ОЗУ. Например, теперь все файлы скачиваются, смешиваются и дедублицируются последовательно, не выделяя память на несколько горутин выполняющих одинаковое действие одновременно. Это не повлияет на функционал и скорость, так как минимальный интервал итерации - 1 час. За 1 час далеко не у всех ресурсов появляются обновления
  • Добавлен флаг -dumpevent для отладочной записи первого отправленного события в JSON файл каждую итерацию.
  • Добавлено больше информации в стандартные выводимые логи
  • Добавлены дополнительные логи стадий сканнера
  • Добавлено предупреждение в консоль если старый файл типа списков не найден, предотвращая дальнейшую ошибку при попытке сравнить несуществующий файл
  • Переход на использование внешней сортировки при сравнении и слиянии файлов. Размер буфера строго ограничен и результаты сортировки записываются во временные файлы на диске, после чего сливаются в один отсортированный файл. Это очень сильно экономит ОЗУ, так как в памяти хранится не больше указанного количества строк и не нужно хранить и сортировать карту размером в 1.5млн элементов
  • Слияние, распаковка и дедубликация доменов, адресов и подсетей в списках переведена на байтовое сравнение строк, ограничена строгим размером буфера и записывает временные файлы на диск сортируя и удаляя дубликаты в памяти
  • Добавлены переопределения параметров при указании некоторых флагов
  • Добавлены паузы при ошибках приложения чтобы пользователь мог успеть прочитать ошибку перед закрытием в случае запуска из UI Windows. Паузы игнорируются в режиме системного сервиса
  • Добавлено отображение текущего статуса использования ОЗУ после этапов сканирования в логах отладки

Исправления и оптимизации

  • На основе прошлого билда было видно, что при огромных диффах пиковое потребление ОЗУ из-за постоянной аллокации места в памяти для карт достигало ~1ГБ во время процесса, что недопустимо. В аналогичных тестах этого обновления удалось снизить пиковое потребление ОЗУ до ~75МБ, что само по себе невероятная разница
  • Оптимизировано потребление ОЗУ при записи списков на диск
  • Оптимизировано потребление ОЗУ при записи строк в карты
  • Текстовый метод сравнения двух файлов заменён на построчное сканирование байт для экономии ОЗУ
  • Исправлена ошибка, когда при завершении работы программы до начала первого сканирования приложение завершало работу принудительно
  • Тяжёлые карты в памяти при сравнении двух файлов заменены на слайсы хранящие разницу
  • Точечные оптимизации выделения оперативной памяти под карты значений
  • Сборщик мусора запускается после каждого сканирования, в том числе и первого
  • Максимальный размер файла лога до ротации снижен до 8МБ
  • Изменён стандартный источник для IP адресов
  • Распаковка подсетей в адреса теперь происходит "на лету" при чтении скачанных файлов
  • Оптимизация этапов сбора данных для режимов http и hash.
  • Файлы из списка будут скачиваться только только при наличии хотя бы одного обновления на удалённом сервере (при "http") и в зависимости от настроек (при hash)
  • При ошибке загрузки файла, функция попытается повторить скачивание снова несколько раз, прежде чем вернуть ошибку
  • Скачивание файлов вынесено в этап отдельный от проверки наличия обновлений
  • Проверка хэша проводится для режимов hash и http и на её основе определяется необходимость ротации файлов. Даже если сервер отдаёт ложный заголовок Last-Modified, если файл не имеет обновлений, ротация не будет произведена, и вы не потеряете данные при сравнениях
  • Ротация файлов сообщества вынесена в единую функцию ротации файлов для всех типов списков
  • Сборщик мусора вызывается после итерации сканирования, а не в окончании функции самой итерации как было раньше
  • Исправлена ошибка, когда логи сохранялись в рабочую директорию окружения вместо директории с приложением
  • Исправлено отображение отсутствующего файла в логах при проверке на наличие обновлений списков
  • Исправлена ошибка, когда функция проверки хэша запрещала ротацию файлов если не найден новый файл конкретного списка
  • Исправлена ошибка, когда при проверке хэша запрет на ротацию типа списков заменялся разрешением или наоборот
  • Теперь хэш вычисляется только для типов списков, новые файлы которых были успешно загружены и слиты в один файл
  • Теперь при проверке заголовков на удалённом сервере пользователю отображается предупреждение только в случае неудачи
  • Исправлена ошибка, когда при отправке события фильтр проходили только события с пустыми диффами
  • Слияние списков доменов и адресов объединено в один пайплайн с динамическим поведением в зависимости от выбора режима

Full Changelog: v2.0.0.0...v2.1.0.0