Автоматическое управление скоростю Transmission из под Win
Posted: 19 Nov 2012 08:49
Всем привет!
Написал утилитку, которая из под Windows управляет Transmission на NAS4Free через SSH.
Нечто типа Автоматическое управление скоростью µTorrent или Автоматическое управление скоростью Transmission (xprintidle), только для transmission-remote и в виде консольного Windows-приложения.
Она проверяет состояние пользователя Активен/IDLE и выполняет команды. Команды любые, но в данном контексте это:
Почему выше указанные решения не подходят?
Первое нуждается в установке, и скрипт, судя по обсуждениям, может выдавать окна об ошибках. И вообще, это для µTorrent и его надо допиливать для работы с Transmission.
Второе не для винды, используется xprintidle. Снова надо допиливать, вызывать API из командной строки или что-то типа этого.
Поэтому написал своё.
А теперь вопрос!
Меня не покидает ощущение, что я изобретаю велосипед. Подскажите пожалуйста, может уже существует элегантное решение для Windows по автоматическому управлению (скоростью) Transmission на сервере? Просто не хочу смешить форум
Но если кому эта тема интересна, то выложу свои скромные труды.
Update 21.11.2012
Итак, если у вас узкий канал в Интернет и в сети кроме качающего Transmission на сервере NAS4Free ещё и Windows машина, то эта утилита может вам пригодится для автоматической регулировки скорости Transmission. Я бы назвал её пафосно "Automatic Transmission", но на самом деле она тупА и просто выполняет команды по событиям:
* Пользователь активен
* Пользователь бездействует
Команды могут быть любыми и сама утилита не привязана к серверу или торрент-клиенту. Я осознаю, что всё это можно было реализовать на мною любимом и мощном nnCron, но мне показалось написание приложения хорошей идеей с точки зрения дальнейшего развития.

Да, на картинку у меня ушло не меньше времени, чем на написание утилиты ))))
Установка.
Установка сводится к настройке авторизации SSH ключами, если у вас уже всё настроено, то можно переходить к пункту #5.
1. Прежде всего нужно установить OpenSSH. В сети много статей по этому вопросу, я пройдусь только по основным моментам. Уверен, что многие форумчане уже в курсе установки OpenSSH и широко используют этот пакет.
2. Генерация ключей:
Кстати, смена пароля на ключ:
3. Содержимое публичного ключа копируется на NAS4Free в файл "authorized_keys" в каталоге пользователя, под которым мы будем авторизоваться на сервере без пароля.
Процесс можно упростить. Команда позволяет скопировать ключ не редактируя файлы вручную.
Приватный ключ хранится на Windows-машине под разграниченными правами, понятно почему - он секретный. Далее ещё можно читать про "ssh-agent", "ssh-add" и пилить ssh_config.
4. Проверяем вход на сервер по SSH
При первом входе SSH интересуется доверяем ли мы ключу сервера? Если да, то в файл "~/.ssh/known_hosts" на Windows стороне добавляется ключ на известный сервер (в нашем случае NAS4Free).
5. Качаем WIDLE (Яндекс.Диск). Кладём исполняемый файл в удобное место, например "c:/usr/". При запуске утилита пытается найти файл конфигурации в рабочей директории. Если файл не найден, то создаётся по-умолчанию:
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
Вопросы и идеи.
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. Но это при дикой популярности этой утилиты
Буду рад всем замечаниям и предложениям. Прошу принять участие в тестировании.
За историей и развитием утилиты можно следить на моём блоге http://mytoiletserver.blogspot.com/, посвящённом FreeNAS/NAS4Free.
Написал утилитку, которая из под 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 на сервере? Просто не хочу смешить форум
Update 21.11.2012
Итак, если у вас узкий канал в Интернет и в сети кроме качающего Transmission на сервере NAS4Free ещё и Windows машина, то эта утилита может вам пригодится для автоматической регулировки скорости Transmission. Я бы назвал её пафосно "Automatic Transmission", но на самом деле она тупА и просто выполняет команды по событиям:
* Пользователь активен
* Пользователь бездействует
Команды могут быть любыми и сама утилита не привязана к серверу или торрент-клиенту. Я осознаю, что всё это можно было реализовать на мною любимом и мощном nnCron, но мне показалось написание приложения хорошей идеей с точки зрения дальнейшего развития.

Да, на картинку у меня ушло не меньше времени, чем на написание утилиты ))))
Установка.
Установка сводится к настройке авторизации SSH ключами, если у вас уже всё настроено, то можно переходить к пункту #5.
1. Прежде всего нужно установить OpenSSH. В сети много статей по этому вопросу, я пройдусь только по основным моментам. Уверен, что многие форумчане уже в курсе установки OpenSSH и широко используют этот пакет.
2. Генерация ключей:
Code: Select all
ssh-keygen -t rsaCode: Select all
ssh-keygen -p3. Содержимое публичного ключа копируется на NAS4Free в файл "authorized_keys" в каталоге пользователя, под которым мы будем авторизоваться на сервере без пароля.
Code: Select all
mkdir ~/.ssh
touch ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keysCode: Select all
ssh-copy-id user@serverПриватный ключ хранится на Windows-машине под разграниченными правами, понятно почему - он секретный. Далее ещё можно читать про "ssh-agent", "ssh-add" и пилить ssh_config.
4. Проверяем вход на сервер по SSH
Code: Select all
ssh -v user@server5. Качаем 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 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. Но это при дикой популярности этой утилиты
Буду рад всем замечаниям и предложениям. Прошу принять участие в тестировании.
За историей и развитием утилиты можно следить на моём блоге http://mytoiletserver.blogspot.com/, посвящённом FreeNAS/NAS4Free.

