[BACK]Return to check_hw_sensors CVS log [TXT][DIR] Up to [local] / nagios / check_hw_sensors

Diff for /nagios/check_hw_sensors/check_hw_sensors between version 1.8 and 1.14

version 1.8, 2006/05/02 22:23:29 version 1.14, 2006/05/04 02:30:29
Line 1 
Line 1 
 #!/usr/bin/perl  #!/usr/bin/perl -T
 # $RedRiver: check_hw_sensors,v 1.7 2006/05/02 20:03:53 andrew Exp $  # $RedRiver: check_hw_sensors,v 1.13 2006/05/03 22:16:42 andrew Exp $
 ########################################################################  ########################################################################
 # check_hw_sensors *** A nagios check for OpenBSD hw.sensors  # check_hw_sensors *** A nagios check for OpenBSD hw.sensors
 #  #
 # 2006.05.01 #*#*# andrew fresh <andrew@mad-techies.org>  # 2006.05.01 #*#*# andrew fresh <andrew@mad-techies.org>
 ########################################################################  ########################################################################
 # TODO:  # TODO:
 #   Really need to fix the documentation issue.  #   Really need real documentation.
 #  #
 #   I want the ability to just check the "status" entry that is in some output.  For example the OK here:  #   I want the ability to just check the "status" entry that is in
   #   some output.  For example the OK here:
 #     hw.sensors.1=esm0, CPU 1, OK, temp, 31.00 degC / 87.80 degF  #     hw.sensors.1=esm0, CPU 1, OK, temp, 31.00 degC / 87.80 degF
 ########################################################################  ########################################################################
 use strict;  use strict;
Line 16 
Line 17 
   
 #use Data::Dumper;  #use Data::Dumper;
   
   %ENV = ();
   
 use constant NAGIOS_OUTPUT => 1;  use constant NAGIOS_OUTPUT => 1;
   
 use POSIX;  use POSIX;
 use lib "/usr/local/libexec/nagios";  use lib "/usr/local/libexec/nagios";
 #use lib $ENV{'HOME'};  
 use utils qw($TIMEOUT %ERRORS &print_revision &support);  use utils qw($TIMEOUT %ERRORS &print_revision &support);
   
 use Getopt::Long;  use Getopt::Long;
Line 39 
Line 41 
 my $sensor;  my $sensor;
 my $warning;  my $warning;
 my $critical;  my $critical;
 my $opt_h ;  my $opt_h;
 my $opt_V ;  my $opt_V;
   
 my $CHECK_SENSOR = $BASE;  my $CHECK_SENSOR = $BASE;
 my %CHECKS;  my %CHECKS;
Line 75 
Line 77 
 }  }
   
 unless ( (  unless ( (
                 defined $filename ||                  defined $filename ||
                 (defined $sensor && ($warning || $critical))                  (defined $sensor && ($warning || $critical))
          ) &&           ) &&
                 ( (!defined $filename) || (!defined $sensor) )           ( (!defined $filename) || (!defined $sensor) )
 ) {  ) {
         print_help();          print_help();
         exit $ERRORS{'OK'};          exit $ERRORS{'OK'};
Line 140 
Line 142 
                 push @{ $states{ $r } },                  push @{ $states{ $r } },
                         $check . '=' . $SENSORS{$check}{'output'};                          $check . '=' . $SENSORS{$check}{'output'};
         } else {          } else {
                 # XXX Error missing sensor  
                 push @{ $states{'UNKNOWN'} }, $check . '=No sensor with this id';                  push @{ $states{'UNKNOWN'} }, $check . '=No sensor with this id';
         }          }
 }  }
