This is the old XigmaNAS forum in read only mode,
it will taken offline by the end of march 2021!



I like to aks Users and Admins to rewrite/take over important post from here into the new fresh main forum!
Its not possible for us to export from here and import it to the main forum!

Автоматическое управление скоростю Transmission из под Win

Russian community

Moderators: alexey123, MikeMac

Forum rules
Set-Up GuideFAQsForum Rules
Post Reply
rvm
NewUser
NewUser
Posts: 11
Joined: 10 Sep 2012 08:44
Contact:
Status: Offline

Автоматическое управление скоростю Transmission из под Win

Post by rvm »

Всем привет!
Написал утилитку, которая из под Windows управляет Transmission на NAS4Free через SSH.
Нечто типа Автоматическое управление скоростью µTorrent или Автоматическое управление скоростью Transmission (xprintidle), только для transmission-remote и в виде консольного Windows-приложения.
Она проверяет состояние пользователя Активен/IDLE и выполняет команды. Команды любые, но в данном контексте это:

Code: Select all

ssh.exe root@10.10.10.10 transmission-remote -as --auth transmission:mypass
Почему выше указанные решения не подходят?
Первое нуждается в установке, и скрипт, судя по обсуждениям, может выдавать окна об ошибках. И вообще, это для µTorrent и его надо допиливать для работы с Transmission.
Второе не для винды, используется xprintidle. Снова надо допиливать, вызывать API из командной строки или что-то типа этого.
Поэтому написал своё.

А теперь вопрос!
Меня не покидает ощущение, что я изобретаю велосипед. Подскажите пожалуйста, может уже существует элегантное решение для Windows по автоматическому управлению (скоростью) Transmission на сервере? Просто не хочу смешить форум :D Но если кому эта тема интересна, то выложу свои скромные труды.


Update 21.11.2012
Итак, если у вас узкий канал в Интернет и в сети кроме качающего Transmission на сервере NAS4Free ещё и Windows машина, то эта утилита может вам пригодится для автоматической регулировки скорости Transmission. Я бы назвал её пафосно "Automatic Transmission", но на самом деле она тупА и просто выполняет команды по событиям:
* Пользователь активен
* Пользователь бездействует
Команды могут быть любыми и сама утилита не привязана к серверу или торрент-клиенту. Я осознаю, что всё это можно было реализовать на мною любимом и мощном nnCron, но мне показалось написание приложения хорошей идеей с точки зрения дальнейшего развития.

Image
Да, на картинку у меня ушло не меньше времени, чем на написание утилиты ))))

Установка.
Установка сводится к настройке авторизации SSH ключами, если у вас уже всё настроено, то можно переходить к пункту #5.

1. Прежде всего нужно установить OpenSSH. В сети много статей по этому вопросу, я пройдусь только по основным моментам. Уверен, что многие форумчане уже в курсе установки OpenSSH и широко используют этот пакет.

2. Генерация ключей:

Code: Select all

ssh-keygen -t rsa
Кстати, смена пароля на ключ:

Code: Select all

ssh-keygen -p


3. Содержимое публичного ключа копируется на NAS4Free в файл "authorized_keys" в каталоге пользователя, под которым мы будем авторизоваться на сервере без пароля.

Code: Select all

mkdir ~/.ssh 
touch ~/.ssh/authorized_keys  
chmod 600 ~/.ssh/authorized_keys
Процесс можно упростить. Команда

Code: Select all

ssh-copy-id user@server
позволяет скопировать ключ не редактируя файлы вручную.
Приватный ключ хранится на Windows-машине под разграниченными правами, понятно почему - он секретный. Далее ещё можно читать про "ssh-agent", "ssh-add" и пилить ssh_config.

4. Проверяем вход на сервер по SSH

Code: Select all

ssh -v user@server
При первом входе SSH интересуется доверяем ли мы ключу сервера? Если да, то в файл "~/.ssh/known_hosts" на Windows стороне добавляется ключ на известный сервер (в нашем случае NAS4Free).

5. Качаем WIDLE (Яндекс.Диск). Кладём исполняемый файл в удобное место, например "c:/usr/". При запуске утилита пытается найти файл конфигурации в рабочей директории. Если файл не найден, то создаётся по-умолчанию:

Code: Select all

