From 361d200cd71a63684a05315a2da22e6855ddfc58 Mon Sep 17 00:00:00 2001 From: Dobrica Pavlinusic Date: Sun, 27 May 2012 19:58:55 +0000 Subject: [PATCH] monitor gearman using munin git-svn-id: svn://svn.rot13.org/sysadmin-cookbook@293 191e9f34-6774-4a6d-acfc-7664dacd4a2a --- recepies/munin/plugins/gearman | 59 ++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 recepies/munin/plugins/gearman diff --git a/recepies/munin/plugins/gearman b/recepies/munin/plugins/gearman new file mode 100644 index 0000000..10adfbc --- /dev/null +++ b/recepies/munin/plugins/gearman @@ -0,0 +1,59 @@ +#!/usr/bin/perl +use warnings; +use strict; + +# 2012-05-27 Dobrica Pavlinusic + +use IO::Socket::INET; +use Data::Dump qw(dump); + +my $arg = shift @ARGV; +$arg ||= ''; + +my $sock = IO::Socket::INET->new( + PeerAddr => '127.0.0.1', + PeerPort => 4730, + Proto => 'tcp' +) || die $1; + +if ( $arg eq 'autoconf' ) { + print $sock ? "yes\n" : "no\n"; + exit 0; +} + +print $sock "STATUS\n"; + +my $stats; + +while ( my $line = <$sock> ) { + chomp $line; +# warn "# [$line]\n"; + last if $line eq '.'; + next if $line =~ m/\t0$/; # ignore functions which don't have active workers + my ( $name, $queued, $running, $workers ) = split(/\t/,$line,4); + $stats->{queued}->{$name} = $queued; + $stats->{running}->{$name} = $running; + $stats->{workers}->{$name} = $workers; +} + +if ( $arg eq 'config' ) { + foreach my $multigraph ( keys %$stats ) { + print "multigraph $multigraph\n"; + print "graph_category gearman\n"; + print "graph_title Gearman $multigraph\n"; + + foreach my $name ( keys %{ $stats->{$multigraph} } ) { + $name =~ s/\W+/_/g; + print "$name.label $name\n"; + } + } +} else { + foreach my $multigraph ( keys %$stats ) { + print "multigraph $multigraph\n"; + while ( my ($name,$value) = each %{ $stats->{$multigraph} } ) { + $name =~ s/\W+/_/g; + print "$name.value $value\n"; + } + } +} + -- 2.20.1