version 1.14, 2009/11/23 21:58:04 |
version 1.15, 2009/11/23 22:24:45 |
|
|
#!/usr/bin/perl -T |
#!/usr/bin/perl -T |
# $RedRiver: check_bioctl,v 1.13 2009/11/23 21:57:31 andrew Exp $ |
# $RedRiver: check_bioctl,v 1.14 2009/11/23 21:58:04 andrew Exp $ |
######################################################################## |
######################################################################## |
# check_bioctl *** A nagios check for OpenBSD bioctl |
# check_bioctl *** A nagios check for OpenBSD bioctl |
# |
# |
|
|
|
|
local %ENV = (); |
local %ENV = (); |
|
|
my $NAGIOS_OUTPUT = 1; |
my $NAGIOS_OUTPUT = 0; |
|
|
my $License = <<'EOL'; |
my $License = <<'EOL'; |
Copyright (c) 2009 Andrew Fresh <andrew@afresh1.com> |
Copyright (c) 2009 Andrew Fresh <andrew@afresh1.com> |
|
|
Invalid => 'CRITICAL', |
Invalid => 'CRITICAL', |
); |
); |
|
|
my $state = 'UNKNOWN'; # tells whether the it is warning, critical, or OK |
|
my @devices; |
my @devices; |
my $opt_h; |
my $opt_h; |
my $opt_V; |
my $opt_V; |
|
|
my %STATES = check_status( \%VOLUMES ); |
my %STATES = check_status( \%VOLUMES ); |
|
|
my $have_results = 0; |
my $have_results = 0; |
$state = 'OK'; |
my $state = 'OK'; |
foreach my $error ( sort { $ERRORS{$b} <=> $ERRORS{$a} } keys %ERRORS ) { |
foreach my $error ( sort { $ERRORS{$b} <=> $ERRORS{$a} } keys %ERRORS ) { |
if ( exists $STATES{$error} ) { |
if ( exists $STATES{$error} ) { |
$have_results++; |
$have_results++; |
|
|
|
|
{ |
{ |
my $vid; |
my $vid; |
|
my $controller; |
|
|
sub parse_bioctl_line { |
sub parse_bioctl_line { |
my ($line) = @_; |
my ($line) = @_; |
|
|
s/\s+$//xms; |
s/\s+$//xms; |
} |
} |
|
|
my ( $controller, $id, $status, $size, $dev, $details, $name ) = @o; |
my ( $c, $id, $status, $size, $dev, $details, $name ) = @o; |
my $index = $id; |
my $index = $id; |
if ($controller) { |
if ($c) { |
$vid = $id; |
$vid = $id; |
|
$controller = $c; |
} |
} |
else { |
else { |
$index = "$vid.$id"; |
$index = "$vid.$id"; |
} |
} |
|
|
my %item = ( |
return $index, |
type => 'volume', |
{ |
controller => $controller, |
controller => $controller, |
id => $id, |
id => $id, |
status => $status, |
status => $status, |
|
|
details => $details, |
details => $details, |
name => $name, |
name => $name, |
volume_id => $vid, |
volume_id => $vid, |
); |
}; |
|
|
return $index, \%item; |
|
} |
} |
} |
} |
|
|
|
|
my ($volumes) = @_; |
my ($volumes) = @_; |
|
|
my %states; |
my %states; |
foreach my $device ( sort keys %{$volumes} ) { |
foreach my $d ( sort keys %{$volumes} ) { |
foreach my $index ( sort keys %{ $volumes->{$device} } ) { |
foreach my $i ( sort { $a <=> $b } keys %{ $volumes->{$d} } ) { |
my $cur_volume = $volumes->{$device}->{$index}; |
my $volume = $volumes->{$d}->{$i}; |
my $cur_state = $Status_Map{ $cur_volume->{'status'} } |
my $state = $Status_Map{ $volume->{'status'} } || 'UNKNOWN'; |
|| 'UNKNOWN'; |
|
|
|
if ( $cur_volume->{'device'} =~ /^\d+:\d/xms ) { |
push @{ $states{$state} }, |
push @{ $states{$cur_state} }, |
sprintf( |
sprintf( |
"%5s %-7s %-11s %s", |
"%5s %-7s %-11s %s", |
$volume->{'controller'}, $volume->{'device'}, |
$cur_volume->{'volume'}{'controller'}, |
$volume->{'status'}, $volume->{'name'} |
$cur_volume->{'device'}, |
); |
$cur_volume->{'status'}, |
|
$cur_volume->{'name'} |
|
); |
|
} |
|
else { |
|
push @{ $states{$cur_state} }, |
|
sprintf( "%5s %-7s %s", |
|
$cur_volume->{'controller'}, |
|
$cur_volume->{'device'}, |
|
$cur_volume->{'status'} ); |
|
} |
|
} |
} |
} |
} |
return %states; |
return %states; |