#!/usr/bin/perl -w # Nagios plugin to check the current messages waiting in the ActiveMQ queue. # Author: Maxim Janssens # Company: Synquad BV # Website: http://www.synquad.nl # Email: maxim@synquad.nl use strict; use Switch; use LWP::Simple; my $address = "localhost"; my $port = "8161"; my $page = get "http://$address:$port/admin/xml/queues.jsp" or die "Cannot get XML file: $!\n";; my (%args, %queues); my %error=('ok'=>0,'warning'=>1,'critical'=>2,'unknown'=>3); my ($warninglevel, $criticallevel, $tmp, $evalcount, $switch, $queueselect, $queuevalue); my $key = my $value = my $i = my $k = 0; my $exitcode = "unknown"; for(my $m = 0; $m <= $#ARGV; $m++){ if($ARGV[$m] =~ /^\-/){ if($ARGV[$m] eq "-w"||"-c"||"-q"){ $switch = $ARGV[$m]; $args{$switch} = (); if($switch eq "-q"){ $k = 1; } } else { &help; } } else { if($switch eq "-q"){ $args{$switch} = $ARGV[$m]; } elsif($ARGV[$m] =~ /[0-9]{1,5}/){ $args{$switch} = $ARGV[$m]; } else { &help; } } } # main(); $warninglevel = $args{"-w"}; $criticallevel = $args{"-c"}; if($k == 1) { $queueselect = $args{"-q"}; } &getinfo; if($k == 1){ foreach my $str (keys %queues){ if($queueselect eq $str){ $queuevalue = $queues{$queueselect}; last; } else { next; } } if($queuevalue eq ''){ $exitcode = "unknown"; exit $error{"$exitcode"};} else { &checkstatus($queuevalue,$queueselect); } } else { while(($key, $value) = each(%queues)){ &checkstatus($value,$key); } } # Subroutines sub getinfo { my @lines = split ' ', $page; foreach my $line (@lines){ if($line =~ /name/i || $line =~ /size/i){ $line =~ s/^name="//g; $line =~ s/^size="//g; $line =~ s/"(>)?$//g; if($i == 1){ $queues{$tmp} = $line; $i = 0; } else{ $tmp = $line; $i++; } } } } sub checkstatus { my $val=shift; my $key=shift; switch($val){ case { $val <= $warninglevel } { print "OK - $key holding: $val msgs "; $exitcode = "ok" } case { $val > $warninglevel && $val <= $criticallevel } { print "WARNING - $key holding: $val msgs "; $exitcode = "warning" } case { $val > $criticallevel } { print "CRITICAL - $key holding: $val msgs "; $exitcode = "critical" } else { &help; } } } sub help { print "Usage: activemq_watch -w -c (-p )\n"; $exitcode = "unknown"; exit $error{"$exitcode"}; } exit $error{"$exitcode"};