Страница 1 из 1

Handling ratio in rtorrent

Добавлено: 2011-03-05 12:45:05
oleg_osov
Добрый день!

Имеется роутер Linksys E3000, в который зашита "DD-WRT v24-sp2 SVN 15508 by eko", установлено optware от frater и к которому подцеплен по USB винт.
На этому роутере в числе прочего вертится rtorrent:

Код: Выделить всё

root@DD-WRT:~# ipkg-opt list | grep rtorrent
rtorrent - 0.8.6-1 - rtorrent is a BitTorrent client for ncurses, using the libtorrent library.
На этом rtorrent я хочу по расписанию менять скорость останавливать торренты, при превышении ратио.

Вот этот код отвечает за скорость:

Код: Выделить всё

# Scheduling a throttle
schedule = throttle_1,01:00:00,24:00:00,upload_rate=0
schedule = throttle_2,08:00:00,24:00:00,upload_rate=100
schedule = throttle_3,13:30:00,24:00:00,upload_rate=0
schedule = throttle_4,15:00:00,24:00:00,upload_rate=100
А вот этот код отвечает за ратио. Полностью скопирован с мануала

Код: Выделить всё

# Enable the default ratio group.
ratio.enable=

# Change the limits
ratio.min.set=200
ratio.max.set=300
ratio.upload.set=6000M

# Changing the command triggered when the ratio is reached.
system.method.set = group.seeding.ratio.command, d.close=, d.erase=
Изменение скорости работает, а ратио нет. Вопрос - это глючная сборка rtorrent под мой девайс или кривой конфиг? У кого-нибудт есть рабочая конфигурация, где по достижении заланного ратио и/или аплоада торенты закрываются? И еще вопрос - это действует только при пересечении торрентом границы ратио, а на старые торренты, где ратио 10-20 и больше уже не действует?

Re: Handling ratio in rtorrent

Добавлено: 2011-03-05 17:06:30
tyler56
У меня параметры rtorrent'a меняются скриптом в зависимости от обстоятельств (загрузки канала, времени, и пр.)
Этот скрипт вызывается с параметрами которые нужно изменить. Тут входящая и исходящая скорости меняются.
Можно попробовать передать set_ratio_min, set_ratio_max
Запрос отправляется rutorrent'у

Код: Выделить всё

#!/usr/local/bin/perl

use strict;
use WWW::Curl::Easy;


my $speed_down=$ARGV[0];
my $speed_up=$ARGV[1];

sub funk_download {
print "Testing curl version ",WWW::Curl::Easy::version()," ";
# Init the curl session
my $curl= WWW::Curl::Easy->new() or die "curl init failed! ";
# Follow location headers
$curl->setopt(CURLOPT_FOLLOWLOCATION, 1);
# Add some additional headers to the http-request:
my @myheaders=("I-am-a-silly-programmer: yes indeed you are","User-Agent: Perl interface for libcURL");
$curl->setopt(CURLOPT_HTTPHEADER, \@myheaders);
$curl->setopt(CURLOPT_URL, "http://192.168.0.1/RPC1");
sub body_callback {
my ($chunk,$context)=@_;
push @{$context}, $chunk;
return length($chunk); # OK
}
$curl->setopt(CURLOPT_WRITEFUNCTION, \&body_callback);
$curl->setopt(CURLOPT_POST, 1);
$curl->setopt(CURLOPT_POSTFIELDS, "<?xml version=\"1.0\" encoding=\"UTF-8\"?><methodCall><methodName>set_upload_rate</methodName><params><param><value><string>".$speed_down."</string></value></param></params></methodCall>");
$curl->setopt(CURLOPT_USERPWD, "admin:pass");
$curl->setopt(CURLOPT_COOKIEJAR, "cooc.txt");
$curl->setopt(CURLOPT_COOKIEFILE,"cooc.txt");

my @body;
$curl->setopt(CURLOPT_FILE, \@body);
if ($curl->perform() != 0) { print "Failed ::".$curl->errbuf."\n";};
print join("",@body);
}

sub funk_upload {
print "Testing curl version ",WWW::Curl::Easy::version()," ";
# Init the curl session
my $curl= WWW::Curl::Easy->new() or die "curl init failed! ";
# Follow location headers
$curl->setopt(CURLOPT_FOLLOWLOCATION, 1);
# Add some additional headers to the http-request:
my @myheaders=("I-am-a-silly-programmer: yes indeed you are","User-Agent: Perl interface for libcURL");
$curl->setopt(CURLOPT_HTTPHEADER, \@myheaders);
$curl->setopt(CURLOPT_URL, "http://192.168.0.1/RPC1");
sub body_callback {
my ($chunk,$context)=@_;
push @{$context}, $chunk;
return length($chunk); # OK
}
$curl->setopt(CURLOPT_WRITEFUNCTION, \&body_callback);
$curl->setopt(CURLOPT_POST, 1);
$curl->setopt(CURLOPT_POSTFIELDS, "<?xml version=\"1.0\" encoding=\"UTF-8\"?><methodCall><methodName>set_download_rate</methodName><params><param><value><string>".$speed_up."</string></value></param></params></methodCall>");
$curl->setopt(CURLOPT_USERPWD, "admin:pass");
$curl->setopt(CURLOPT_COOKIEJAR, "cooc.txt");
$curl->setopt(CURLOPT_COOKIEFILE,"cooc.txt");

my @body;
$curl->setopt(CURLOPT_FILE, \@body);
if ($curl->perform() != 0) { print "Failed ::".$curl->errbuf."\n";};
print join("",@body);
}