# http://mytoiletserver.blogspot.com/ 
# Enable debug messages 
debug_messages = 1
# Enable intrusive call commands in demonizer mode 
intrusive_call = 1
# Timeout to switch in IDLE in seconds 
real_idle_timeout = 120
# Pause in cycle for check IDLE status in seconds 
time_cycle = 10
# Executing command in User-IDLE status 
command_idle = ssh.exe root@10.10.10.10 nohup /usr/local/bin/transmission-remote -AS -pr 240 --auth transmission:mypass
# Executing command in User-Active status 
command_active = ssh.exe root@10.10.10.10 nohup /usr/local/bin/transmission-remote -as -pr 4   --auth transmission:mypass 
debug_messages - Вывод дополнительной информации.
intrusive_call - Навязчивый режим. Это, когда команды выполняются после каждой проверки состояния IDLE, т.е. каждые time_cycle секунд. В противном случае, команды посылаются только при изменении состояния. Навязчевый режим подходит для управления скоростью в смешанном режиме. Когда управляет ещё кто либо, например CRON.
real_idle_timeout - Время инерции активности пользователя. Чувствительность в секундах.
time_cycle - Период проверки в секундах.
command_idle - Команда, выполняемая, при спящем пользователе.
command_active - Команда, выполняемая, при активном пользователе.
В команде мы видим вход на сервер 10.10.10.10 под пользователем root посредством SSH и дальнейший запуск "/usr/local/bin/transmission-remote" с аргументами/опциями "-as -pr 4 --auth transmission:mypass", означающими:
- авторизация с torrent-клиентом Transmission пользователем "transmission" и паролем "mypass";
- ограничение количества пиров в 4;
- включение альтернативной скорости.

Далее утилита выдаёт подсказку по ключам командной строки:
-h - this help
-p - print IDLE to display and return IDLE-value in exit-code
-i - interactive visualization IDLE
-z - demonizer for execute command in cycle

Режим печати может быть полезен при использовании утилиты в составе скриптов. Она возвращает значение IDLE и печатает в консоль (stdout). Режим визуализации бесполезен, но даёт представление об отсчёте IDLE-time в интерактивном режиме. И самый нужный режим - Демонайзер! В этом режиме в цикле происходит проверка состояния и выполняются те самые команды.

Использование.
Практическое использование подразумевает помещение утилиты в автозапуск. Спрятать окно можно утилитой Hidden Start с ключиком /NOCONSOLE.
widle.cmd / widle.lnk

Code: Select all

c:/usr/hstart.exe /NOCONSOLE "c:/usr/widle.exe -z"
Вопросы и идеи.
1. Под вопросом поведение в фоне, когда пользователь заблокирован. Тестировалось не достаточно.
2. Под вопросом функциональность после выхода из гибернации. Тестировалось не достаточно.
3. Определение двойников, запущенных под разными пользователями или на разных компьютерах в сети. Решение коллизий команд. Возможно, придётся оповещать дубликаты, используя сетевой протокол и реализовывать MASTER-SLAVE архитектуру с логическим ИЛИ по команде USER-ACTIVE (если хоть один активен, то скорость тушится). Либо формирование ограничения скорости по весу активных пользователей.
4. Сделать скрытый режим самостоятельно, без Hidden Start.
5. Добавление временнОй отметки AwayTime для многоступенчатой КПП
6. Введение списка процессов (firefox.exe, skype.exe...), при наличии которых вводится ограничение, а в противном случае считается, что пользователь активен, ну, скажем, в Lightroom или Photoshop и ограничивать скорость нет необходимости.
7. Подключение библиотеки инициализации и ведения журнала.
8. Помещение себя в автозапуск.
9. Отображение статуса иконкой в трее? Меняет концепцию консольного приложения.
10. Шифрованный способ хранения команд, так как в них впечатан пароль авторизации к torrent-клиенту Transmission. Но это при дикой популярности этой утилиты :lol:

Буду рад всем замечаниям и предложениям. Прошу принять участие в тестировании.

За историей и развитием утилиты можно следить на моём блоге http://mytoiletserver.blogspot.com/, посвящённом FreeNAS/NAS4Free.
Last edited by rvm on 21 Nov 2012 07:32, edited 4 times in total.

