version 1.11, 2009/11/23 21:45:58 |
version 1.12, 2009/11/23 21:52:53 |
|
|
#!/usr/bin/perl -T |
#!/usr/bin/perl -T |
# $RedRiver: check_bioctl,v 1.10 2009/11/12 18:54:38 andrew Exp $ |
# $RedRiver: check_bioctl,v 1.11 2009/11/23 21:45:58 andrew Exp $ |
######################################################################## |
######################################################################## |
# check_bioctl *** A nagios check for OpenBSD bioctl |
# check_bioctl *** A nagios check for OpenBSD bioctl |
# |
# |
|
|
use strict; |
use strict; |
use warnings; |
use warnings; |
|
|
use 5.010; |
|
|
|
local %ENV = (); |
local %ENV = (); |
|
|
my $NAGIOS_OUTPUT => 1; |
my $NAGIOS_OUTPUT = 1; |
|
|
my $License = <<'EOL'; |
my $License = <<'EOL'; |
Copyright (c) 2009 Andrew Fresh <andrew@afresh1.com> |
Copyright (c) 2009 Andrew Fresh <andrew@afresh1.com> |
|
|
use utils qw($TIMEOUT %ERRORS &support); |
use utils qw($TIMEOUT %ERRORS &support); |
|
|
$SIG{'ALRM'} = sub { |
$SIG{'ALRM'} = sub { |
say "ERROR: $PROGNAME timeout"; |
print "ERROR: $PROGNAME timeout\n"; |
exit $ERRORS{'UNKNOWN'}; |
exit $ERRORS{'UNKNOWN'}; |
}; |
}; |
alarm($TIMEOUT); |
alarm($TIMEOUT); |
|
|
or die "Couldn't open bioctl: $!\n"; |
or die "Couldn't open bioctl: $!\n"; |
while ( my $line = <$bioctl> ) { |
while ( my $line = <$bioctl> ) { |
my ( $i, $item ) = parse_bioctl_line($line); |
my ( $i, $item ) = parse_bioctl_line($line); |
|
next unless defined $i; |
$volumes{$d}{$i} = $item; |
$volumes{$d}{$i} = $item; |
} |
} |
## no critic 'die' |
## no critic 'die' |
|
|
foreach my $i ( keys %{ $volumes{$d} } ) { |
foreach my $i ( keys %{ $volumes{$d} } ) { |
my $item = $volumes{$d}{$i}; |
my $item = $volumes{$d}{$i}; |
if ( $item->{device} =~ /^\d+:\d+/xms ) { |
if ( $item->{device} =~ /^\d+:\d+/xms ) { |
$item->{'volume'} = $volumes{$d}{ $i->{volume_id} }; |
$item->{'volume'} = $volumes{$d}{ $item->{volume_id} }; |
} |
} |
} |
} |
} |
} |
|
|
return %volumes; |
return %volumes; |
} |
} |
|
|
|
{ |
|
my $vid; |
sub parse_bioctl_line { |
sub parse_bioctl_line { |
my ($line) = @_; |
my ($line) = @_; |
state $vid; |
|
chomp $line; |
chomp $line; |
|
|
# Do these by columns cuZ that is the easiest for now |
# Do these by columns cuZ that is the easiest for now |
my @o = unpack( "A6 A1 A11 A15 A7 A9 A*", $line ); |
my @o = unpack( "A6 A1 A11 A15 A7 A9 A*", $line ); |
next if $o[0] eq 'Volume'; |
return if $o[0] eq 'Volume'; |
|
|
foreach (@o) { |
foreach (@o) { |
s/^\s+//xms; |
s/^\s+//xms; |
|
|
|
|
return $index, \%item; |
return $index, \%item; |
} |
} |
|
} |
|
|
sub check_status { |
sub check_status { |
my ($volumes) = @_; |
my ($volumes) = @_; |
|
|
my ( $prog, $rev ) = @_; |
my ( $prog, $rev ) = @_; |
$rev =~ s/^\D+([\d\.]+)\D+$/v$1/xms; |
$rev =~ s/^\D+([\d\.]+)\D+$/v$1/xms; |
|
|
say "$prog $rev"; |
print "$prog $rev\n"; |
|
|
return 1; |
return 1; |
} |
} |