[monitoring-plugins] check_file_age: support for --ignore-missing

Git Repository git at monitoring-plugins.org
Fri Jan 24 21:00:07 CET 2014


 Module: monitoring-plugins
 Branch: master
 Commit: 0b9b300f856d021b56950030f4e6053d84bc77c8
 Author: Jan Wagner <waja at cyconet.org>
   Date: Tue Oct  1 01:38:45 2013 +0200
    URL: https://www.monitoring-plugins.org/repositories/monitoring-plugins/commit/?id=0b9b300

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

---

 plugins-scripts/check_file_age.pl  | 17 +++++++++++++----
 plugins-scripts/t/check_file_age.t |  7 ++++++-
 2 files changed, 19 insertions(+), 5 deletions(-)

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 <secs>] [-c <secs>] [-W <size>] [-C <size>] -f <file>\n";
+	print "  $PROGNAME [-w <secs>] [-c <secs>] [-W <size>] [-C <size>] [-i] -f <file>\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 "  <secs>  File must be no more than this many seconds old (default: warn 240 secs, crit 600)\n";
 	print "  <size>  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" );



More information about the Commits mailing list