[PR #8140] [CLOSED] [Решение] Рефакторинг скрипта автоподбора стратегий. #208

Closed
opened 2026-07-19 00:42:13 +03:00 by mirror-bot · 0 comments

📋 Pull Request Information

Original PR: https://github.com/Flowseal/zapret-discord-youtube/pull/8140
Author: @MartinDawgor
Created: 12/28/2025
Status: ❌ Closed

Base: main ← Head: main


📄 Description

Продолжая тему поднятую в ветке проблем Issue 7890, готов представить стабильную версию Tester_Zapret.
Пересборке и рефакторингу подвергся почти весь код, старая структура кода была узконаправленной и не поддерживала некоторые специфичные функции, которые были мне необходимы.
Изменения коснулись как внутренней логики проводимых тестов и сравнения их результатов, так и общий вывод который теперь в html формате, с удобной таблицей сравнения по просьбе.

image

Слишком сильно вдаваться в функционал всего кода не буду, очень муторно и долго, и куча проблем возникла в процессе калибровки тестов. Основные особенности ниже:

  1. В новой версии реализована функция Start-WinWS-Safe. Она запускает не сам батник напрямую, а интерпретатор командной строки с жесткой привязкой рабочей директории. Исключены ошибки File Not Found внутри батников и падения скрипта из-за WriteErrorException. Скрипт игнорирует ложные срабатывания детектора завершения процесса.
  2. Используется пул потоков RunspaceFactory. Создается пул (по умолчанию 24 потока). Задачи проверки конкретного URL, конкретным протоколом, помещаются в очередь. Время полного прогона сокращено в 5-10 раз по сравнению с последовательным методом.
  3. Новая версия внедряет механизм Windows Job Objects. Через P/Invoke kernel32.dll создается именованный объект задания. Если скрипт PowerShell закрывается аварийно, система гарантированно убивает все связанные процессы. Это исключает появление пустых процессов, блокирующих порты.
  4. Чтобы драйвер успел отдохнуть между тестами, была введена попытка очистки накопившегося мусора в стеке и днс, а также добавлена отправка 2-3 разогревочных пакетов на гугл и майкрософт, перед тем как проводить тест.

Также исправлено много багов. Самые критичные ниже:

  1. В старой версии при высокой нагрузке или сбое внутри потока Runspace результат выполнения мог просто исчезнуть. Скрипт не возвращал ничего для конкретного сайта, нарушая структуру отчета.
  2. Использование UseShellExecute=$true при запуске батников приводило к конфликтам ввода/вывода в консоли PowerShell, из-за чего скрипт мгновенно закрывался без логов. Теперь используется Safe Wrapper.
  3. Ошибка в выборе лучшей стратегии. Скрипт просто сравнивал значения, но ничего не делает с результатом сравнения. Сейчас же эвристика полностью переписана, и вроде как работает нормально, но это не точно.
    И куча других мелких багов.

Кому то html будет мало, я постараюсь дополнительно сделать чистый вывод в обычный txt. Касательно правок, буду поддерживать пока целесообразно. О багах или предложениях пишите, буду разбирать. Чтобы заменить файл нужно также в service.bat буквально один символ _ вставить в название скрипта, как на скриншоте.

image

Если у вас летит большое количество timeout fail или вовсе lost, попробуйте снизить число одновременных потоков ParallelThreads. Честно компромисс пока не нашёл.

image

Чтобы заменить либо скачайте файл test_zapret.ps1.txt, уберите с конца .txt и закиньте в папку utils, затем откройте service.bat и добавьте _ в название в пути к файлу.


🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.

## 📋 Pull Request Information **Original PR:** https://github.com/Flowseal/zapret-discord-youtube/pull/8140 **Author:** [@MartinDawgor](https://github.com/MartinDawgor) **Created:** 12/28/2025 **Status:** ❌ Closed **Base:** `main` ← **Head:** `main` --- ### 📄 Description Продолжая тему поднятую в ветке проблем [Issue 7890](https://github.com/Flowseal/zapret-discord-youtube/issues/7890), готов представить стабильную версию Tester_Zapret. Пересборке и рефакторингу подвергся почти весь код, старая структура кода была узконаправленной и не поддерживала некоторые специфичные функции, которые были мне необходимы. Изменения коснулись как внутренней логики проводимых тестов и сравнения их результатов, так и общий вывод который теперь в html формате, с удобной таблицей сравнения [по просьбе](https://github.com/Flowseal/zapret-discord-youtube/issues/7890#issuecomment-3694185540). <img width="1884" height="913" alt="image" src="https://github.com/user-attachments/assets/b5ffd659-de62-48e5-8fcf-de70e3ae5f09" /> Слишком сильно вдаваться в функционал всего кода не буду, очень муторно и долго, и куча проблем возникла в процессе калибровки тестов. Основные особенности ниже: 1. В новой версии реализована функция Start-WinWS-Safe. Она запускает не сам батник напрямую, а интерпретатор командной строки с жесткой привязкой рабочей директории. Исключены ошибки File Not Found внутри батников и падения скрипта из-за WriteErrorException. Скрипт игнорирует ложные срабатывания детектора завершения процесса. 2. Используется пул потоков RunspaceFactory. Создается пул (по умолчанию 24 потока). Задачи проверки конкретного URL, конкретным протоколом, помещаются в очередь. Время полного прогона сокращено в 5-10 раз по сравнению с последовательным методом. 3. Новая версия внедряет механизм Windows Job Objects. Через P/Invoke kernel32.dll создается именованный объект задания. Если скрипт PowerShell закрывается аварийно, система гарантированно убивает все связанные процессы. Это исключает появление пустых процессов, блокирующих порты. 4. Чтобы драйвер успел отдохнуть между тестами, была введена попытка очистки накопившегося мусора в стеке и днс, а также добавлена отправка 2-3 разогревочных пакетов на гугл и майкрософт, перед тем как проводить тест. Также исправлено много багов. Самые критичные ниже: 1. В старой версии при высокой нагрузке или сбое внутри потока Runspace результат выполнения мог просто исчезнуть. Скрипт не возвращал ничего для конкретного сайта, нарушая структуру отчета. 2. Использование UseShellExecute=$true при запуске батников приводило к конфликтам ввода/вывода в консоли PowerShell, из-за чего скрипт мгновенно закрывался без логов. Теперь используется Safe Wrapper. 3. Ошибка в выборе лучшей стратегии. Скрипт просто сравнивал значения, но ничего не делает с результатом сравнения. Сейчас же эвристика полностью переписана, и вроде как работает нормально, но это не точно. И куча других мелких багов. Кому то html будет мало, я постараюсь дополнительно сделать чистый вывод в обычный txt. Касательно правок, буду поддерживать пока целесообразно. О багах или предложениях пишите, буду разбирать. Чтобы заменить файл нужно также в service.bat буквально один символ _ вставить в название скрипта, как на скриншоте. <img width="769" height="70" alt="image" src="https://github.com/user-attachments/assets/a30ed8a0-17a5-4084-ab39-2ae364a566e4" /> Если у вас летит большое количество timeout fail или вовсе lost, попробуйте снизить число одновременных потоков ParallelThreads. Честно компромисс пока не нашёл. <img width="344" height="128" alt="image" src="https://github.com/user-attachments/assets/a3f22d82-07b3-4c87-b8bd-b22b7742ba9a" /> Чтобы заменить либо скачайте файл [test_zapret.ps1.txt](https://github.com/user-attachments/files/24359356/test_zapret.ps1.txt), уберите с конца .txt и закиньте в папку utils, затем откройте service.bat и добавьте _ в название в пути к файлу. --- <sub>🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.</sub>
mirror-bot added the pull-request label 2026-07-19 00:42:13 +03:00
mirror-bot changed title from [PR #8140] [CLOSED] [Решение] Рефакторинг скрипта автоподбора стратегий. to [PR #8140] [Решение] Рефакторинг скрипта автоподбора стратегий. 2026-07-20 04:21:14 +03:00
mirror-bot changed title from [PR #8140] [Решение] Рефакторинг скрипта автоподбора стратегий. to [PR #8140] [CLOSED] [Решение] Рефакторинг скрипта автоподбора стратегий. 2026-07-20 23:18:50 +03:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: Utilities/zapret-discord-youtube#208