Написал утилитку, которая из под 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.