User avatar
alexey123
Moderator
Moderator
Posts: 1469
Joined: 19 Aug 2012 08:22
Location: Israel, Karmiel
Contact:
Status: Offline

Re: Автоматическое управление скоростю Transmission из под W

Post by alexey123 »

Что значит смешить форум? Написал - молодец, работает написанное значит еще больший молодец.
Непонятненькл только две вещи.
1.В сети кроме NAS4Free есть еще несколько компьютеров например. Каким образом NAS4Free определяет кому какой канал отдавать? Это воопщето задача роутера, но никак не NAS4Free. Правда не каждый роутер способен правильно делить трафик.
2. Я запускаю качалку примерно в 10 часов вечера ( в 2 ночи сервер выключается чтоб не шумел ). В это время никто не юзает канал и за 4 часа сервер успевает скачать 2-3 фильма.
Зачем чтото регулировать?
Home12.1.0.4 - Ingva (revision 7091)/ x64-embedded on AMD A8-7600 Radeon R7 A88XM-PLUS/ 16G RAM / UPS Ippon Back Power Pro 600
Lab 12.1.0.4 - Ingva (revision 7091) /x64-embedded on Intel(R) Core(TM) i3-3220 CPU @ 3.30GHz / H61M-DS2 / 4G RAM / UPS Ippon Back Power Pro 600

russian
Starter
Starter
Posts: 60
Joined: 27 Jul 2012 08:11
Location: Russia
Status: Offline

Re: Автоматическое управление скоростю Transmission из под W

Post by russian »

alexey123 wrote:Зачем чтото регулировать?
Не, ну не скажи. Бывает, поставишь что-нибудь массовое на скачивание, в выходные, к примеру. А тут хлоп - надо по удалёнке на работу зацепиться, или по нету хочется полазить. В таком случае у меня открыто окно с веб-мордой NASовской трансмиссии, и я там тыркаю в значок "черепахи", а если забуду потом обратно "оттыркнуть" то оно так и качает на черепаешьей скорости :) Автоматизация, если я её себе правильно понимаю, тут не повредит!
Nas4Free x64 9.2.0.1 rev.972; case: Lian Li PC Q08b; mb: ASUS E35M1-I; cpu: AMD E-350; mem: 4 Gb; hdd: 6xSATA

User avatar
alexey123
Moderator
Moderator
Posts: 1469
Joined: 19 Aug 2012 08:22
Location: Israel, Karmiel
Contact:
Status: Offline

Re: Автоматическое управление скоростю Transmission из под W

Post by alexey123 »

russian wrote:
alexey123 wrote:Зачем чтото регулировать?
Не, ну не скажи. Бывает, поставишь что-нибудь массовое на скачивание, в выходные, к примеру. А тут хлоп - надо по удалёнке на работу зацепиться, или по нету хочется полазить. В таком случае у меня открыто окно с веб-мордой NASовской трансмиссии, и я там тыркаю в значок "черепахи", а если забуду потом обратно "оттыркнуть" то оно так и качает на черепаешьей скорости :) Автоматизация, если я её себе правильно понимаю, тут не повредит!
Что не повредит я ж не против. Только удаленку делаешь или в тырнете псто пишешь ты не с НАСа, а со своего броузера, канал которого перехлестывается с каналом НАСа только на воротах.
От там и надо регулировать. Только как я уже сказал, не все роутеры умеют.
И еще, хорошо бы если это "неповредит" было мультиплатформенным.
Home12.1.0.4 - Ingva (revision 7091)/ x64-embedded on AMD A8-7600 Radeon R7 A88XM-PLUS/ 16G RAM / UPS Ippon Back Power Pro 600
Lab 12.1.0.4 - Ingva (revision 7091) /x64-embedded on Intel(R) Core(TM) i3-3220 CPU @ 3.30GHz / H61M-DS2 / 4G RAM / UPS Ippon Back Power Pro 600

rvm
NewUser
NewUser
Posts: 11
Joined: 10 Sep 2012 08:44
Contact:
Status: Offline

Re: Автоматическое управление скоростю Transmission из под W

Post by rvm »

