From 0b9b300f856d021b56950030f4e6053d84bc77c8 Mon Sep 17 00:00:00 2001 From: Jan Wagner Date: Tue, 1 Oct 2013 01:38:45 +0200 Subject: check_file_age: support for --ignore-missing Patch to provide for a -i | --ignore-missing option. This allows files that don't exist to be monitored for without causing an error. The use case is: * one process periodically pushes files to an "input" queue for a second process * the second process, when running cleanly will "consume" (process and remove) these files So the conditions to meet are: 1. If the file doesn't exist, that's fine (OK) 2. If the file exists, but is less than X seconds, that's fine (OK) 3. If the file exists, but greater than X seconds, no good (CRITICAL) Since now check_file_age doesn't permit this behavior, as a non-existent file is considered CRITICAL. Test case was contributed by our lovely Holger. Closes #1181, Closes #989, Closes #862, Closes #1187, Closes #845 Closes Debian Bug #496307 diff --git a/plugins-scripts/check_file_age.pl b/plugins-scripts/check_file_age.pl index 4cdb36d..2781c2a 100755 --- a/plugins-scripts/check_file_age.pl +++ b/plugins-scripts/check_file_age.pl @@ -31,7 +31,7 @@ use utils qw (%ERRORS &print_revision &support); sub print_help (); sub print_usage (); -my ($opt_c, $opt_f, $opt_w, $opt_C, $opt_W, $opt_h, $opt_V); +my ($opt_c, $opt_f, $opt_w, $opt_C, $opt_W, $opt_h, $opt_V, $opt_i); my ($result, $message, $age, $size, $st); $PROGNAME="check_file_age"; @@ -46,6 +46,7 @@ Getopt::Long::Configure('bundling'); GetOptions( "V" => \$opt_V, "version" => \$opt_V, "h" => \$opt_h, "help" => \$opt_h, + "i" => \$opt_i, "ignore-missing" => \$opt_i, "f=s" => \$opt_f, "file" => \$opt_f, "w=f" => \$opt_w, "warning-age=f" => \$opt_w, "W=f" => \$opt_W, "warning-size=f" => \$opt_W, @@ -71,8 +72,15 @@ if (! $opt_f) { # Check that file exists (can be directory or link) unless (-e $opt_f) { - print "FILE_AGE CRITICAL: File not found - $opt_f\n"; - exit $ERRORS{'CRITICAL'}; + if ($opt_i) { + $result = 'OK'; + print "FILE_AGE $result: $opt_f doesn't exist, but ignore-missing was set\n"; + exit $ERRORS{$result}; + + } else { + print "FILE_AGE CRITICAL: File not found - $opt_f\n"; + exit $ERRORS{'CRITICAL'}; + } } $st = File::stat::stat($opt_f); @@ -94,7 +102,7 @@ exit $ERRORS{$result}; sub print_usage () { print "Usage:\n"; - print " $PROGNAME [-w ] [-c ] [-W ] [-C ] -f \n"; + print " $PROGNAME [-w ] [-c ] [-W ] [-C ] [-i] -f \n"; print " $PROGNAME [-h | --help]\n"; print " $PROGNAME [-V | --version]\n"; } @@ -104,6 +112,7 @@ sub print_help () { print "Copyright (c) 2003 Steven Grimm\n\n"; print_usage(); print "\n"; + print " -i | --ignore-missing : return OK if the file does not exist\n"; print " File must be no more than this many seconds old (default: warn 240 secs, crit 600)\n"; print " File must be at least this many bytes long (default: crit 0 bytes)\n"; print "\n"; diff --git a/plugins-scripts/t/check_file_age.t b/plugins-scripts/t/check_file_age.t index 384c276..a515649 100644 --- a/plugins-scripts/t/check_file_age.t +++ b/plugins-scripts/t/check_file_age.t @@ -5,7 +5,7 @@ # use strict; -use Test::More tests => 15; +use Test::More tests => 16; use NPTest; my $successOutput = '/^FILE_AGE OK: /'; @@ -58,6 +58,11 @@ $result = NPTest->testCmd( cmp_ok( $result->return_code, '==', 0, "Checking file size" ); $result = NPTest->testCmd( + "./check_file_age -f /non/existent --ignore-missing" + ); +cmp_ok( $result->return_code, '==', 0, "Honours --ignore-missing" ); + +$result = NPTest->testCmd( "./check_file_age -f $temp_file -c 1000 -W 101" ); cmp_ok( $result->return_code, '==', 1, "One byte too short" ); -- cgit v0.10-9-g596f