Personal tools
HylaFAX The world's most advanced open source fax server

Talk:Monitor your fax queue with Nagios

This check doesn't include a timeout which means that if the check runs for too long you can have a heap of old checks running which consume a lot of CPU. The problem cascades as the more CPU used by old checks, the more likely it is for new checks to timeout...

At least, this is the situation I encountered when running the check on remote system via check_by_ssh.

I've made the following change to include a timeout. The code was mostly pulled from check_mailq. I've only done basic testing although the change is trivial.

--- check_hylafax       2009-08-11 08:38:27.000000000 +1000
+++ check_hylafax.new   2009-08-11 08:38:39.000000000 +1000
@@ -2,7 +2,7 @@

 use strict;
 use Getopt::Long;
-use vars qw($opt_V $opt_h $opt_H $opt_P $opt_w $opt_c $opt_l $opt_p $PROGNAME);
+use vars qw($opt_V $opt_h $opt_H $opt_P $opt_w $opt_c $opt_l $opt_p $opt_t $PROGNAME);
 use lib "/usr/lib/nagios/plugins" ;
 use utils qw(%ERRORS &print_revision &support &usage);
 use Net::FTP;
@@ -26,6 +26,7 @@
         "P=i" => \$opt_P, "port=i" => \$opt_P,
         "l=s" => \$opt_l, "login=s" => \$opt_l,
         "p=s" => \$opt_p, "password=s" => \$opt_p,
+         "t=i" => \$opt_t, "timeout=i"  => \$opt_t
 );

 if ($opt_V) {
@@ -41,6 +42,10 @@
 my $port = ($opt_P ? $opt_P : "4559");
 usage("Invalid port: $opt_P\n") unless ($port > 1 and $port < 32767);

+unless (defined $opt_t) {
+        $opt_t = $utils::TIMEOUT ;      # default timeout
+}
+
 usage("Warning threshold not specified\n") if not $opt_w;
 my $warning = $opt_w;
 usage("Invalid warning threshold: $opt_w\n") unless $warning =~ /^\d+$/;
@@ -53,6 +58,12 @@
 #my $critical = $1 if ($opt_c =~ /([0-9]{1,2}|100)/);
 #($critical) || usage("Invalid critical threshold: $opt_c\n");

+$SIG{'ALRM'} = sub {
+        print ("ERROR: timed out waiting for HylaFAX queue \n");
+        exit $ERRORS{"WARNING"};
+};
+alarm($opt_t);
+
 my $sig=0;
 my $ftp = Net::FTP->new($host, Port => $port);
 if (not $ftp) {
@@ -67,6 +78,9 @@
 $ftp->quit;
 $sig = scalar(@jobs);

+## shut off the alarm
+alarm(0);
+
 my $err = "OK";
 if ($sig >= $critical) {
        $err = "CRITICAL";
@@ -91,6 +105,8 @@
        print "     connect to this port. Default is 4559.\n";
        print "  -l, --login=STRING\n";
        print "     connect using this login name.\n";
+       print "  -t, --timeout=INTEGER\n";
+       print "     Plugin timeout in seconds (default = $utils::TIMEOUT)\n";
        print "  -p, --password=STRING\n";
        print "     connect using this password.\n";
        print "\n";

This page was last edited on 10 August 2009, at 22:49.

Powered by MediaWiki
Attribution-ShareAlike 2.5

Project hosted by iFAX Solutions