Line 160 
Line 161 
                 if (NAGIOS_OUTPUT) {                  if (NAGIOS_OUTPUT) {
                         print "$error (" . scalar(@{ $states{ $error } }) . ")";                          print "$error (" . scalar(@{ $states{ $error } }) . ")";
                         unless ($error eq 'OK') {                          unless ($error eq 'OK') {
                                 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";
Line 200 
Line 201 
         my $type  = shift;          my $type  = shift;
         my $check = shift;          my $check = shift;
   
         if (defined $check->{'warn'} && $check->{'warn'} =~ /:/) {          foreach my $code ('crit', 'warn') {
                 if (my ($low, $high) = split /:/, $check->{'warn'}) {                  if (defined $check->{$code} && $check->{$code} =~ /:/) {
                         $check->{'warn.low'}  = $low;                          if (my ($low, $high) = split /:/, $check->{$code}) {
                         $check->{'warn.high'} = $high;                                  $check->{$code . '.low'}  = $low;
                                   $check->{$code . '.high'} = $high;
                           }
                           delete $check->{$code};
                 }                  }
                 delete $check->{'warn'};  
         }                  foreach my $severity ('low', 'high') {
         if (defined $check->{'crit'} && $check->{'crit'} =~ /:/) {                          if (defined $check->{$severity}) {
                 if (my ($low, $high) = split /:/, $check->{'crit'}) {                                  $check->{ $code . '.' . $severity } = $check->{$severity}
                         $check->{'crit.low'}  = $low;                                          unless defined $check->{ $code . '.' . $severity };
                         $check->{'crit.high'} = $high;                          }
                 }                  }
                 delete $check->{'crit'};                  no warnings 'uninitialized';
                   $check->{$code} = [ split /,\s*/, $check->{$code} ];
         }          }
   
         if (defined $check->{'low'}) {  
                 $check->{'warn.low'} = $check->{'low'}  
                         unless defined $check->{'warn.low'};  
                 $check->{'crit.low'} = $check->{'low'}  
                         unless defined $check->{'crit.low'};  
         }  
         if (defined $check->{'high'}) {  
                 $check->{'warn.high'} = $check->{'high'}  
                         unless defined $check->{'warn.high'};  
                 $check->{'crit.high'} = $check->{'high'}  
                         unless defined $check->{'crit.high'};  
         }  
   
         no warnings 'uninitialized';  
         $check->{'warn'} = [ split /,\s*/, $check->{'warn'} ];  
         $check->{'crit'} = [ split /,\s*/, $check->{'crit'} ];  
   
         return $check;          return $check;
 }  }
   
Line 293 
Line 281 
                                         $result = $errors{$code}                                          $result = $errors{$code}
                                                 if ($c <= $data);                                                  if ($c <= $data);
                                 }                                  }
                         } elsif (defined $check->{$code}) {                          } elsif (@{ $check->{$code} }) {
                                 my $matched = 0;                                  my $matched = 0;
                                 foreach my $c (@{ $check->{$code} }) {                                  foreach my $c (@{ $check->{$code} }) {
                                         $c =~ s/[^\d\.]//g;                                          $c =~ s/[^\d\.]//g;
Line 361 
Line 349 
                                         $result = $errors{$code}                                          $result = $errors{$code}
                                                 if ($c <= $data);                                                  if ($c <= $data);
                                 }                                  }
                         } elsif (defined $check->{$code}) {                          } elsif (@{ $check->{$code} }) {
   
                                 my $matched = 0;                                  my $matched = 0;
                                 foreach my $c (@{ $check->{$code} }) {                                  foreach my $c (@{ $check->{$code} }) {
Line 393 
Line 381 
                         $sensor->{'type'} eq 'drive' ||                          $sensor->{'type'} eq 'drive' ||
                         $sensor->{'type'} eq 'indicator'                          $sensor->{'type'} eq 'indicator'
                 ) {                  ) {
                         if (defined $check->{$code}) {                          if (@{ $check->{$code} }) {
                                 my $matched = 0;                                  my $matched = 0;
                                 foreach (@{ $check->{$code} }) {                                  foreach (@{ $check->{$code} }) {
                                         if ($_ eq $sensor->{'data'}) {                                          if ($_ eq $sensor->{'data'}) {
Line 416 
Line 404 
 sub print_help {  sub print_help {
         print <<EOL;          print <<EOL;
 $PROGNAME plugin for Nagios monitors sysctl hw.sensors on OpenBSD  $PROGNAME plugin for Nagios monitors sysctl hw.sensors on OpenBSD
         $PROGNAME (-f [<FILENAME>]|(-s <hw.sensors id> -w limit -c limit))      $PROGNAME (-f [<FILENAME>]|(-s <hw.sensors id> -w limit -c limit))
   
 Usage:  Usage:
         -f, --filename=FILE      -f, --filename=FILE
                 FILE to load checks from (defaults to /etc/sensorsd.conf)          FILE to load checks from (defaults to /etc/sensorsd.conf)
         -s, --sensor=ID      -s, --sensor=ID
                 ID of a single sensor.  "-s 0" means hw.sensors.0.          ID of a single sensor.  "-s 0" means hw.sensors.0.
         -w, --warning=RANGE or single ENTRY      -w, --warning=RANGE or single ENTRY
                 Exit with WARNING status if outside of RANGE or if != ENTRY          Exit with WARNING status if outside of RANGE or if != ENTRY
         -c, --critical=INTEGER      -c, --critical=RANGE or single ENTRY
                 Exit with CRITICAL status if outside of RANGE or if != ENTRY          Exit with CRITICAL status if outside of RANGE or if != ENTRY
   
         -h (--help)       usage help      -h (--help)       usage help
   
 FILE is in the same format as sensorsd.conf(5).  These additional entries in the file are ignored by sensorsd(8).  $PROGNAME understands the following entries:  FILE is in the same format as sensorsd.conf(5) plus some additional
         low, high, crit, warn, crit.low, crit.high, warn.low, warn.high  entries.  These additional entries in the file are ignored by
   sensorsd(8).
   
 An ENTRY depends on the type.  The descriptions in sensorsd.conf(5) can be used when appropriate, or you can use the following:  $PROGNAME understands the following entries:
         volts_dc, fanrpm or raw - Anything that includes digits.  Anything that isn't a digit or period is stripped from the entry and the sensor output and they are compared.  
         temp - Can be as above, but if the entry has an F in it, it compares farenheit, otherwise it uses celcius.  
         indicator or drive - does a case sensitive match of each entry in the comma separated list and if it does not match any of the entries, it matches the status.  
   
 The entries 'crit' or 'warn' (or the -c or -w on the command line) may be a RANGE or a comma separated list of acceptable values.  The comma separated list of values contains a list of things that will NOT cause the status.  This is possibly counterintuitive, but you are more likely to know good values than bad values.      low, high, crit, warn, crit.low, crit.high, warn.low, warn.high
   
 A RANGE is a low ENTRY and a high ENTRY separated by a colon (:).  An ENTRY depends on the type.  The descriptions in sensorsd.conf(5)
   can be used when appropriate, or you can use the following:
   
       volts_dc, fanrpm or raw - Anything that includes digits.
       Both the value of the check and the value of the sensor
       response that are not either a digit or period are stripped
       and then the two resultant values are compared.
   
       temp - Can be as above, but if the entry has an F in it,
       it compares farenheit, otherwise it uses celcius.
   
       indicator or drive - does a case sensitive match of each
       entry in the comma separated list and if it does not match
       any of the entries, it matches the status.
   
   The entries 'crit' or 'warn' (or the -c or -w on the command line)
   may be a RANGE or a comma separated list of acceptable values.
   The comma separated list of values contains a list of things that
   will NOT cause the status.  This is possibly counterintuitive, but
   you are more likely to know good values than bad values.
   
   A RANGE is a low ENTRY and a high ENTRY separated by a colon (:).
   It can also be low: or :high with the other side left blank to only
   make the single check..
   
 EOL  EOL
   

Legend:
Removed from v.1.8  
changed lines
  Added in v.1.14

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>