--- a/Build.PL Fri Jan 20 09:13:33 2012 +0100
+++ b/Build.PL Fri Jan 20 13:21:49 2012 +0100
@@ -11,6 +11,7 @@
},
build_requires => {
"Test::More" => "0.98",
+ "Test::Compile" => "0",
},
script_files => [ glob "bin/*" ],
)->create_build_script();
--- a/bin/checkfs Fri Jan 20 09:13:33 2012 +0100
+++ b/bin/checkfs Fri Jan 20 13:21:49 2012 +0100
@@ -1,5 +1,7 @@
-#! /usr/bin/perl
-use 5.10.0;
+#! /usr/bin/perl
+
+#use 5.10.0;
+use Switch 'Perl6';
use strict;
use warnings;
use Pod::Usage;
@@ -17,18 +19,27 @@
-noperldoc => system("perldoc -V 2>/dev/null 1>&2")
);
},
-) and $fs = shift // pod2usage;
+ )
+ and defined($fs = shift)
+ or pod2usage;
-($fs, my ($blocks, $used, $avail, undef, $mp)) =
- split " " => (`df -P -B 1K $fs`)[1];
-my $msg = "$fs on $mp: left ${avail}kB of ${blocks}kB";
+my @df = $ENV{HARNESS_ACTIVE} ? <STDIN> : `df -P -B 1K '$fs'`;
+
+($fs, my ($blocks, $used, $avail, undef, $mp)) = split " " => $df[1];
-given ($avail / $blocks) {
- when ($_ < 0.1) { print "FS CRIT - $msg\n"; exit Nagios::CRITICAL }
- when ($_ < 0.3) { print "FS WARN - $msg\n"; exit Nagios::WARNING }
- default { print "FS OK - $msg\n"; exit Nagios::OK }
+if (not defined $avail or not defined $blocks or $blocks == 0) {
+ print "FS UNKNOWN - can't determine values for $fs\n";
+ exit Nagios::UNKNOWN;
}
+my $ratio = int(100 * ($avail / $blocks));
+my $msg = "$fs on $mp: left ${avail}kB of ${blocks}kB ($ratio%)";
+if ($ratio > 30) { print "FS OK - $msg\n"; exit Nagios::OK }
+if ($ratio > 10) { print "FS WARN - $msg\n"; exit Nagios::WARNING }
+
+print "FS CRIT - $msg ($ratio%)\n";
+exit Nagios::CRITICAL;
+
__END__
=head1 NAME
--- a/t/010-run.t Fri Jan 20 09:13:33 2012 +0100
+++ b/t/010-run.t Fri Jan 20 13:21:49 2012 +0100
@@ -4,7 +4,11 @@
use Test::More;
use Test::Cmd;
-my $test = Test::Cmd->new(prog => "blib/script/checkfs", workdir => "", verbose => $ENV{TEST_VERBOSE} > 1);
+my $test = Test::Cmd->new(
+ prog => "blib/script/checkfs",
+ workdir => "",
+ verbose => $ENV{TEST_VERBOSE} > 1
+);
ok($test, "test environment");
# $ENV{HARNESS_ACTIVE}
@@ -26,7 +30,6 @@
is($test->stderr, "", "stderr should be empty");
};
-
$test->run(args => "-m");
$rc = $? >> 8;
subtest "run w/ -m" => sub {
@@ -36,6 +39,59 @@
};
# create a fake df
+my $head =
+ "Filesystem 1024-blocks Used Available Capacity Mounted on";
+my @data = (
+ { in => "/dev/mapper/jumper-root 7970992 6769920 801696 90% /", r => 2 },
+ { in => "tmpfs 1927372 12 1927360 1% /lib/init/rw", r => 0 },
+ { in => "varrun 1927372 168 1927204 1% /var/run", r => 0 },
+ { in => "varlock 1927372 0 1927372 0% /var/lock", r => 0 },
+ { in => "udev 1921416 256 1921160 1% /dev", r => 0 },
+ { in => "tmpfs 1927372 40 1927332 1% /dev/shm", r => 0 },
+ {
+ in => "/dev/mapper/jumper-home 30963708 27663468 1727736 95% /home",
+ r => 2
+ },
+ { in => "/dev/sda1 235021 35434 187453 16% /boot", r => 0 },
+ { in => "/dev/mapper/jumper-jumper 13789092 13701780 0 100% /.o", r => 2 },
+ {
+ in =>
+ "/dev/mapper/jumper-squid 1108684 247408 804956 24% /var/spool/squid",
+ r => 0
+ },
+ {
+ in => "/dev/mapper/jumper-log 2097152 32364 2064788 2% /var/log",
+ r => 0
+ },
+ { in => "tmpfs 131072 3568 127504 3% /tmp", r => 0 },
+ {
+ in => "/dev/mapper/jumper-src 10321208 888736 8908184 10% /usr/src",
+ r => 0
+ },
+ { in => "tmpfs 0 3568 127504 3% /tmp", r => 3 },
+);
+foreach (@data) {
+
+ my $send = $_->{in};
+ my $expect = $_->{r};
+ my $fs = (split " " => $send)[-1];
+
+ $test->run(args => $fs, stdin => "$head\n$send");
+ my $rc = $? >> 8;
+
+ subtest "filesystem $fs (expect $expect)" => sub {
+
+ is($rc, $expect, "expected $expect")
+ or diag length($test->stderr) ? "STDERR: " . $test->stderr
+ : "" . length($test->stdout) ? "STDOUT: " . $test->stdout
+ : "";
+
+ if ($expect == 0) { like($test->stdout, qr/FS OK/, "ok $fs") }
+ elsif ($expect == 1) { like($test->stdout, qr/FS WARN/, "warn $fs") }
+ elsif ($expect == 2) { like($test->stdout, qr/FS CRIT/, "crit $fs") }
+ else { like($test->stdout, qr/FS UNKN/, "unknown $fs") }
+ };
+}
done_testing;