alexey123 wrote:Что значит смешить форум?
Ну может уже давно есть решение, а я изобретаю велосипед.
alexey123 wrote:1.В сети кроме NAS4Free есть еще несколько компьютеров например. Каким образом NAS4Free определяет кому какой канал отдавать? Это воопщето задача роутера, но никак не NAS4Free. Правда не каждый роутер способен правильно делить трафик.
Всё верно. Задача роутера делить трафик шейпером. Но если у меня дома стоит тупой модем и медленный тариф на сеть из NAS4Free + (1-2) PC, то канал торрентами забивается полностью. Из браузера с соседнего (по сети) компьютера уже всё, педали. Как вариант ограничивать скорость в Transmission изначально в 80% от ширины. Но этот вариант на широкий канал. Да и 20% жалко.
russian wrote:
alexey123 wrote:Зачем чтото регулировать?
Не, ну не скажи. Бывает, поставишь что-нибудь массовое на скачивание, в выходные, к примеру. А тут хлоп - надо по удалёнке на работу зацепиться, или по нету хочется полазить. В таком случае у меня открыто окно с веб-мордой NASовской трансмиссии, и я там тыркаю в значок "черепахи", а если забуду потом обратно "оттыркнуть" то оно так и качает на черепаешьей скорости :) Автоматизация, если я её себе правильно понимаю, тут не повредит!
Да-да. Смысл в том, что автоматически, при активности пользователя, нажимается "черепашка".
alexey123 wrote:Что не повредит я ж не против. Только удаленку делаешь или в тырнете псто пишешь ты не с НАСа, а со своего броузера, канал которого перехлестывается с каналом НАСа только на воротах.
От там и надо регулировать. Только как я уже сказал, не все роутеры умеют.
Речь именно про "ворота" в сети, где NAS4Free + Windows

russian
Starter
Starter
Posts: 60
Joined: 27 Jul 2012 08:11
Location: Russia
Status: Offline

Re: Автоматическое управление скоростю Transmission из под W

Post by russian »

Камрад, даже если это велосипед - выкладывай. Кому будет от этого хуже, если в мире появится одним велосипедом больше.
Nas4Free x64 9.2.0.1 rev.972; case: Lian Li PC Q08b; mb: ASUS E35M1-I; cpu: AMD E-350; mem: 4 Gb; hdd: 6xSATA

rvm
NewUser
NewUser
Posts: 11
Joined: 10 Sep 2012 08:44
Contact:
Status: Offline

Re: Автоматическое управление скоростю Transmission из под W

Post by rvm »

Для стройности топика обновил шапку.
Компилировал и тестировал пока только под Win7 x64/x32.
Буду рад, если кто погоняет утилиту и на других версиях Windows.

rvm
NewUser
NewUser
Posts: 11
Joined: 10 Sep 2012 08:44
Contact:
Status: Offline

Re: Автоматическое управление скоростю Transmission из под W

Post by rvm »

Случился эпик-фэйл. Всё это не работало )))
По огромному количеству отзывов мне понятно, что тема не очень интересна, но для себя лично я её продолжаю и использую.
Сюда выкладываю на случай, если кто заинтересуется. Если начал, то надо и продолжать.

Версия ВТОРАЯ базируется на первой, но сильно переработана. Теперь WIDLE разумней называть не утилитой, а программой.
Скачать WIDLE v.0.0.2

Программа предназначена для отслеживания состояния пользователя по трём статусам:
Пользователь активен (ACTIVE)
Пользователь не активен (IDLE)
Пользователь ушёл (AWAY)

На состояния задаются там-ауты бездействия пользователя в настройках файла конфигурации:
- REAL_IDLE_TIMEOUT
- REAL_AWAY_TIMEOUT (в секундах)

Проверка состояния производится каждые TIME_CYCLE секунд.

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

Code: Select all

Windows User-IDLE-Time print & execute command in Demonizer-Mode v.0.0.2.0
Use it: widle.exe [one option]
 -h     - this help
 -p     - print IDLE to display and return IDLE-value in exit-code
 -v     - interactive visualization IDLE
 -i     - install WIDLE in Demonizer mode (-z) to Autorun from current DIR
 -u     - uninstall WIDLE from Autorun
 -e     - edit configuration in GUI
 -z     - Demonizer-Mode for execute command in cycle
 
Demo: widle.exe -v
 
        For more options edit 'widle.xml'
        And see http://mytoiletserver.blogspot.com/
 
