Code

Fix for regex input of '|', being output causing problems with Nagios' parsing of
[nagiosplug.git] / contrib / check_compaq_insight.pl
1 From mm@elabnet.de Mon Nov 18 09:59:04 2002
2 Date: Mon, 18 Nov 2002 12:19:04 +0100
3 From: Michael Markstaller <mm@elabnet.de>
4 To: nagiosplug-devel@lists.sourceforge.net
5 Subject: [Nagiosplug-devel] Submission: check_insight / checking Compaq
6     Insight Agent status
8 Hi,
10 I've been looking to check the status/health of Compaq Insight Agents on
11 servers and found a spong plugin
12 (http://spong.sourceforge.net/downloads/plugins/spong-network/check_insi
13 ght) which I've slightly changed to work with Nagios.
14 I have pretty no idea of perl at all, just wanted to make it work for
15 me, so please don't shoot me for this copy-paste-code. I've tested some
16 basic things, it seems to work at least to report a warning if smthg is
17 degraded and OK of xcourse ;)
18 I'm also quite unsure if this is the right way to submit, so I'll just
19 try ;)
20 There're some "unknown" components on all servers I've checked so far,
21 if anybody has a documentation of what's exactly returned when getting
22 the OID 1.3.6.1.4.1.232.11.2.10.1.0 (CPQHOST_MIB isn't very descriptive)
23 I'd be happy to fix this.
25 --- cut ---
26 #!/usr/bin/perl
27 #
28 # (c)2002 Michael Markstaller, Elaborated Networks GmbH
29 # send bug reports to <mm@elabnet.de>
30
31 # This program is free software; you can redistribute it and/or
32 # modify it under the terms of the GNU General Public License
33 # as published by the Free Software Foundation; either version 2
34 # of the License, or (at your option) any later version.
35 #
36 # This program is distributed in the hope that it will be useful,
37 # but WITHOUT ANY WARRANTY; without even the implied warranty
38 # of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
39 # GNU General Public License for more details.
40 #
41 # you should have received a copy of the GNU General Public License
42 # along with this program (or with Nagios);  if not, write to the
43 # Free Software Foundation, Inc., 59 Temple Place - Suite 330,
44 # Boston, MA 02111-1307, USA
45 #
46 #
47 # Check Comapq Insight Management Agents Systems Status by SNMP
48 # based on the spong-plugin check_insight from:
49 #
50 http://spong.sourceforge.net/downloads/plugins/spong-network/check_insig
51 ht
52 #
53 # Usage:
54 # check_insight -H <host> -C community
55 #
57 use Net::SNMP;
58 use Getopt::Long;
59 Getopt::Long::Configure('bundling');
61 $version=0.01;
63 my %ERRORS = ('UNKNOWN' , '-1',
64               'OK' , '0',
65               'WARNING', '1',
66               'CRITICAL', '2');
69 #
70 #              some default values
71 #
72 $TIMEOUT=15;
74 #
75 #              get command line options the regular way
76 #
77 GetOptions
78         ("V"   => \$opt_V, "version"       => \$opt_V,
79          "h"   => \$opt_h, "help"          => \$opt_h,
80          "v" => \$verbose, "verbose"       => \$verbose,
81          "H=s" => \$opt_H, "hostname=s"    => \$opt_H,
82          "C=s" => \$opt_C, "community=s"    => \$opt_C);
84 #
85 #              handle the verbose stuff first
86 #
87 if ($opt_V) {
88         print "\n";
89         print "check_insight nagios plugin version $version\n";
90         print "\n";
91         print "The nagios plugins come with ABSOLUTELY NO WARRANTY.  You
92 may redistribute\n";
93         print "copies of the plugins under the terms of the GNU General
94 Public License.\n";
95         print "For more information about these matters, see the file
96 named COPYING.\n";
97         print "\n";
98         print "(c)2002 Michael Markstaller, Elaborated Networks GmbH\n";
99         print "\n";
100         print "\n";
101         exit $ERRORS{'UNKNOWN'};
102
104 if ($opt_h) {
105         print_help();
106         exit $ERRORS{'UNKNOWN'};
110 #              now get options the weired way and set the defaults
111 #              if nothing else is provided
113 $opt_H = shift unless ($opt_H);
114 print_usage() unless ($opt_H);
117 #              dont let us wait forever...
119 $SIG{'ALRM'} = sub {
120      print ("ERROR: No response from server (alarm)\n");
121      exit $ERRORS{"UNKNOWN"};
122 };
123 alarm($TIMEOUT);
127 #              now we set things up for the real work
128 #              and fire up the request
131 ########################################################################
132 ########
133 my ($host) = ($opt_H);
134 my ($color, $summary, $message ) = ( "green", "", "" );
135 ($opt_C) || ($opt_C = shift) || ($opt_C = "public");
136 my ($community) = $opt_C;
138 # We use some look up tables for checking some config options.
139 my (@State) = ("Not Available", "Other", "OK", "Degraded", "Failed");
141 my (@MIBName) = ("", "Std", "Unknown", "Array",
142            "Netware", "SCSI", "Health","Unknown", 
143            "Store", "SM2", "Thresh", "OS", "UPS", 
144            "Unknown", "IDE", "Clusters", "Fibre", 
145            "MIB", "NIC");
147 # These are the positions within the table to actually look at.
148 my (@MIBs) = (1, 2, 3, 5, 6, 10, 11, 14, 18);
150 my ($oid) = "1.3.6.1.4.1.232.11.2.10.1.0";      # SysArray
152 # Open the connection.
153 my ($session, $error) = Net::SNMP->session(Hostname  => $host,
154                                      Community => $community);
156 # If we can't open a connection, just return red straight away.
157 if (! defined $session) {
158     print ("ERROR: Unable to contact server '$opt_H'\n");
159     exit $ERRORS{"UNKNOWN"};
163 $session->translate;
164 my ($response) = $session->get_request($oid);
166   if (!defined $response) {
167     # If there's no response, something screwy is going on, give up.
168     $summary = $session->error;
169     print ("ERROR: $summary\n");
170     exit $ERRORS{"UNKNOWN"};
171     $session->close;
172   } else {
173     $session->close;
175     # I'm not convinced that this is the easiest way to go about this,
176 this is
177     # from some code which I've inherited and I've modified for use in
178 here.
179     # Hi George!
180     %h = %$response;
181     my ($d) = $h{$oid};
183     my (@list) = ();
184         
185     # Gobble the first two char's.
186     $d = substr $d,2;
188     while (length($d) > 0) {
189       my ($v) = substr($d,0,2);
190       $v = hex($v);
191       $d = substr $d,2;
192       push @list, $v;
193     }
195     # Value in $MIBs[1] is the overall status of the machine...
196     my ($cond) = $MIBs[1];
197     $message .= "Status: $State[$cond] ";
199     foreach my $v (@MIBs) {
200       $cond = $list[($v*4)+1];  # A little bit of magic.
202       # We only bother printing the status out if it's actually
203 available,
204       # as if it's N/A or Unknown then it's probably because the machine
205       # isn't available.
206       $message .= "$MIBName[$v]: $State[$cond] " if $cond > 1;
207       next if $cond < 2;
209       # What follows is some trickery to try and not to override a
210 previous
211       # message at the same or lower color.
212       if ($cond == 4) {
213         if ($color ne 'red') {
214           $color = 'red';
215           $summary = "$MIBName[$v] is failed";
216         }
217       } elsif ($cond == 3) {
218         if ($color ne 'red') {
219           $color = 'yellow';
220           $summary = "$MIBName[$v] is degraded" if $summary eq "";
221         }
222       } elsif ($cond < 2) {
223         if ($color eq 'green') {
224           $color = 'yellow';
225           $summary = "$MIBName[$v] is unknown ($cond)" if $summary eq
226 "";
227         }
228       }
229     }
230   }
231   
232   $summary = "Ok" if $summary eq "";
234 #  return ($color, $summary, $message);
236 if ($color eq 'red') {
237         print ("red Output: $message\n");
238         exit $ERRORS{"CRITICAL"};
239  } elsif ($color eq 'yellow') {
240         print ("$summary $message\n");
241         exit $ERRORS{"WARNING"};
242  } elsif ($color eq 'green') {
243         print ("$message\n");
244         exit $ERRORS{"OK"};
248 sub print_usage () {
249         print "Usage: $0 -H <host> -C <community> \n"; }
250  
251 sub print_help () {
252         print "\n";
253         print "\n";
254         print "check_insight nagios plugin version $version\n";
255         print "\n";
256         print "The nagios plugins come with ABSOLUTELY NO WARRANTY.  You
257 may redistribute\n";
258         print "copies of the plugins under the terms of the GNU General
259 Public License.\n";
260         print "For more information about these matters, see the file
261 named COPYING.\n";
262         print "\n";
263         print "(c)2002 Michael Markstaller, Elaborated Networks GmbH\n";
264         print "\n";
265         print "\n";
266         print "This plugin checks the Compaq Insight Management agents
267 system status via SNMP on the specified host.\n";
268         print "\n";
269         print "\n";
270         print_usage();
271         print "\n";
272         print "Options:\n";
273         print " -H, --hostname=ADDRESS\n";
274         print "     host name argument for server.\n";
275         print " -C, --community=STRING\n";
276         print "     SNMP Read-community string.\n";
277         print " -h, --help\n";
278         print "     print detailed help screen.\n";
279         print " -V, --version\n";
280         print "     print version information.\n";
281         print "\n";
282         print "\n";
283
284 --- cut ---
286 Michael
289 -------------------------------------------------------
290 This sf.net email is sponsored by: To learn the basics of securing 
291 your web site with SSL, click here to get a FREE TRIAL of a Thawte 
292 Server Certificate: http://www.gothawte.com/rd524.html
293 _______________________________________________
294 Nagiosplug-devel mailing list
295 Nagiosplug-devel@lists.sourceforge.net
296 https://lists.sourceforge.net/lists/listinfo/nagiosplug-devel