2
0
mirror of https://github.com/munin-monitoring/contrib.git synced 2018-11-08 00:59:34 +01:00
contrib-munin/plugins/rtorrent/rtom_mem
Lars Kruse 46e2de55de Remove unused "autoconf" handling from plugins without this capability
Some plugins contained code for handling "autoconf" (always returning
"no") but did not announce the respective capability via the magic
marker.
2018-09-16 15:13:38 +02:00

97 lines
2.5 KiB
Perl
Executable File

#!/usr/bin/perl -w
#
# xmlrpc based munin plugin for monitoring rtorrent's memory usage
# prerequisites:
# - rtorrent 0.7.5 or newer compiled with --with-xmlrpc-c
# check http://libtorrent.rakshasa.no/wiki/RTorrentXMLRPCGuide for further information
#
# written by Gabor Hudiczius
# web: http://projects.cyla.homeip.net/rtwi/wiki/rTorrentOMeter
# email: ghudiczius@gmail.com
#
# 0.2.0 - 080619
# support for scgi_port and scgi_local
# configurable via munin env variables
# initial release
#
#
# Parameters:
#
# config required
#
#
# Configurable variables
#
# src "socket" when using scgi_socket, or anything else when using scgi_port
# socket rTorrent's rpc socket (scgi_local) - using scgi_local - needed, when "src" is set to "socket"
# ip rTorrent's ip address - using scgi_port - needed, when "src" is NOT set to "socket"
# port rTorrent's scgi port (scgi_port) - using scgi_port - needed, when "src" is NOT set to "socket"
# category Change graph category
#
# Configuration example
#
# [rtom_mem]
# user username
# env.src socket
# env.socket /home/user/torrent/.socket/rpc.socket
# env.category Category
#
# [rtom_mem]
# env.ip 127.0.0.1
# env.port 5000
#
#
#%# family=auto
if ( $ARGV[0] and $ARGV[0] eq "config" ) {
my $category = $ENV{"category"} || "";
print "graph_title rTorrent memory usage\n";
print "graph_args --base 1024 --lower-limit 0\n";
print "graph_vlabel Bytes\n";
print "graph_category filetransfer".${category}."\n";
print "mem.label Memory usage\n";
print "mem.info Memory osage of rTorrent\n";
print "mem.type GAUGE\n";
print "mem.draw LINE2\n";
exit 0;
}
use IO::Socket;
my $src = $ENV{"src"} || "";
my $ip = $ENV{"ip"} || "127.0.0.1";
my $port = $ENV{"port"} || "5000";
my $socket = $ENV{"socket"} || "";
my $pattern = qr/<value><(int|i4|i8|ex\.i8)>(\d+)<\/(int|i4|i8|ex\.i8)><\/value>/;
my $line = "<?xml version=\"1.0\" encoding=\"utf-8\"?><methodCall><methodName>get_memory_usage</methodName></methodCall>";
my $llen = length $line;
my $header = "CONTENT_LENGTH\000${llen}\000SCGI\001\000";
my $hlen = length $header;
$line = "${hlen}:${header},${line}";
if ( ( defined $src ) && ( $src eq "socket" ) ) {
socket( SOCK, PF_UNIX, SOCK_STREAM, 0 ) or die;
connect( SOCK, sockaddr_un( $socket ) ) or die $!;
} else {
socket( SOCK, PF_INET, SOCK_STREAM, getprotobyname( "tcp" ) );
connect( SOCK, sockaddr_in( $port, inet_aton( $ip ) ) );
}
print SOCK $line;
flush SOCK;
my $mem = 0;
while ( $line = <SOCK> ) {
if ( $line =~ /$pattern/ ) {
$mem = $2;
}
}
close (SOCK);
print "mem.value ${mem}\n";
exit;