diff options
Diffstat (limited to 'contrib/checkciscotemp.pl')
-rw-r--r-- | contrib/checkciscotemp.pl | 163 |
1 files changed, 163 insertions, 0 deletions
diff --git a/contrib/checkciscotemp.pl b/contrib/checkciscotemp.pl new file mode 100644 index 00000000..a702a89e --- /dev/null +++ b/contrib/checkciscotemp.pl @@ -0,0 +1,163 @@ +#!/usr/bin/perl -wT +# check_ciscotemp.pl +# +# Copyright (C) 2000 Leland E. Vandervort <leland@mmania.com> +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty +# of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# you should have received a copy of the GNU General Public License +# along with this program (or with Nagios); if not, write to the +# Free Software Foundation, Inc., 59 Temple Place - Suite 330, +# Boston, MA 02111-1307, USA +#################################### +# Nagios pluging to check inlet and outlet temperatures on +# Cisco router platforms which support environmental monitoring +# (7200, 7500, GSR12000...) +#################################### +# default temperature thresholds are 30C for inlet, 40C outlet. +# if input or output is less than thresholds, returns OK +# if equal to (the temps don't change that rapidly) returns WARNING +# if greater than threshold, returns CRITICAL +# if undetermined, or cannot access environmental, returns UNKNOWN +# (in accordance with the plugin coding guidelines) +#################################### + +use Net::SNMP; +use Getopt::Long; +&Getopt::Long::config('auto_abbrev'); + +my $status; +my $response = ""; +my $timeout = 10; +my $community = "public"; +my $port = 161; +my $INTAKE_TEMP = "1.3.6.1.4.1.9.9.13.1.3.1.3.1"; +my $OUTLET_TEMP = "1.3.6.1.4.1.9.9.13.1.3.1.3.3"; +my $in_temp; +my $out_temp; +my $inlet_thresh = 30; +my $outlet_thresh = 40; + +my %STATUSCODE = ( 'UNKNOWN' => '-1', + 'OK' => '0', + 'WARNING' => '1', + 'CRITICAL' => '2'); + +my $state = "UNKNOWN"; + + +$SIG{'ALRM'} = sub { + print "ERROR: No snmp response from $hostname (sigALRM)\n"; + exit($STATUSCODE{"UNKNOWN"}); +}; + +Getopt::Long::Configure('bundling'); +$status = GetOptions + ("community=s", \$community, + "C=s", \$community, + "H=s", \$hostname, + "hostname=s", \$hostname, + "port=i", \$port, + "timeout=i", \$timeout, + "c=s", \$critical_vals, + "w=s", \$warning_vals, + "ithresh=i", \$inlet_thresh, + "othresh=i", \$outlet_thresh); + +if($status == 0) { + &show_help; +} + +unless (defined($hostname)) { + $hostname = shift || &show_help; +} + +if (defined($critical_vals)) { + die "Cannot Parse Critical Thresholds\n" + unless (split(/:/,$critical_vals)>=2); + ($inlet_thresh,$outlet_thresh) = @_ +} +die unless(defined($inlet_thresh) && defined($outlet_thresh)); + +if (defined($warning_vals)) { + die "Cannot Parse Critical Thresholds\n" + unless (split(/:/,$warning_vals)>=2); + ($inlet_warn,$outlet_warn) = @_; +}else{ + $inlet_warn=$inlet_thresh; + $outlet_warn=$outlet_thresh; +} + +alarm($timeout); + +$in_temp = &SNMPGET($INTAKE_TEMP); +$out_temp = &SNMPGET($OUTLET_TEMP); + +if (($in_temp < $inlet_thresh) && ($out_temp < $outlet_thresh)) { + $state = "OK"; +} +elsif (($in_temp == $inlet_thresh) || ($out_temp == $outlet_thresh)) { + if(($in_temp > $inlet_thresh) || ($out_temp > $outlet_thresh)) { + $state = "CRITICAL"; + } + else { + $state = "WARNING"; + } +} +elsif (($in_temp > $inlet_thresh) || ($out_temp > $outlet_thresh)) { + $state = "CRITICAL"; +} +else { + $state = "WARNING"; +} + +print "$state Inlet Temp: $in_temp Outlet Temp: $out_temp\n"; +exit($STATUSCODE{$state}); + +sub show_help { + printf("\nPerl envmon temperature plugin for Nagios\n"); + printf("Usage:\n"); + printf(" + check_ciscotemp [options] <hostname> + Options: + -C snmp-community + -p snmp-port + -i input temperature threshold + -o output temperature threshold + +"); + printf("Copyright (C)2000 Leland E. Vandervort\n"); + printf("check_ciscotemp comes with absolutely NO WARRANTY either implied or explicit\n"); + printf("This program is licensed under the terms of the\n"); + printf("GNU General Public License\n(check source code for details)\n\n\n"); + exit($STATUSCODE{"UNKNOWN"}); +} + +sub SNMPGET { + $OID = shift; + ($session,$error) = Net::SNMP->session( + Hostname => $hostname, + Community => $community, + Port => $port + ); + if(!defined($session)) { + printf("$state %s\n", $error); + exit($STATUSCODE{$state}); + } + if(!defined($response = $session->get_request($OID))) { + printf("$state %s\n", $session->error()); + $session->close(); + exit($STATUSCODE{$state}); + } + $session->close(); + return($response->{$OID}); +} + |