To start the WIDLE with a particular option, press the corresponding key:
       [H, P, v, i, u, E, Z]
or other any key for exit...
-P - отображение времени бездействия пользователя в окне терминала и возвращение его значения в коде возврата программы. Этот режим может быть полезен при вызове программы из скриптов.
-V - интерактивная визуализация времени бездействия пользователя. Чисто демонстрационный режим.
-i - установка программы в автозапуск в режиме "Демонайзер".
-U - удаление программы из списка автозапуска.
-E - вызов диалогового окна редактирования конфигурации в GUI.
-Z - основной рабочий режим - "Демонайзер". В этом режиме программа в цикле проверяет статус пользователя и выполняет команды в соответствии с алгоритмом работы и настройками конфигурации.
Для старта программы с одной из опций можно нажать соответствующую кнопку или любую другую для закрытия приложения.

Файл конфигурации.
При первом запуске программы, она сама создаёт файл конфигурации в рабочей директории, рядом с собой. Файл имеет древовидный формат XML, что позволяет логически разделять (хоть и не многочисленные) блоки конфигурации. При запуске программы без аргументов предлагается отредактировать файл конфигурации в диалоговом окне GUI, нажав кнопку 'E'. Настройки программы хранятся в секции "ProgramOptions".

Навязчивость.
Существует два варианта реакции при проверке, которые переключаются флагом INTRUSIVE в файле конфигурации. При установленном флаге поведение программы является НАВЯЗЧИВЫМ, что означает выполнение соответствующей состоянию команды при каждой проверке, т.е. каждые TIME_CYCLE секунд. Этот режим может быть полезен при конкурирующем управлении, когда кроме WIDLE ещё управление может исходить, например, от CRON. В противном случае, команда выполняется только при смене состояния.

Проверка процессов.
В состоянии пользователя ACTIVE предусмотрена проверка запущенного Интернет-ориентированного процесса. Эта проверка выполняется при установленном флаге PROCESS_LIST. А список процессов задаётся в опциях файла конфигурации
PROCESS_LIST_N. Если пользователь активен, но не обнаружен ни один из списка Интернет-ориентированный процесс, то состояние приравнивается к IDLE. Использовать этот функционал есть смысл, если вы работаете, например, в Lightroom или Photoshop при не запущенном браузере или Skype.
Метод получения от системы списка запущенных процессов регулируется значением GET_PROCESSES_METHOD. Рекомендуемый метод: NTQuery=1. Он подходит как для 32-ух, так и для 64-ёх разрядных систем и процессов.
Но в современных реалиях часто оказывается, что браузер запущен постоянно и этот функционал является избыточным. Включайте его в случае необходимости повышения чувствительности алгоритма.

Команды.
В программе, в зависимости от состояния пользователя, предусмотрено выполнение три команды:
COMMAND_AWAY
COMMAND_IDLE
COMMAND_ACTIVE

Сами команды задаются в файле конфигурации и могут быть произвольными. Их выполнением занимается командный интерпретатор операционной системы.
В рамках управления скоростью закачки Transmission команды имеют вид, описанный в этой заметке.

Видимость и журналирование.
Отображать консольное окно или нет программа решает по флагу CONSOLE_HIDE_IN_DEMONIZER_MODE в файле конфигурации.
Степень отображаемой информации зависит от флагов:
LOG_ENABLE - ведение журнала
DEBUG_ENABLE - отображение и запись в журнал дебаг-сообщений
ADDITIONAL_MESSAGES - отображение и запись в журнал дополнительных сообщений

Остальные специфические настройки ведения журнала хранятся в секции CLOG. Внимания может удостоится параметр ALWAYS_OPEN_FILE_ENABLE. Его лучше установить в 0, если мы желаем просматривать журнал во время работы программы.

Установка.
Скачайте WIDLE v.0.0.2 на Yandex.Disk
Скопируйте файлы из архива в любое удобное место, например C:/USR
Запустите исполняемый файл, нажмите 'E', отредактируйте конфигурацию по вашим задачам.
Нажмите 'I' для установки программы в список автозапуска в режиме "Демонайзер".
Для удаления программы из списка автозапуска запустите её с аргументом -U, либо, запустив программу без аргументов командной строки, нажмите 'U'.

