From 3e56b6589b33d2953af7a1704e6a549c2e476165 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafa=C5=82=20Tr=C3=B3jniak?= Date: Sun, 26 Jan 2014 21:37:21 +0100 Subject: [PATCH] Refactoring of fetching procedures, information about the limits, more memory statistics --- plugins/redis/redis_ | 76 +++++++++++++++++++++++++++++++++++--------- 1 file changed, 61 insertions(+), 15 deletions(-) diff --git a/plugins/redis/redis_ b/plugins/redis/redis_ index e3414763..88fc71a4 100755 --- a/plugins/redis/redis_ +++ b/plugins/redis/redis_ @@ -67,30 +67,19 @@ if ( $suggest ) { } } -print $sock "INFO\r\n"; -my $result = <$sock> || die "can't read socket: $!"; - -my $rep; -read($sock, $rep, substr($result,1)) || die "can't read from socket: $!"; - -my $hash; -foreach (split(/\r\n/, $rep)) { - my ($key,$val) = split(/:/, $_, 2); - if (defined($key)) { - $hash->{$key} = $val; - } -} -close ($sock); +my $hash=&get_info(); $0 =~ s/(.+)redis_//g; switch ($0) { case "connected_clients" { if ( $config ) { + my $maxclients= get_config("maxclients")->{"maxclients"}; print "graph_title Connected clients\n"; print "graph_vlabel Connected clients\n"; print "graph_category redis\n"; print "graph_args -l 0\n"; + print "connected_clients.line $maxclients:ff0000:Limit\n"; print "connected_clients.label connected clients\n"; exit 0; } @@ -169,16 +158,21 @@ switch ($0) { case "used_memory" { if ( $config ) { + my $maxmemory = get_config("maxmemory")->{"maxmemory"}; print "graph_title Used memory\n"; print "graph_vlabel Used memory\n"; print "graph_category redis\n"; print "graph_args -l 0 --base 1024\n"; + print "used_memory.line $maxmemory:ff0000:Limit\n"; print "used_memory.label used memory\n"; - print "used_memory.draw AREA\n"; + print "used_memory_peak.label used memory in peak\n"; + print "used_memory_rss.label Resident set size memory usage\n"; exit 0; } print "used_memory.value ". $hash->{'used_memory'} ."\n"; + print "used_memory_rss.value ". $hash->{'used_memory_rss'} ."\n"; + print "used_memory_peak.value ". $hash->{'used_memory_peak'} ."\n"; } case "used_keys" { @@ -210,6 +204,8 @@ switch ($0) { } } +close ($sock); + sub get_conn { my $sock = IO::Socket::INET->new( PeerAddr => $HOST, @@ -224,4 +220,54 @@ sub get_conn { return $sock; } +sub get_info{ + print $sock "INFO\r\n"; + my $result = <$sock> || die "can't read socket: $!"; + + my $rep; + # +2 characters for \r\n at end of the data block + read($sock, $rep, substr($result,1)+2) || die "can't read from socket: $!"; + + my $hash; + foreach (split(/\r\n/, substr($rep, 0, -2))) { + my ($key,$val) = split(/:/, $_, 2); + if (defined($key)) { + $hash->{$key} = $val; + } + } + return $hash; +} + +# This subroutine returns configuration matched to supplied as object +sub get_config{ + + print $sock "*3\r\n\$6\r\nCONFIG\r\n\$3\r\nGET\r\n\$".length($_[0])."\r\n".$_[0]."\r\n"; + # Response will look like like + # *2\r\n$9\r\nmaxmemory\r\n$10\r\n3221225472\r\n + + my $type = <$sock> || die "can't read socket: $!"; + + my $conf; + if( substr($type,0,1) ne "*" ) { + return $conf; + } + + my $count=substr($type,1); + + my ( $namesize, $name, $valuesize, $value ); + while ( $count > 1 ){ + $count=$count-2; + + $namesize=<$sock>; + read($sock, $name, substr($namesize,1)+2) || die "can't read from socket: $!"; + + $valuesize=<$sock>; + read($sock, $value, substr($valuesize,1)+2) || die "can't read from socket: $!"; + + $conf->{substr($name, 0, -2)}=substr($value, 0, -2); + } + + return $conf; +} + # vim: ft=perl ai ts=4 sw=4 et: