# HG changeset patch # User Heiko Schlittermann # Date 1327065454 -3600 # Node ID a29ba54493af716499e9936e72995411e31dd4db # Parent bdbd5e99f85ab94f6e31a48b0561580aeb4b13eb scripts von allen ausser von maik diff -r bdbd5e99f85a -r a29ba54493af Build.PL --- a/Build.PL Fri Jan 20 13:21:49 2012 +0100 +++ b/Build.PL Fri Jan 20 14:17:34 2012 +0100 @@ -7,7 +7,7 @@ dist_name => "xxx", dist_version => "0.7", requires => { - "perl" => "5.10.0", + #"perl" => "5.10.0", }, build_requires => { "Test::More" => "0.98", diff -r bdbd5e99f85a -r a29ba54493af bin/checkfs --- a/bin/checkfs Fri Jan 20 13:21:49 2012 +0100 +++ b/bin/checkfs Fri Jan 20 14:17:34 2012 +0100 @@ -1,70 +0,0 @@ -#! /usr/bin/perl - -#use 5.10.0; -use Switch 'Perl6'; -use strict; -use warnings; -use Pod::Usage; -use Getopt::Long; -use Nagios; - -my $fs; - -GetOptions( - "h|help" => sub { pod2usage(-exit => 0, -verbose => 1) }, - "m|man" => sub { - pod2usage( - -exit => 0, - -verbose => 2, - -noperldoc => system("perldoc -V 2>/dev/null 1>&2") - ); - }, - ) - and defined($fs = shift) - or pod2usage; - -my @df = $ENV{HARNESS_ACTIVE} ? : `df -P -B 1K '$fs'`; - -($fs, my ($blocks, $used, $avail, undef, $mp)) = split " " => $df[1]; - -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 - - checkfs - check the current file system - -=head1 SYNOPSIS - - checkfs [-h|--help] - checkfs [-m|--man] - checkfs - -=head1 DESCRIPTION - -B checks the filesystem. - -=head1 OPTIONS - -=over 4 - -=item B<-h>|B<--help> - -=item B<-m>|B<--man> - -The usual help messages; - -=back - diff -r bdbd5e99f85a -r a29ba54493af bin/checkfs.dominik --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/bin/checkfs.dominik Fri Jan 20 14:17:34 2012 +0100 @@ -0,0 +1,89 @@ +#!/usr/bin/perl + +#use 5.10.0; +use strict; +use warnings; +use Pod::Usage; +use Getopt::Long; +use Nagios; + +#use Switch 'Perl6'; + +my $fs; +my $input = undef; +my $mp; +my $avail; +my $blocks; +my $used; +my $msg; + +GetOptions( + "i|input=s" => \$input, + "h|help" => sub { pod2usage(-exit => 0, -verbose => 1) }, + "m|man" => sub { + pod2usage( + -exit => 0, + -verbose => 2, + -noperldoc => system("perldoc -V 2>/dev/null 1>&2") + ); + }, +); + +if (not defined $input) { + ($fs, $blocks, $used, $avail, undef, $mp) = + split " " => (`df -P -B 1K $fs`)[1]; + $msg = "$fs on $mp: left ${avail}kB of ${blocks}kB"; +} +else { + ($fs, $blocks, $used, $avail, undef, $mp) = + split " " => $input; + $msg = "$fs on $mp: left ${avail}kB of ${blocks}kB"; +} + +if ($avail * 100 / $blocks > 90) { + print "Warning - $msg\n"; + exit Nagios::WARNING; +} +else { + print "OK - $msg\n"; + exit Nagios::OK; +} + +#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 } +#} + +__END__ + +=head1 NAME + + checkfs - check the current file system + +=head1 SYNOPSIS + + checkfs [-i|--input] + checkfs [-h|--help] + checkfs [-m|--man] + checkfs + +=head1 DESCRIPTION + +B checks the filesystem. + +=head1 OPTIONS + +=over 5 + +=item B<-i>|B<--input> + +=item B<-h>|B<--help> + +=item B<-m>|B<--man> + +The usual help messages; + +=back + + diff -r bdbd5e99f85a -r a29ba54493af bin/checkfs.pjotr --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/bin/checkfs.pjotr Fri Jan 20 14:17:34 2012 +0100 @@ -0,0 +1,87 @@ +#! /usr/bin/perl +#use 5.10.0; +use strict; +use warnings; +use Pod::Usage; +use Getopt::Long; +use Nagios; +use Switch 'Perl6'; + +my $fs; +my $stdin = 0; + +GetOptions( + "h|help" => sub { pod2usage(-exit => 0, -verbose => 1) }, + "m|man" => sub { + pod2usage( + -exit => 0, + -verbose => 2, + -noperldoc => system("perldoc -V 2>/dev/null 1>&2") + ); + }, + "s|stdin" => \$stdin, +) and $fs = shift; + +pod2usage if (!$fs && !$stdin); + +my @data; + +if ($stdin) { + while () { + push @data, $_; + } +} else { + @data = `df -P -B 1K $fs`; +} + +analyze(\@data); + +sub analyze { + my $data = shift; + my ($fs, $blocks, $used, $avail, undef, $mp) = split /\s+/ => $data->[1]; + my $msg = "$fs on $mp: left ${avail}kB of ${blocks}kB"; + + my $free = $avail / $blocks; + + if ($free < 0.1) { print "FS CRIT - $msg\n"; exit Nagios::CRITICAL } + elsif ($free < 0.3) { print "FS WARN - $msg\n"; exit Nagios::WARNING } + else { print "FS OK - $msg\n"; exit Nagios::OK } + + +# 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 } +# } +} + +__END__ + +=head1 NAME + + checkfs - check the current file system + +=head1 SYNOPSIS + + checkfs [-h|--help] + checkfs [-m|--man] + checkfs + +=head1 DESCRIPTION + +B checks the filesystem. + +=head1 OPTIONS + +=over 4 + +=item B<-h>|B<--help> + +=item B<-m>|B<--man> + +The usual help messages; + +=back + + + diff -r bdbd5e99f85a -r a29ba54493af bin/checkfs.sylvia --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/bin/checkfs.sylvia Fri Jan 20 14:17:34 2012 +0100 @@ -0,0 +1,87 @@ +#! /usr/bin/perl +use 5.8.8; +use strict; +use warnings; +use Pod::Usage; +use Getopt::Long; +use Nagios; +use Switch; + +my $file; +my $fs; +my $ismp; +my $isblocks; +my $isavail; +my $ispct; + +my $opt_input = undef; + +GetOptions( + "h|help" => sub { pod2usage(-exit => 0, -verbose => 1) }, + "m|man" => sub { + pod2usage( + -exit => 0, + -verbose => 2, + -noperldoc => system("perldoc -V 2>/dev/null 1>&2") + ); + }, + "i|input=s" => \$opt_input, +) and $fs = shift || pod2usage; + +if (defined $opt_input) { + my @line = split(/ /, $opt_input); + $fs = $line[0]; + $isblocks = $line[1]; + $isavail = $line[3]; + $ispct = $line[4]; + $ismp = $line[5]; +} +else +{ + ($fs, my ($blocks, $used, $avail, $pct, $mp)) = + split " " => (`df -P -B 1K $fs`)[1]; + $isblocks = $blocks; + $isavail = $avail; + $ismp = $mp; + $ispct = $pct; +} +my $msg = "$fs on $ismp: left ${isavail}kB of ${isblocks}kB ($ispct)"; + +my $aval = $isavail / $isblocks; +if ($aval < 0.1) { print "FS CRIT - $msg\n"; exit Nagios::CRITICAL } +if ($aval < 0.3) { print "FS WARN - $msg\n"; exit Nagios::WARNING } +if ($aval >= 0.3) { print "FS OK - $msg\n"; exit Nagios::OK } + +__END__ + +=head1 NAME + + checkfs - check the current file system + +=head1 SYNOPSIS + + checkfs [-h|--help] + checkfs [-m|--man] + checkfs [-i|--input] + checkfs + +=head1 DESCRIPTION + +B checks the filesystem. + +=head1 OPTIONS + +=over 4 + +=item B<-h>|B<--help> + +=item B<-m>|B<--man> + +=item B<-i>|B<--input> + +The usual help messages; + +=back + + + diff -r bdbd5e99f85a -r a29ba54493af t/666-dominik.t --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/t/666-dominik.t Fri Jan 20 14:17:34 2012 +0100 @@ -0,0 +1,36 @@ +use strict; +use warnings; + +use Test::More; +use Test::Cmd; + +my $test = Test::Cmd->new(prog => "blib/script/checkfs.dominik", workdir => "", verbose => $ENV{TEST_VERBOSE} > 1); +ok($test, "test environment"); + +# $ENV{HARNESS_ACTIVE} + +my $rc; + + +# create a fake df + + $test->run(args => "-i '/dev/mapper/ITADMIN-ITADMIN 103109920 0 0 0% /ITADMIN'"); + $rc = $? >> 8; + is($rc, 0, "exit 0"); + subtest "run w/ -i" => sub { + like($test->stdout, qr/^OK/, "OK"); + is($test->stderr, "", "stderr should be empty"); + }; + + +$test->run(args => "-i '/dev/mapper/ITADMIN-ITADMIN 103109920 103109920 103109920 0% /ITADMIN'"); + $rc = $? >> 8; + is($rc, 1, "exit 1"); + subtest "run w/ -i" => sub { + like($test->stdout, qr/^Warning/, "Warning"); + is($test->stderr, "", "stderr should be empty"); + }; + +done_testing; + + diff -r bdbd5e99f85a -r a29ba54493af t/666-pjotr.t --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/t/666-pjotr.t Fri Jan 20 14:17:34 2012 +0100 @@ -0,0 +1,64 @@ +use strict; +use warnings; + +use Test::More; +use Test::Cmd; + +my $test = Test::Cmd->new(prog => "blib/script/checkfs.pjotr", workdir => "", verbose => $ENV{TEST_VERBOSE} > 1); +ok($test, "test environment"); + +# $ENV{HARNESS_ACTIVE} + +my $rc; + +$test->run(); +$rc = $? >> 8; +subtest "run w/o args" => sub { + isnt($rc, 0, "exit !0"); + like($test->stderr, qr/^Usage:/, "Usage"); +}; + +$test->run(args => "-h"); +$rc = $? >> 8; +subtest "run w/ -h" => sub { + is($rc, 0, "exit 0"); + like($test->stdout, qr/^Usage:.*^Options/ms, "Usage and Options"); + is($test->stderr, "", "stderr should be empty"); +}; + + +$test->run(args => "-m"); +$rc = $? >> 8; +subtest "run w/ -m" => sub { + is($rc, 0, "exit 0"); + like($test->stdout, qr/^N.*^S.*^O/msi, "looks like manpage"); + is($test->stderr, "", "stderr should be empty"); +}; + +# create a fake df + +my $filename = "t/test_input.pjotr"; + +subtest "fake df" => sub { + if ($filename) { + my $header; + open(my $fh, '<' . $filename); + while (my $t = <$fh>) { + chomp $t; + if (!$header) { + $header = $t; + next; + } + $t =~ s/^\[(\d+)\]\s+//; + my $ret = $1; + $test->run(args => "-s", stdin => "$header\n$t"); + + $rc = $? >> 8; + is($rc, $ret); + } + close($fh); + } +}; + + +done_testing; diff -r bdbd5e99f85a -r a29ba54493af t/666-sylvia.t --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/t/666-sylvia.t Fri Jan 20 14:17:34 2012 +0100 @@ -0,0 +1,71 @@ +use strict; +use warnings; +use Data::Dumper; + +use Test::More; +use Test::Cmd; + +my $test = Test::Cmd->new(prog => "blib/script/checkfs.sylvia", workdir => "", verbose => $ENV{TEST_VERBOSE} > 1); +ok($test, "test environment"); + +# $ENV{HARNESS_ACTIVE} + +my $rc; + +$test->run(); +$rc = $? >> 8; +subtest "run w/o args" => sub { + isnt($rc, 0, "exit !0"); + like($test->stderr, qr/^Usage:/, "Usage"); +}; + +$test->run(args => "-h"); +$rc = $? >> 8; +subtest "run w/ -h" => sub { + is($rc, 0, "exit 0"); + like($test->stdout, qr/^Usage:.*^Options/ms, "Usage and Options"); + is($test->stderr, "", "stderr should be empty"); +}; + + +$test->run(args => "-m"); +$rc = $? >> 8; +subtest "run w/ -m" => sub { + is($rc, 0, "exit 0"); + like($test->stdout, qr/^N.*^S.*^O/msi, "looks like manpage"); + is($test->stderr, "", "stderr should be empty"); +}; + +# -------------------------------------------------------- +# create a fake df with an input line - filesystem is full +# -------------------------------------------------------- +$test->run(args => "-i '/dev/mapper/ITADMIN-ITADMIN 103109920 95914716 7195204 98% /ITADMIN' '/dev/mapper/ITADMIN-ITADMIN'"); +$rc = $? >> 8; +diag($test->stdout); +diag($test->stderr); +subtest "run w/ -i" => sub { + is($rc, 2, "line-test for full filesystem exited with critical value"); +}; + +# -------------------------------------------------------- +# create a fake df with an input file - filesystem is fine +# -------------------------------------------------------- +my $ffile = "t/test_input.sylvia"; +my @flines; +{ our @ARGV = ($ffile); + @flines = <>; +} +$rc = $? >> 8; +my $fline= $flines[0]; +$test->run(args => "-i '$fline' '/dev/mapper/ITADMIN-ITADMIN'"); +$rc = $? >> 8; +diag($test->stdout); +diag($test->stderr); +subtest "run w/ -i" => sub { + is($rc, 0, "file-test for fine filesystem exited with ok value"); +}; + + +done_testing; + + diff -r bdbd5e99f85a -r a29ba54493af t/test_input.pjotr --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/t/test_input.pjotr Fri Jan 20 14:17:34 2012 +0100 @@ -0,0 +1,8 @@ +Filesystem 1024-blocks Used Available Capacity Mounted on +[1] /dev 6631976 4911508 1383572 79% / +[0] /dev 69972 20524 45835 31% /boot +[0] /dev 103109920 20105012 77767148 21% /ITADMIN +[2] /dev 69972 20525 1 31% /boot +[2] /dev 14444 22122 0 33% /aaa +[9] /dev 0 22323 1 33% /aaa +[9] dsdsdqadsaddadasdsadasdad diff -r bdbd5e99f85a -r a29ba54493af t/test_input.sylvia --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/t/test_input.sylvia Fri Jan 20 14:17:34 2012 +0100 @@ -0,0 +1,1 @@ +/dev/mapper/ITADMIN-ITADMIN 103109920 20105264 77766896 21% /ITADMIN