root / plugins / rtorrent / rtom_allsessions_spdd @ 46e2de55
Historique | Voir | Annoter | Télécharger (6,28 ko)
| 1 | acba1189 | XciD | #!/usr/bin/perl -w |
|---|---|---|---|
| 2 | # |
||
| 3 | # xmlrpc based munin plugin for monitoring rtorrent's upload/download speed |
||
| 4 | # prerequisites: |
||
| 5 | # - rtorrent 0.7.5 or newer compiled with --with-xmlrpc-c |
||
| 6 | 8589c6df | klemens | # check http://libtorrent.rakshasa.no/wiki/RTorrentXMLRPCGuide for further information |
| 7 | acba1189 | XciD | # |
| 8 | # written by Gabor Hudiczius |
||
| 9 | # web: http://projects.cyla.homeip.net/rtwi/wiki/rTorrentOMeter |
||
| 10 | # email: ghudiczius@gmail.com |
||
| 11 | # |
||
| 12 | # 0.0.0 - 071218 |
||
| 13 | # initial release |
||
| 14 | # |
||
| 15 | # 0.0.1 - 071220 |
||
| 16 | # minor textbugs fixed |
||
| 17 | # |
||
| 18 | # 0.1.0d - 080519 |
||
| 19 | # full rewrite in perl |
||
| 20 | # support for scgi_port and scgi_local |
||
| 21 | # configurable via munin env variables |
||
| 22 | # different ul/dl scale can be set for asymmetric connections |
||
| 23 | # using get_(up|down)_total, and derive |
||
| 24 | # |
||
| 25 | # 0.2.0 - 080619 |
||
| 26 | # upload and download limit displayed on the graph |
||
| 27 | # |
||
| 28 | # |
||
| 29 | # Parameters: |
||
| 30 | # |
||
| 31 | # config required |
||
| 32 | # |
||
| 33 | # |
||
| 34 | # Configurable variables |
||
| 35 | # |
||
| 36 | # src "socket" when using scgi_socket, or anything else when using scgi_port |
||
| 37 | # socket rTorrent's rpc socket (scgi_local) - using scgi_local - needed, when "src" is set to "socket" |
||
| 38 | # diff "yes" for using bps for upload and Bps for download, or anything else for using Bps for both |
||
| 39 | b35840c5 | Lars Kruse | # api use "pre09" (pre 0.9.0) or "current" (0.9.0+, the default) API calls |
| 40 | acba1189 | XciD | # |
| 41 | # |
||
| 42 | # Configuration example |
||
| 43 | # |
||
| 44 | fa1298bf | XciD | # [rtom_allsessions_*] |
| 45 | acba1189 | XciD | # user username |
| 46 | # env.src socket |
||
| 47 | fa1298bf | XciD | # env.socket /home/user/torrent/.socket/rpc.socket,/home/user/torrent/.socket/rpc.socket |
| 48 | # env.category Category |
||
| 49 | 121448e7 | Sledge Sulaweyo | # env.api pre09 |
| 50 | acba1189 | XciD | # |
| 51 | fa1298bf | XciD | # [rtom_allsessions_*] |
| 52 | # user username |
||
| 53 | # env.port 5000,5001,5002,5003 |
||
| 54 | # env.category Category |
||
| 55 | acba1189 | XciD | # |
| 56 | #%# family=auto |
||
| 57 | |||
| 58 | |||
| 59 | if ( $ARGV[0] and $ARGV[0] eq "config" ) {
|
||
| 60 | 121448e7 | Sledge Sulaweyo | my $diff = $ENV{"diff"} || "";
|
| 61 | my $category = $ENV{"category"} || "";
|
||
| 62 | print "graph_order down up\n"; |
||
| 63 | print "graph_title rTorrent speeds\n"; |
||
| 64 | print "graph_args --base 1024\n"; |
||
| 65 | print "graph_vlabel Bytes per \${graph_period}\n";
|
||
| 66 | print "graph_category filetransfer".${category}."\n";
|
||
| 67 | print "down.label Download B/s\n"; |
||
| 68 | print "down.info Download speed in Bytes per seconds\n"; |
||
| 69 | print "down.type DERIVE\n"; |
||
| 70 | print "down.min 0\n"; |
||
| 71 | print "down.draw AREA\n"; |
||
| 72 | if ( ( defined $diff ) && ( $diff eq "yes" ) ) {
|
||
| 73 | print "up.label Upload b/s\n"; |
||
| 74 | print "up.info Upload speed in bits per seconds\n"; |
||
| 75 | print "up.cdef up,8,*\n"; |
||
| 76 | } else {
|
||
| 77 | print "up.label Upload B/s\n"; |
||
| 78 | print "up.info Upload speed in Bytes per seconds\n"; |
||
| 79 | } |
||
| 80 | print "up.type DERIVE\n"; |
||
| 81 | print "up.min 0\n"; |
||
| 82 | print "up.draw LINE2\n"; |
||
| 83 | exit 0; |
||
| 84 | acba1189 | XciD | } |
| 85 | |||
| 86 | use IO::Socket; |
||
| 87 | my $src = $ENV{"src"} || "";
|
||
| 88 | fa1298bf | XciD | my @sockets = split /,/, $ENV{"socket"} || "";
|
| 89 | my $ip = $ENV{"ip"} || "127.0.0.1";
|
||
| 90 | my @ports = split /,/, $ENV{"port"} || "";
|
||
| 91 | 143a9543 | Sledge Sulaweyo | my $api = $ENV{"api"} || "current";
|
| 92 | fa1298bf | XciD | |
| 93 | my $pattern = qr/<value><(int|i4|i8|ex\.i8)>([-]{0,1}\d+)<\/(int|i4|i8|ex\.i8)><\/value>/;
|
||
| 94 | 8bfb8180 | Sledge Sulaweyo | my $line = ""; |
| 95 | 121448e7 | Sledge Sulaweyo | if ($api =~ /pre09/) {
|
| 96 | 8bfb8180 | Sledge Sulaweyo | $line = "<?xml version=\"1.0\" encoding=\"utf-8\"?><methodCall><methodName>system.multicall</methodName><params><param><value><array><data><value><struct><member><name>methodName</name><value><string>get_up_total</string></value></member><member><name>params</name><value><array><data/></array></value></member></struct></value><value><struct><member><name>methodName</name><value><string>get_down_total</string></value></member><member><name>params</name><value><array><data/></array></value></member></struct></value><value><struct><member><name>methodName</name><value><string>get_upload_rate</string></value></member><member><name>params</name><value><array><data/></array></value></member></struct></value><value><struct><member><name>methodName</name><value><string>get_download_rate</string></value></member><member><name>params</name><value><array><data/></array></value></member></struct></value></data></array></value></param></params></methodCall>"; |
| 97 | } else {
|
||
| 98 | $line = "<?xml version=\"1.0\" encoding=\"utf-8\"?><methodCall><methodName>system.multicall</methodName><params><param><value><array><data><value><struct><member><name>methodName</name><value><string>throttle.global_up.total</string></value></member><member><name>params</name><value><array><data/></array></value></member></struct></value><value><struct><member><name>methodName</name><value><string>throttle.global_down.total</string></value></member><member><name>params</name><value><array><data/></array></value></member></struct></value><value><struct><member><name>methodName</name><value><string>throttle.global_up.max_rate</string></value></member><member><name>params</name><value><array><data/></array></value></member></struct></value><value><struct><member><name>methodName</name><value><string>throttle.global_down.max_rate</string></value></member><member><name>params</name><value><array><data/></array></value></member></struct></value></data></array></value></param></params></methodCall>"; |
||
| 99 | } |
||
| 100 | |||
| 101 | fa1298bf | XciD | my $llen = length $line; |
| 102 | my $header = "CONTENT_LENGTH\000${llen}\000SCGI\001\000";
|
||
| 103 | my $hlen = length $header; |
||
| 104 | acba1189 | XciD | |
| 105 | my $up = -1; |
||
| 106 | my $down = -1; |
||
| 107 | |||
| 108 | fa1298bf | XciD | if ( ( defined $src ) && ( $src eq "socket" ) ) {
|
| 109 | 121448e7 | Sledge Sulaweyo | for $socket (@sockets) |
| 110 | {
|
||
| 111 | socket( SOCK, PF_UNIX, SOCK_STREAM, 0 ) or die; |
||
| 112 | connect( SOCK, sockaddr_un( $socket ) ) or die $!; |
||
| 113 | my $line = "${hlen}:${header},${line}";
|
||
| 114 | print SOCK $line; |
||
| 115 | flush SOCK; |
||
| 116 | my $up_tmp = -1; |
||
| 117 | my $down_tmp = -1; |
||
| 118 | while (( $up_tmp == -1 ) && ( $line = <SOCK> ) ) {
|
||
| 119 | if ( $line =~ /$pattern/ ) {
|
||
| 120 | $up_tmp = $2; |
||
| 121 | } |
||
| 122 | } |
||
| 123 | while (( $down_tmp == -1 ) && ( $line = <SOCK> ) ) {
|
||
| 124 | if ( $line =~ /$pattern/ ) {
|
||
| 125 | $down_tmp = $2; |
||
| 126 | } |
||
| 127 | } |
||
| 128 | close (SOCK); |
||
| 129 | $up = $up + $up_tmp; |
||
| 130 | $down = $down + $down_tmp; |
||
| 131 | } |
||
| 132 | fa1298bf | XciD | } else {
|
| 133 | 121448e7 | Sledge Sulaweyo | for $port (@ports) |
| 134 | {
|
||
| 135 | socket( SOCK, PF_INET, SOCK_STREAM, getprotobyname( "tcp" ) ); |
||
| 136 | connect( SOCK, sockaddr_in( $port, inet_aton( $ip ) ) ); |
||
| 137 | my $line = "${hlen}:${header},${line}";
|
||
| 138 | print SOCK $line; |
||
| 139 | flush SOCK; |
||
| 140 | my $up_tmp = -1; |
||
| 141 | my $down_tmp = -1; |
||
| 142 | while (( $up_tmp == -1 ) && ( $line = <SOCK> ) ) {
|
||
| 143 | if ( $line =~ /$pattern/ ) {
|
||
| 144 | $up_tmp = $2; |
||
| 145 | } |
||
| 146 | } |
||
| 147 | while (( $down_tmp == -1 ) && ( $line = <SOCK> ) ) {
|
||
| 148 | if ( $line =~ /$pattern/ ) {
|
||
| 149 | $down_tmp = $2; |
||
| 150 | } |
||
| 151 | } |
||
| 152 | close (SOCK); |
||
| 153 | $up = $up + $up_tmp; |
||
| 154 | $down = $down + $down_tmp; |
||
| 155 | } |
||
| 156 | acba1189 | XciD | } |
| 157 | fa1298bf | XciD | |
| 158 | |||
| 159 | |||
| 160 | acba1189 | XciD | print "up.value ${up}\ndown.value ${down}\n";
|
| 161 | |||
| 162 | exit; |