IXL.dll
IXL.dll - это динамически подключаемая библиотека, реализующая функционал ведения журнала и предоставляющая интерфейс к файлам конфигурации формата XML. Эта библиотека необходима для работы widle.exe.

Установка и настройка OpenSSH.
OpenSSH используется на стороне Windows для выполнения команд на удалённых UNIX/Linux серверах. WIDLE может выполнять любые команды, в том числе и вызов SSH с аргументами. Таким образом, связкой WIDLE-OpenSSH реализовано взаимодействие программных продуктов на различных платформах: Windows и UNIX/Linux. В рамках задачи управления скоростью закачки Transmission это взаимодействие можно представить следующей схемой последовательного выполнения команды управления:

Image

Установка OpenSSH
Генерация ключей:

Code: Select all

ssh-keygen -t rsa
Кстати, смена пароля на ключ:

Code: Select all

ssh-keygen -p
Содержимое публичного ключа копируется на сервер в файл "authorized_keys" в каталоге пользователя, под которым мы будем авторизоваться на сервере без пароля.

Code: Select all

mkdir ~/.ssh
touch ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
Процесс можно упростить. Команда

Code: Select all

ssh-copy-id user@server
позволяет скопировать ключ не редактируя файлы вручную. Приватный ключ хранится на Windows-машине под разграниченными правами, понятно почему - он секретный. Далее ещё можно читать про "ssh-agent", "ssh-add" и пилить ssh_config.
Проверяем вход на сервер по протоколу SSH

Code: Select all

ssh -v user@server
При первом входе SSH интересуется доверяем ли мы ключу сервера? Если да, то в файл "~/.ssh/known_hosts" на Windows стороне добавляется ключ к серверу.


Планы.
1. Реализация RPC-протокола Transmission. Так можно избавиться от применения не простого для многих в установке и настройке пакета OpenSSH. Переименование проекта в "Automatic-Transmission".
2. Реализация сетевого взаимодействия дубликатов программы для совместной регулировки скорости закачки одного Transmission от множества Windows PC в локальной сети с одним роутером, смотрящим в Интернет.
3. Шифрованный способ хранения паролей.
4. Реализация HotKeys, паузы и посылка команды Away при закрытии приложения.


Паранойя.
Программа WIDLE не оснащена вредоносным кодом. Весь функционал описан и скрытых возможностей приложение не имеет. Тем не менее, вы используете программу на свой страх и риск. Ни каких обязательств я ни перед кем не несу.

История написания, подробности и развитие в моём блоге

na_krul
NewUser
NewUser
Posts: 3
Joined: 27 Aug 2012 14:28
Status: Offline

Re: Автоматическое управление скоростю Transmission из под W

Post by na_krul »

А не проще QoS настроить?

rvm
NewUser
NewUser
Posts: 11
Joined: 10 Sep 2012 08:44
Contact:
Status: Offline

Re: Автоматическое управление скоростю Transmission из под W

Post by rvm »

na_krul wrote:А не проще QoS настроить?
В планах сравнение этих двух различных подходов.

rvm
NewUser
NewUser
Posts: 11
Joined: 10 Sep 2012 08:44
Contact:
Status: Offline

Re: Автоматическое управление скоростю Transmission из под W

Post by rvm »

na_krul wrote:А не проще QoS настроить?
Если есть в распоряжении роутер с шейпером, то наверняка трафик резать проще на роутере. Тут можно обратится на форумы IPCop или IPFire, например.
Но в случае обычного ADSL модема в домашней локальной сети, скорее, не возможно. Модем может выкидывать "лишние" исходящие пакеты, либо помечать пакеты по правилам для дальнейшей обработки по приоритетам на стороне провайдера, если провайдер не против этим заниматься. Входящий трафик по очередям не разбрасывается и не режется. А значит, этот функционал (QoS) заурядного ADSL модема бесполезен в случае, когда мы хотим ограничить скорость закачки торрент-клиентом. Мой родной белорусский провайдер-монополист предлагает вот такую картину:

Image


Просьба форумчанам! Я могу заблуждаться, может я всё не правильно понял. Пожалуйста, если кто имеет линк или опыт по настройке QoS в распространённых модемах, то пожалуйста поделитесь. Спасибо!

Post Reply

Return to “Российская”