<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
<channel>
	<title>Хабрахабр:  Метки / wtorrent</title>
	<link>http://habrahabr.ru/rss/tag/wtorrent/</link>
	<description><![CDATA[]]></description>
	<language>ru</language>
	<managingEditor>editor@habrahabr.ru</managingEditor>
	<generator>habrahabr.ru</generator>
	<pubDate>Sat, 11 Feb 2012 05:04:48 GMT</pubDate>
	<lastBuildDate></lastBuildDate>
	<image>
		<link>http://habrahabr.ru/</link>
		<url>http://habrahabr.ru/i/logo.gif</url>
		<title>Хабрахабр</title>
	</image>
	
			
		<item>		
			<title><![CDATA[Peer-to-Peer / Установка и настройка rTorrent в Debian]]></title>
			<guid isPermaLink="true">http://habrahabr.ru/blogs/p2p/88405/</guid>
			<link>http://habrahabr.ru/blogs/p2p/88405/</link>			
			<description><![CDATA[<img src="http://lh4.ggpht.com/_iGuWqh3W4uo/S60J7Vp1T4I/AAAAAAAAE7Y/FjHNXFv7LEQ/torrent_128.png" alt="Torrent file icon" align="left"/><img src="http://lh3.ggpht.com/_iGuWqh3W4uo/S6DAIQeBVzI/AAAAAAAAE2Q/lM-ZJNo6_54/Debian_logo_opt.png" alt="Debian logo" align="right"/><a href="http://libtorrent.rakshasa.no/">rTorrent</a> — еще один из самых популярных torrent клинтов в мире Unix-подобных операционных систем (о <a href="http://www.transmissionbt.com/">Transmission</a> я уже <a href="http://habrahabr.ru/blogs/p2p/87287/">написал</a> несколько ранее). При создании этого клиента, по заявлению <a href="http://rakshasa.no/">автора</a>, во главе угла стояли «высокая производительность и хороший код», а использование <a href="http://en.wikipedia.org/wiki/Mmap">mmap</a> для <a href="http://en.wikipedia.org/wiki/Memory-mapped_file">отображения файлов в память</a> позволяет добиться на широкополосных каналах трехкратного преимущества перед <a href="http://www.bittorrent.com/">официальным клиентом</a>. Еще одной характерной чертой rTorrent является наличие множества различных web-интерфейсов «на все вкусы» для удаленного управления. Именно об установке и настройке всего этого я и хочу рассказать на этот раз.<br/>
<div class="habracut"> <a class="habracut" href="http://habrahabr.ru/blogs/p2p/88405/#habracut">Читать дальше &rarr;</a> </div>]]></description>
			
			<pubDate>Sat, 27 Mar 2010 16:13:09 GMT</pubDate>
			<author>Labinskiy</author>
			<category>p2p</category><category>torrent</category><category>rtorrent</category><category>web-интерфейс</category><category>wtorrent</category><category>rutorrent</category><category>linux</category><category>debian</category><category>open source</category>
		</item>
		
		
		
		
		
		
		
		
	
			
		<item>		
			<title><![CDATA[Linux для всех / wTorrent — web-based bittorrent клиент для Linux\BSD]]></title>
			<guid isPermaLink="true">http://habrahabr.ru/blogs/linux/61739/</guid>
			<link>http://habrahabr.ru/blogs/linux/61739/</link>			
			<description><![CDATA[<b>wTorrent</b> — удобная графическая web-морда к популярному консольному клиенту <b>rTorrent</b>.<br/>
<br/>
Удобен он тем, что поразительно (хотя и ожидаемо от консольной программки) не требователен к аппаратным ресурсам, прост в настройке и управлении и поддерживается большинством трекеров.<br/>
<br/>
Здесь я опишу как установить надстройку над ним для управления своими торрентами через Интернет.<br/>
<br/>
Особенно актуально это в случае, если компьютер подключен к сети не напрямую, а через домашний сервер, и торрент-клиент установлен именно там.<br/>
<br/>
<div class="habracut"> <a class="habracut" href="http://habrahabr.ru/blogs/linux/61739/#habracut">Читать дальше &rarr;</a> </div>]]></description>
			
			<pubDate>Fri, 12 Jun 2009 12:06:35 GMT</pubDate>
			<author>differentlocal</author>
			<category>torrent</category><category>wtorrent</category><category>rtorrent</category><category>web-based</category>
		</item>
		
		
		
		
		
		
		
		
	
			
		<item>		
			<title><![CDATA[Персональные блоги / моддинг wTorrent'a]]></title>
			<guid isPermaLink="true">http://habrahabr.ru/blogs/personal/51295/</guid>
			<link>http://habrahabr.ru/blogs/personal/51295/</link>			
			<description><![CDATA[Здравствуйте, господа.<br/>
Преамбула:<br/>
Неделю назад я купил себе дешёвый PC для организации на нём локального файл-сервера, роутера, качалки и прочих удобных сервисов, которые на десктопной машине держать надоело. Всё это дело крутится под gentoo.<br/>
<br/>
Амбула:<br/>
Сегодня потратил вечер и немного подмоддил <a href="http://www.wtorrent-project.org/">wTorrent</a>:<br/>
Теперь он выглядит вот так: <a href="http://img21.imageshack.us/img21/122/wtorrent2eb6.png"><img src="http://img21.imageshack.us/img21/122/wtorrent2eb6.th.png"/></a><br/>
<br/>
Из нововведений:<br/>
1. Теперь он показывает общий объём траффика, in/out.<br/>
2. Представленный в центре страницы график входящего/исходящего трафика.<br/>
<br/>
Рассмотрим пункт первый. Реализация его проста:<br/>
Добавляем в планировщик rtorrent'а правила. Делается это через ctrl+x в клиенте или добавлением строки в конфиг и перезапуск.<br/>
schedule=export_traffic,0,15,«execute=/var/www/localhost/htdocs/wtorrent/schedule/passthrough,$get_up_total=,$get_down_total=,/var/www/localhost/htdocs/wtorrent/schedule/traffic.rtorrent»<br/>
это правило каждые 15 секунд в файл traffic.rtorrent через маленький скрипт passthrough<br/>
<code>#!/bin/sh<br/>
echo $1 $2 &gt; $3<br/>
</code><br/>
будет писать 2 числа: исходящий и входящий объём трафика. Сделано это потому, что через xmlrpc отдаётся signed integer, которое при объёме трафика &gt; 2Гб ожидаемо уходит в отрицательный диапазон :-) Как его научить отдавать большие числа я не нашёл — поэтому пришлось сделать такой костыль.<br/>
<br/>
Теперь в rtorrent.cls.php добавим следующие три метода:<br/>
<code> private function getTrafficInfo()<br/>
 {<br/>
 static $data;<br/>
<br/>
if (!$data){<br/>
 if (is_file('./schedule/traffic.rtorrent')) {<br/>
 $data = file('./schedule/traffic.rtorrent');<br/>
 $data = explode(' ', $data[0]);<br/>
 } else {<br/>
 $data = array(0, 0);<br/>
 }<br/>
 }<br/>
<br/>
return $data;<br/>
 }<br/>
<br/>
public function getDownTotal()<br/>
 {<br/>
 if ($data = $this-&gt;getTrafficInfo()) {<br/>
 return $this-&gt;getCorrectUnits($data[1]);<br/>
 }<br/>
<br/>
return $this-&gt;getCorrectUnits($this-&gt;get_info_rtorrent('get_down_total', false, false));<br/>
 }<br/>
<br/>
public function getUpTotal()<br/>
 {<br/>
 if ($data = $this-&gt;getTrafficInfo()) {<br/>
 return $this-&gt;getCorrectUnits($data[0]);<br/>
 }<br/>
<br/>
return $this-&gt;getCorrectUnits($this-&gt;get_info_rtorrent('get_up_total', false, false));<br/>
 }<br/>
</code><br/>
которые просто извлекают из файла экспортируемые торрент-клиентом числа. Теперь в шаблоне menu.tpl.php просто покажем эти два числа:<br/>
<code> {$str.dw_rate} {$web-&gt;getDownload()} ({$web-&gt;getDownTotal()})<br/>
 {$str.up_rate} {$web-&gt;getUpload()} ({$web-&gt;getUpTotal()})<br/>
</code><br/>
добавив их в скобки после блоков с текущей скоростью.<br/>
<br/>
Задача рисования графика немногим более сложная.<br/>
Для её реализации мы добавляем ещё одно правило в планировщик:<br/>
schedule=import_traffic,0,60,«execute=/usr/bin/php,-f,/var/www/localhost/htdocs/wtorrent/schedule/bandwidth.php»<br/>
это правило каждую минуту запускает php-скрипт:<br/>
<code>&lt;?php<br/>
<br/>
chdir(dirname(__FILE__));<br/>
<br/>
$datafile = './traffic.rtorrent';<br/>
<br/>
if (is_file($datafile)) {<br/>
 $data = file($datafile);<br/>
 list($out, $in) = explode(' ', $data[0]);<br/>
<br/>
$out = (double)$out;<br/>
 $in = (double)$in;<br/>
<br/>
require_once '../conf/user.conf.php';<br/>
<br/>
$db = new PDO(DB_STAT_DSN, DB_STAT_LOGIN, DB_STAT_PWD);<br/>
<br/>
$qry = 'SELECT `in`, `out`, `time` FROM `bandwidth` ORDER BY `id` DESC LIMIT 1';<br/>
 $stmt = $db-&gt;query($qry);<br/>
 <br/>
 $delta_in = 0;<br/>
 $delta_out = 0;<br/>
 <br/>
 if ($row = $stmt-&gt;fetch()) {<br/>
 if ($in &gt;= $row['in'] && $out &gt;= $row['out']) {<br/>
 $delta_in = $in - $row['in'];<br/>
 $delta_out = $out - $row['out'];<br/>
 }<br/>
 }<br/>
<br/>
$db-&gt;query('INSERT INTO `bandwidth` (`in`, `delta_in`, `out`, `delta_out`, `period`) VALUES (' . $in . ', ' . $delta_in . ', ' . $out . ', ' . $delta_out . &quot;, TIME_TO_SEC(TIMEDIFF(NOW(), '&quot; . $row['time'] . &quot;')))&quot;);<br/>
}<br/>
<br/>
?&gt;</code><br/>
<br/>
Этот примитивный скрипт сравнивает текущие значения трафика в файле traffic.torrent и на основании этих данных записывает в базу текущие значения и разницу с предыдущими.<br/>
<br/>
Вот схема БД и таблицы, в которую скрипт пишет данные:<br/>
<code>CREATE DATABASE `rtorrent`<br/>
 CHARACTER SET 'utf8'<br/>
 COLLATE 'utf8_general_ci';<br/>
<br/>
CREATE TABLE `bandwidth` (<br/>
 `id` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,<br/>
 `in` BIGINT(20) DEFAULT NULL,<br/>
 `delta_in` BIGINT(20) DEFAULT NULL,<br/>
 `out` BIGINT(20) DEFAULT NULL,<br/>
 `delta_out` BIGINT(20) DEFAULT NULL,<br/>
 `time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,<br/>
 `period` INTEGER(11) DEFAULT NULL,<br/>
 PRIMARY KEY (`id`),<br/>
 KEY `time` (`time`)<br/>
)ENGINE=MyISAM<br/>
AUTO_INCREMENT=1 ROW_FORMAT=FIXED CHARACTER SET 'utf8' COLLATE 'utf8_general_ci';<br/>
</code><br/>
<br/>
Осталось совсем немного :-) Скрипт, рисующий график будет использовать <a href="http://www.aditus.nu/jpgraph/index.php">jpgraph</a>. Вот содержание самого скрипта:<br/>
<br/>
<code>&lt;?php<br/>
<br/>
include &quot;../../lib/jpgraph/jpgraph.php&quot;;<br/>
include &quot;../../lib/jpgraph/jpgraph_line.php&quot;;<br/>
include &quot;../../lib/jpgraph/jpgraph_scatter.php&quot;;<br/>
include &quot;../../lib/jpgraph/jpgraph_regstat.php&quot;;<br/>
<br/>
include &quot;../../conf/user.conf.php&quot;;<br/>
<br/>
$db = new PDO(DB_STAT_DSN, DB_STAT_LOGIN, DB_STAT_PWD);<br/>
<br/>
$stmt = $db-&gt;query('SELECT SUM(`delta_in`) / 1024 / SUM(`period`) AS `in`,<br/>
 SUM(`delta_out`) / 1024 / SUM(`period`) AS `out`,<br/>
 MAX(`time`) AS `time`<br/>
 FROM `bandwidth`<br/>
 WHERE `time` &gt; DATE_SUB(NOW(), INTERVAL 12 HOUR)<br/>
 GROUP BY CONCAT(DATE(`time`), HOUR(`time`), FLOOR(MINUTE(`time`) / 5))<br/>
 ORDER BY `time`');<br/>
$x = $in = $out = array();<br/>
while ($row = $stmt-&gt;fetch()) {<br/>
 $ts = strtotime($row['time']);<br/>
 $x[] = $ts;<br/>
 $in[] = $row['in'];<br/>
 $out[] = $row['out'];<br/>
}<br/>
<br/>
// Setup the basic graph<br/>
$graph = new Graph(800, 400);<br/>
$graph-&gt;SetMargin(30, 10, 0, 30); <br/>
$graph-&gt;title-&gt;Set('Bandwidth, KB/s');<br/>
$graph-&gt;SetAlphaBlending();<br/>
<br/>
// Setup a manual x-scale (We leave the sentinels for the<br/>
// Y-axis at 0 which will then autoscale the Y-axis.)<br/>
// We could also use autoscaling for the x-axis but then it<br/>
// probably will start a little bit earlier than the first value<br/>
// to make the first value an even number as it sees the timestamp<br/>
// as an normal integer value.<br/>
$graph-&gt;SetScale(&quot;intlin&quot;, 0, max(max($out), max($in)) * 1.1, reset($x), end($x));<br/>
$graph-&gt;xgrid-&gt;Show();<br/>
$graph-&gt;yaxis-&gt;HideZeroLabel();<br/>
$graph-&gt;SetFrame(false);<br/>
<br/>
function TimeCallback($aVal) {<br/>
 return Date('H:i',$aVal);<br/>
}<br/>
// Setup the x-axis with a format callback to convert the timestamp<br/>
// to a user readable time<br/>
$graph-&gt;xaxis-&gt;SetLabelFormatCallback('TimeCallback');<br/>
//$graph-&gt;xaxis-&gt;SetLabelAngle(90);<br/>
<br/>
// Create the line<br/>
$p1 = new LinePlot($out, $x);<br/>
$p1-&gt;SetColor(&quot;red&quot;);<br/>
<br/>
$p2 = new LinePlot($in, $x);<br/>
$p2-&gt;SetColor(&quot;blue&quot;);<br/>
<br/>
// Add lineplot to the graph<br/>
$graph-&gt;Add($p1);<br/>
$graph-&gt;Add($p2);<br/>
<br/>
header(&quot;Expires: Mon, 26 Jul 1997 05:00:00 GMT&quot;);<br/>
header(&quot;Last-Modified: &quot; . gmdate(&quot;D, d M Y H:i:s&quot;) . &quot; GMT&quot;);<br/>
header(&quot;Cache-Control: no-cache, must-revalidate&quot;);<br/>
header(&quot;Cache-Control: post-check=0,pre-check=0&quot;);<br/>
header(&quot;Cache-Control: max-age=0&quot;);<br/>
header(&quot;Pragma: no-cache&quot;);<br/>
<br/>
// Output line<br/>
$graph-&gt;Stroke();<br/>
<br/>
?&gt;</code><br/>
<br/>
Вначале мы подключаем необходимые библиотеки. Затем — простым запросом выбираем данные из базы. Причём аггрегируем их в интервалы по 5 минут, чтобы график получался более усреднённым и плавным. Затем — на основе примеров, идущих с jpgraph, «собираем» график нужного вида. Полученный код помещаем в файл wt/img/bandwidth.php.<br/>
<br/>
Ну и самое последнее — отображение полученного графика на странице wtorrent.<br/>
<br/>
Добавляем пункт меню. Это делается также в файле rtorrent.cls.php, добавлением элемента 'Graphic' =&gt; 'Graphic' в ассоциативный массив с меню menu_admin.<br/>
Потом — создаём класс, который будет управлять отображением страницы Graphic.cls.php:<br/>
<br/>
<code>&lt;?php<br/>
<br/>
class Graphic extends rtorrent<br/>
{<br/>
 public function construct()<br/>
 {<br/>
 if(!$this-&gt;setClient())<br/>
 {<br/>
 return false;<br/>
 }<br/>
 }<br/>
}<br/>
?&gt;<br/>
</code><br/>
<br/>
Ну и наконец создаём шаблон с единственной строчкой, которая и будет показывать график, graphic.tpl.php:<br/>
<code><img src="http://./wt/img/bandwidth.php"/></code><br/>
<br/>
Всё, после этих нехитрых манипуляций у вас должно было получиться результат, сходный с тем, что я продемонстрировал выше. :-)<br/>
<br/>
PS: все исходники, которые приводились выше, можно скачать <a href="http://www.rapidshare.ru/919126">тут</a>.]]></description>
			
			<pubDate>Fri, 06 Feb 2009 13:54:19 GMT</pubDate>
			<author>zerkms</author>
			<category>linux</category><category>torrents</category><category>wtorrent</category><category>php</category><category>jpgraph</category>
		</item>
		
		
		
		
		
		
		
		
	
			
		<item>		
			<title><![CDATA[Персональные блоги / Установка и настройка связки rtorrent+wtorrent в Debian]]></title>
			<guid isPermaLink="true">http://habrahabr.ru/blogs/personal/51214/</guid>
			<link>http://habrahabr.ru/blogs/personal/51214/</link>			
			<description><![CDATA[На хабрахабре уже неоднократно осбуждалась проблема создания домашнего сервера. Соответственно, воспользовавшись поиском, Вы сможете без проблем найти несколько хороших статей по этой теме. Там Вы, в частности, узнаете, зачем это все нужно.<br/>
Но, к сожалению, ни одна из представленных в Интернете статей не раскрывает полностью проблему установки связки rtorrent+wtorrent в системе Debian (либо Ubuntu, что практически то же самое). Основная сложность состоит в нескольких очевидных и не очень «подводных камнях»:<br/>
<br/>
 — Debian содержит некоторые пакеты с устаревшими версиями библиотек, несовместимыми с последней версией rtorrent/libtorrent;<br/>
 — существующие мануалы и howto содержат информацию лишь о том, как установить данную связку на сервер lighttpd, что не всегда удобно (например, у меня на домашнем сервере есть пара сайтов, которые лучше запускать под Apache);<br/>
 — ни одно руководство не учитывает все тонкости установки.<br/>
<br/>
Учитывая эти обстоятельства и было написано данное руководство в стиле «copy-paste», которое, надеюсь, поможет Вам в нелегком деле приручения rtorrent/wtorrent.<div class="habracut"> <a class="habracut" href="http://xtremespb.habrahabr.ru/blog/51214/#habracut">Читать дальше &rarr;</a> </div>]]></description>
			
			<pubDate>Fri, 06 Feb 2009 06:57:31 GMT</pubDate>
			<author>xtremespb</author>
			<category>rtorrent</category><category>wtorrent</category><category>debian</category><category>домашний сервер</category>
		</item>
		
		
		
		
		
		
		
		
	
	
	
	
	
	
	
	

	
</channel>
</rss>

