grim7reaper

A Code Craftsman

Intégration de rtorrent dans conky

Cet article provient de mon ancien site Internet. Il a été rédigé le 25 février 2011.

Background

À l’époque où j’utilisais conky, j’ai voulu intégrer le monitoring de rtorrent. Les ressources à ce sujet ne manquent pas sur le Web, mais je n’ai pas trouvé de client qui me convienne vraiment. J’ai donc écrit le mien (en Perl, seul langage de script que je maîtrise, en attendant de me pencher sérieusement sur Python ou Ruby un de ces jours…).

Voilà une capture d’écran du résultat final :

Statistiques de rtorrent dans conky

La configuration de rtorrent

Bon là c’est très simple, il n’y a qu’une ligne à ajouter au fichier .rtorrentrc.

.rtorrentrc
1
scgi_port = localhost:4200

Là j’ai pris le port 4200 pour l’exemple, mais vous pouvez en choisir un autre si ça vous chante.

Attention : rtorrent doit avoir été compilé avec le flag –with-xmlrpc-c.

Le serveur XML-RPC

Ici le prérequis est d’avoir un serveur HTTP fonctionnel. Utilisant personnellement lighttpd j’expliquerai la configuration pour ce dernier (tout se passe dans le fichier lighttpd.conf). Pour ceux qui utilisent un autre serveur (Apache, nginx, …), reportez-vous à sa documentation (ou jetez un œil ici).

Il faut commencer par activer (donc décommenter la ligne correspondante ou l’ajouter si elle n’est pas présente), si ce n’est pas déjà fait, le module mod_scgi dans la section server.modules

Ensuite, il ne reste plus qu’à créer le serveur XML-RPC en ajoutant cette section.

lighttpd.conf
1
2
3
4
5
6
7
8
9
10
11
12
13
$HTTP["url"] == "/RPC2" {
    scgi.server = (
                    "/RPC2" =>
                                ( "127.0.0.1" =>
                                    (
                                        "host" => "127.0.0.1",
                                        "port" => 4200,
                                        "check-local" => "disable",
                                    )
                                 )
                 )
    accesslog.filename          = "/dev/null"
}

La directive accesslog.filename = “/dev/null” permet d’éviter un pourrissage en règle des logs par les requêtes incessantes de notre client. Il faut également veiller à indiquer le même port que dans le fichier .rtorrentrc. Pour connaître plus en détail la signification des options utilisées, je vous renvoie sur la doc (qui est plutôt bien faite).

Redémarrez le serveur, et c’est parti !

Le client

Comme dit précedemment, j’ai écris le client en Perl. J’utilise le module Frontier::Client (disponible sur le CPAN) pour envoyer mes requêtes au serveur.

Le fonctionnement est très simple. Je commence par vérifier que rtorrent et le serveur sont lancés. Ensuite, je me connecte et je balance les requêtes qui vont bien en fonction des statistiques que je veux récupérer. La liste des commandes disponibles est ici.

Pour que le script fonctionne, il faut bien sûr modifier la constante server pour y mettre l’adresse de votre serveur XML-RPC. Vous pouvez aussi modifier les couleurs et les paliers à partir desquels les couleurs changent. Le script est assez court et j’ai essayé de le garder un maximum lisible (même pour du Perl :p) donc je pense que les parties à modifier sont assez évidentes.

Pour récupérer le client, c’est par ici.

conky

Et enfin conky. C’est vraiment trivial : un simple execpi.

conkyrc
1
${execpi 5 rtorrent-stats}

Pour un exemple de conkyrc c’est par (rien de bien sorcier comme je vous l’avais dit).