From: Jan Willamowius Date: Tue, 27 Sep 2005 16:14:55 +0000 (+0000) Subject: Plugin to monitor Compaq Insight Management software by Andrew Ruthven X-Git-Tag: spong-2_8_0-beta1~3 X-Git-Url: http://git.etc.gen.nz/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=8f342e674046fa070b1779a2339fcb7a97a806e6;p=spong.git Plugin to monitor Compaq Insight Management software by Andrew Ruthven --- diff --git a/src/lib/Spong/Network/plugins/check_insight b/src/lib/Spong/Network/plugins/check_insight new file mode 100755 index 0000000..9d30eee --- /dev/null +++ b/src/lib/Spong/Network/plugins/check_insight @@ -0,0 +1,188 @@ +=head1 NAME + +B - spong-network module to check Compaq Insight Management +software + +=head1 DESCRIPTION + +This is a plugin module for the Spong L program. The +B module checks the status of the Compaq Insight Management +software +on a host by polling via it SNMP. It reports the status of the various +components of the Insight software. + +=cut + +# Register the routine with the plugin registry +$PLUGINS{'insight'} = \&check_insight; + +use Net::SNMP; + +sub check_insight { + my ($host) = @_; + my ($color, $summary, $message ) = ( "green", "", "" ); + my ($community) = $HOSTS{$host}->{'snmp_community'} || 'public'; + + # We use some look up tables for checking some config options. + my (@State) = ("Not Available", "Other", "OK", "Degraded", "Failed"); + + my (@MIBName) = ("", "Std", "Unknown", "Array", + "Netware", "SCSI", "Health","Unknown", + "Store", "SM2", "Thresh", "OS", "UPS", + "Unknown", "IDE", "Clusters", "Fibre", + "MIB", "NIC"); + + # These are the positions within the table to actually look at. + my (@MIBs) = (1, 2, 3, 5, 6, 10, 11, 14, 18); + + my ($oid) = "1.3.6.1.4.1.232.11.2.10.1.0"; # SysArray + + # Open the connection. + my ($session, $error) = Net::SNMP->session(Hostname => $host, + Community => $community); + + # If we can't open a connection, just return red straight away. + if (! defined $session) { + $color = "red"; + $summary = "Can't open connection."; + $message = $summary; + + return ($color, $summary, $message); + } + + + $session->translate; + my ($response) = $session->get_request($oid); + + if (!defined $response) { + # If there's no response, something screwy is going on, give up. + $color = 'red'; + $summary = $session->error; + $message = $summary; + $session->close; + } else { + $session->close; + + # I'm not convinced that this is the easiest way to go about this, this is + # from some code which I've inherited and I've modified for use in here. + # Hi George! + %h = %$response; + my ($d) = $h{$oid}; + + my (@list) = (); + + # Gobble the first two char's. + $d = substr $d,2; + + while (length($d) > 0) { + my ($v) = substr($d,0,2); + $v = hex($v); + $d = substr $d,2; + push @list, $v; + } + + # Value in $MIBs[1] is the overall status of the machine... + my ($cond) = $MIBs[1]; + $message .= "Status: $State[$cond]\n"; + + foreach my $v (@MIBs) { + $cond = $list[($v*4)+1]; # A little bit of magic. + + # We only bother printing the status out if it's actually available, + # as if it's N/A or Unknown then it's probably because the machine + # isn't available. + $message .= "$MIBName[$v]: $State[$cond]\n" if $cond > 1; + next if $cond < 2; + + # What follows is some trickery to try and not to override a previous + # message at the same or lower color. + if ($cond == 4) { + if ($color ne 'red') { + $color = 'red'; + $summary = "$MIBName[$v] is failed"; + } + } elsif ($cond == 3) { + if ($color ne 'red') { + $color = 'yellow'; + $summary = "$MIBName[$v] is degraded" if $summary eq ""; + } + } elsif ($cond < 2) { + if ($color eq 'green') { + $color = 'yellow'; + $summary = "$MIBName[$v] is unknown ($cond)" if $summary eq ""; + } + } + } + } + + $summary = "Ok" if $summary eq ""; + + return ($color, $summary, $message); +} + +1; + +__END__ + +=head2 Output Returned + +=over 4 + +=item Status + +If there is nothing degraded or failed on the machine then 'green' status +is returned. Otherwise, 'yellow' is returned for degraded, 'red' for failed. + +=item Summary Field + +If there are no problems, 'Ok' is returned. Otherwise the summary field +will have a short description of what the problem or anamoly is. + +=item Detail Message Field + +If the machine is contactable, then the detail message will have the status +of each item which is available on that machine. Possible values are 'Ok', +'Degraded' and 'Failed'. + +=back + +=head2 Configuration + +=over 4 + +The default SNMP Community name is I. To override the default name +specify a C attribute in a host's entry in the I<%HOSTS) +variable in the L configuration file. See the L +section for a detailed example. + +=back + +=head1 EXAMPLES + + %HOSTS = ( 'hostname.my-inc.com' => { 'services' => 'insight', + 'ip_addr' => ['192.168.13.123'], + 'snmp_community' => 'local-read', + ); + +=head1 SEE ALSO + +L, L, +L, +L + +=head1 NOTES + +This module is based upon some internal software at Chelmer Ltd written by +George Sadlier . This version is being released under +the GPL, if you find it useful, then excellant! + +=head1 RESTRICTIONS + +B uses the C module, this must be installed for +this module to be useful. + +=head1 AUTHOR + +The author is Andrew Ruthven (or ). +Based on code by George Sadlier . +