From ed606750df777485738de1d00b46ea7a600fbccd Mon Sep 17 00:00:00 2001 From: Guillaume Blairon Date: Sun, 3 Jun 2007 16:55:53 +0200 Subject: [PATCH] Initial version --- plugins/other/mogilefsd_queries | 149 ++++++++++++++++++++++++++++++++ 1 file changed, 149 insertions(+) create mode 100755 plugins/other/mogilefsd_queries diff --git a/plugins/other/mogilefsd_queries b/plugins/other/mogilefsd_queries new file mode 100755 index 00000000..6186e74a --- /dev/null +++ b/plugins/other/mogilefsd_queries @@ -0,0 +1,149 @@ +#!/usr/bin/perl -w +# +# Copyright (C) 2007 Guillaume Blairon +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; version 2 dated June, +# 1991. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# +# +# +# Script to monitor MogileFS tracker queries. +# Mostly an adaptation of Jimmy Olsen's squid_cache script. +# +# Usage: +# ln -s /usr/share/munin/plugins/mogilefsd_activity \ +# /etc/munin/plugins/ +# +# Configuration variables: +# +# host (default: '127.0.0.1') +# port (default: '6001') +# +# Parameters: +# +# config (required) +# autoconf (optional - only used by munin-config) +# +#%# family=auto +#%# capabilities=autoconf + +my $ret = undef; + +my $DEBUG = 0; +my @known_states=qw(queries); + +if (! eval "require IO::Socket;") +{ + $ret = "IO::Socket not found"; +} + +$mogilefsd_host = $ENV{host} || "127.0.0.1"; +$mogilefsd_port = $ENV{port} || 6001; + +if($ARGV[0] and $ARGV[0] eq "autoconf") { + &autoconf($mogilefsd_host, $mogilefsd_port); +} + +sub autoconf { + my ($host, $port) = @_; + + if ($ret) + { + print "no ($ret)\n"; + exit 1; + } + + my $conn = IO::Socket::INET->new(PeerAddr => $host, + PeerPort => $port, + Proto => 'tcp', + Timeout => 5) or die($!); + + if (!$conn) + { + print "no (could not connect: $!)\n"; + exit 1; + } + + my $request = "!stats\n"; + + $conn->syswrite($request, length($request)); + + my @lines = qw(); + while (my $line = $conn->getline) { + if ($line =~ /^\./) { + last; + } + push(@lines, $line); + } + close($conn); + + print "yes\n"; + exit 0; +} + + +sub query_mogilefsd { + my ($host, $port) = @_; + + my $conn = IO::Socket::INET->new(PeerAddr => $host, + PeerPort => $port, + Proto => 'tcp') or die($!); + + my $request = "!stats\n"; + + $conn->syswrite("$request", length("$request")); + + my @lines = qw(); + while (my $line = $conn->getline) { + if ($line =~ /^\./) { + last; + } + push(@lines, $line); + } + close($conn); + + for(my $i = 0; $i <= $#lines; $i++) { + if($lines[$i] =~ /^([^\s]*)\s(\d+)/) { + $states{"$1"} = "$2"; + } + } + keys %states; +} + +if($ARGV[0] and $ARGV[0] eq "config") { + + print "graph_title MogileFS tracker queries\n"; + print "graph_vlabel queries/sec\n"; + print "graph_args -l 0\n"; + print "graph_category MogileFS\n"; + print "queries.label queries\n"; + print "queries.type DERIVE\n"; + print "queries.draw AREA\n"; + print "queries.min 0\n"; + + exit 0; +} + +print %states; + +&query_mogilefsd($mogilefsd_host, $mogilefsd_port); + +foreach $key (@known_states) { + print "$key.value "; + if (exists $states{$key}) { + print $states{$key}, "\n"; + } else { + print "0\n"; + } +}