Скрипт зчитує збережені дані про сесію rtorrent, створює звіт про статус torrent файлів і виводить код HTML на stdout, який далі можна перенаправити у файл і зробити його публічно доступним на веб-сервер. rbtorstat не підтримую віддалене адміністрування rTorrent. Але завдяки тому що у версії 0.7.5 була додана можливість віддаленого адміністрування використовуючи засоби xmlrpc (докладніше про це можна почитати тут) це не складе особливих труднощів. rbtorstat, як видно із заголовку переслідує зовсім інші цілі.
Початковий код rbtorstat базується на основі rtorstat, написаному Джорджом Нотарасом(George Notaras) на мові програмування Python.
Залежності:
- Ruby;
- bencode - бібліотека Ruby для перетворення даних Bencode (що використовується в протоколі BitTorrent) у послідовну форму;
- rTorrent - консольний BitTorrent-клієнт для Linux, написаний на мові програмування C++, сконфігурований для зберігання даних про сесії (про це докладніше далі);
rbtorstat повинен зчитувати дані сесії torrent, тому rTorrent потрібно налаштувати, так щоб зберігати цю інформацію у певну директорію. Далі наведений конфігураційний файл (.rtorrent.rc) :
port_range=6900-6999
download_rate = 64
upload_rate = 16
session = /opt/rtorrent
# Keeps session data files even if torrent has finished
session_on_completion = yes
session_lock = yes
# Save session data every 5 mins, with a 4 min offset
schedule = session_save,240,300,session_save=
Остання директива (schedule) вказує rTorrent щоб зберігати дані сесії кожні 5 хвилин з відгалуженням 4 хвилини. Це означає, що дані сесії будуть збережені, наприклад, о 00:04, 00:09, і т.д.
Використання:
Для виконання скрипта достатньо вказати у вихідному файлі коректний шлях до директорії із даними сесії rTorrent. На виході буде отриманий код HTML, який можна перенаправити у файл, наприклад так:
$ ruby rbtorstat.rb > /var/www/index.txt
Крім того його можна прописати до cron:
*/5 * * * * root ruby /path/to/rbtorstat.rb /opt/rtorrent/ > /var/www/index.html
Скрипт буде запускатись кожні 5 хвилин.
Результат можна переглянути на веб-сервері.
Завантажити:
Наразі чорновий варіант скрипта можна завантажити за адресою:
http://anton.linux.googlepages.com/rbtorstat.rb
Реальний приклад:
http://info.opoz.homeip.net/rbtorstat.html
Плани на майбутнє:
Скрипт написаний виключно у приватних цілях і підтримуватись у майбутньому не буде.
Програмування:
Для того щоб обробляти torrent-файли або файли сесії rTorrent (які є тими ж *.torrent) у Ruby потрібно проінсталювати бібліотеку bencode:
$ gem install bencode
Приклад скрипта для завантаження torrent-файлу у хеш(Hash):
require 'rubygems'
require 'bencode'
t_dict = BEncode.load_file(torrent)
Дізнатись докладніше про специфікація протоколу Bittorrent тут .
Наприклад:
t_dict['info']['name'] # назва файлу
t_dict['info']['length'] # довжина файлу у байтах
Крім того rTorrent має декілька специфічних директив:
t_dict['rtorrent']['total_uploaded'] # кількість вивантажених байтПросто і плоско до бєзобразія :). Успіхів.
t_dict['rtorrent']['complete'] # статус закачки (завантажився чи ні?)
4 коментарі:
Сила.
Коли в мене був безлiмiтний тирнет, я використовував rtorrent. Менi б така програмулька тодi дуже знадобилась. Буду мати на увазi
Більше того починаючи з версії 0.7.5, rtorrent має вбудований XMLRPC інтерфейс. Якось тре набратись мужності :) і дописати адміністративні функції (додавання нових торрентів ,керування швидкістю і закачками) через веб-інтерфейс. Хоча і ssh + screen не сильно напрягає :)
Зовсiм не сильно :)
Хоча написати самому значно приємниiше
Дописати коментар