version 1.35, 2009/11/10 23:15:15 |
version 1.39, 2009/11/11 18:14:00 |
|
|
#!/usr/bin/perl -T |
#!/usr/bin/perl -T |
# $RedRiver: check_hw_sensors,v 1.34 2009/11/10 23:12:49 andrew Exp $ |
# $RedRiver: check_hw_sensors,v 1.38 2009/11/11 18:08:41 andrew Exp $ |
######################################################################## |
######################################################################## |
# check_hw_sensors *** A nagios check for OpenBSD sysctl hw.sensors |
# check_hw_sensors *** A nagios check for OpenBSD sysctl hw.sensors |
# |
# |
|
|
|
|
use POSIX; |
use POSIX; |
use Config; |
use Config; |
use lib '/usr/local/libexec/nagios'; |
my $PREFIX; |
|
BEGIN { |
|
## no critic 'warnings' |
|
no warnings 'uninitialized'; |
|
$PREFIX = "${PREFIX}" || '/usr/local'; # Magic for OpenBSD ports tree |
|
} |
|
use lib $PREFIX . '/libexec/nagios'; |
use utils qw($TIMEOUT %ERRORS &support); |
use utils qw($TIMEOUT %ERRORS &support); |
|
|
use Getopt::Long; |
use Getopt::Long; |
|
|
} |
} |
$CHECK_SENSOR = $SENSOR; |
$CHECK_SENSOR = $SENSOR; |
|
|
$CHECKS{$SENSOR}{'warn'} = $WARNING; |
$CHECKS{$SENSOR}{'warn'} = $WARNING if $WARNING; |
$CHECKS{$SENSOR}{'crit'} = $CRITICAL; |
$CHECKS{$SENSOR}{'crit'} = $CRITICAL if $CRITICAL; |
|
|
} |
} |
elsif ( defined $FILENAME ) { |
elsif ( defined $FILENAME ) { |
%CHECKS = read_file($FILENAME); |
%CHECKS = read_file($FILENAME); |
|
|
|
|
my $have_results = 0; |
my $have_results = 0; |
$state = 'OK'; |
$state = 'OK'; |
foreach my $error ( sort { $ERRORS{$b} <=> $ERRORS{$a} } keys %ERRORS ) { |
foreach |
|
my $error ( reverse sort { $ERRORS{$a} <=> $ERRORS{$b} } keys %ERRORS ) |
|
{ |
if ( exists $STATES{$error} ) { |
if ( exists $STATES{$error} ) { |
$have_results++; |
$have_results++; |
$state = $error if $ERRORS{$state} < $ERRORS{$error}; |
$state = $error if $ERRORS{$state} < $ERRORS{$error}; |
|
|
if ($NAGIOS_OUTPUT) { |
if ($NAGIOS_OUTPUT) { |
print "$error (" . scalar( @{ $STATES{$error} } ) . ")"; |
print $error . ' (' . scalar( @{ $STATES{$error} } ) . ')'; |
if ( $error ne 'OK' ) { |
if ( $error ne 'OK' ) { |
s/\s+/ /gxms; |
|
print '<br>'; |
print '<br>'; |
print map {" - $_<br>"} @{ $STATES{$error} }; |
print map { " - $_<br>" } @{ $STATES{$error} }; |
} |
} |
} |
} |
else { |
else { |
print "$error (" . scalar( @{ $STATES{$error} } ) . "):\n"; |
print $error . ' (' . scalar( @{ $STATES{$error} } ) . "):\n"; |
foreach ( @{ $STATES{$error} } ) { |
foreach ( @{ $STATES{$error} } ) { |
print " $_\n"; |
print " $_\n"; |
} |
} |
|
|
$r = check_sensor( $sensor, $C->{ $sensor->{id} } ); |
$r = check_sensor( $sensor, $C->{ $sensor->{id} } ); |
$data = $sensor->{id} . '=' . $sensor->{output}; |
$data = $sensor->{id} . '=' . $sensor->{output}; |
} |
} |
elsif ( !$O->{ignore_status} && $sensor->{status} ) { |
elsif ( $sensor->{status} && !$O->{IGNORE_STATUS} ) { |
$r = check_sensor( $sensor, { STATUS => 1 } ); |
$r = check_sensor( $sensor, { STATUS => 1 } ); |
$data = $sensor->{id} . '=' . $sensor->{output}; |
$data = $sensor->{id} . '=' . $sensor->{output}; |
} |
} |
|
|
} |
} |
|
|
foreach my $code ( 'warn', 'crit' ) { |
foreach my $code ( 'warn', 'crit' ) { |
if ( defined $check->{ $code . ".low" } |
if ( defined $check->{ $code . '.low' } |
|| defined $check->{ $code . ".high" } ) |
|| defined $check->{ $code . '.high' } ) |
{ |
{ |
if (( defined $check->{ $code . ".low" } |
if (( defined $check->{ $code . '.low' } |
&& $check->{ $code . ".low" } >= $data |
&& $check->{ $code . '.low' } >= $data |
) |
) |
|| ( defined $check->{ $code . ".high" } |
|| ( defined $check->{ $code . '.high' } |
&& $check->{ $code . ".high" } <= $data ) |
&& $check->{ $code . '.high' } <= $data ) |
) |
) |
{ |
{ |
$result = $errors{$code}; |
$result = $errors{$code}; |
|
|
my $c = $_; |
my $c = $_; |
$c =~ s/[^\d\.]//gxms; |
$c =~ s/[^\d\.]//gxms; |
if ( !length $c ) { |
if ( !length $c ) { |
warn "INVALID CHECK (" . $_ . ") for '$code'\n"; |
warn "INVALID CHECK ($_) for '$code'\n"; |
next; |
next; |
} |
} |
|
|