Code

check_sybase now maintained in NagiosExchange
authorTon Voon <tonvoon@users.sourceforge.net>
Wed, 14 Feb 2007 20:56:17 +0000 (20:56 +0000)
committerTon Voon <tonvoon@users.sourceforge.net>
Wed, 14 Feb 2007 20:56:17 +0000 (20:56 +0000)
git-svn-id: https://nagiosplug.svn.sourceforge.net/svnroot/nagiosplug/nagiosplug/trunk@1622 f882894a-f735-0410-b71e-b25c423dba1c

NEWS
contrib/check_sybase [deleted file]

diff --git a/NEWS b/NEWS
index 581eb010d3d844474d1bb5305769b318ac50ca70..dafdaeef810aea3d242e57e7ab1448a78d5f1702 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -2,6 +2,7 @@ This file documents the major additions and syntax changes between releases.
 
 ??    ??
        Fixed MKINSTALLDIRS problem in po/
+       check_sybase from contrib now maintained in NagiosExchange
 
 1.4.6 5th February 2007
        Reduced number of DNS lookups in check_ping and netutils.c for IPv6 configurations
diff --git a/contrib/check_sybase b/contrib/check_sybase
deleted file mode 100755 (executable)
index 74cf17a..0000000
+++ /dev/null
@@ -1,370 +0,0 @@
-#!/usr/bin/perl
-# check_sybase
-# A nagios plugin that connects to a Sybase database and checks free space.
-#
-# Copyright 2004-2005 Simon Bellwood, NetMan Network Management and IT 
-#                                                              Services GmbH
-# Portions Copyright 2001 Michael Peppler.
-# License: GPL
-#
-# Bugs and feedback to simon.bellwood@NOSPAM.net-man.at
-# Latest version available from:
-#      http://www.net-man.at/software/check_sybase-LATEST.zip
-#
-# Revision history:
-# 0.1  01-OCT-2004     Initial version.
-# 0.2  08-NOV-2004     Initial release.
-# 0.3  13-JAN-2005     Fixed lib path, improved timeouts.
-# 0.4  26-JAN-2005     Added loginTimeout.
-# 0.5  04-FEB-2005     Fixed dates in history. Oops.
-# 0.6  29-MAR-2005     Added --explain option.
-# 0.7  08-APR-2005     Added initial performance data support.
-my $VERSION = "0.7";
-
-#use warnings;
-use strict;
-use DBI;
-use Getopt::Long;
-use lib qw( /usr/lib/nagios/plugins/ /usr/local/nagios/libexec/ );
-use utils qw(%ERRORS &print_revision &support &usage $TIMEOUT);
-
-
-my $PROGNAME = "check_sybase";
-my $DEFAULT_CHECKTYPE = "FREESPACE";
-my $DEFAULT_WARNING   = "25";
-my $DEFAULT_CRITICAL  = "10";
-my $DEFAULT_TIMEOUT   = "30";
-
-my ($user, $pass, $dbsvr, $dbname, $config, $checktype, $explain,
-    $warn, $crit, $timeout, $help, $version);
-
-my $options_okay = GetOptions(
-       "U|user=s"      => \$user,
-       "P|pass:s"      => \$pass, # ":" means optional
-       "S|dbsvr=s"     => \$dbsvr,
-       "D|dbname=s"    => \$dbname,
-       "config=s"      => \$config,
-       "checktype=s"   => \$checktype,
-       "explain"       => \$explain,
-       "w|warning=i"   => \$warn,
-       "c|critical=i"  => \$crit,
-       "t|timeout=i"   => \$timeout,
-       "h|help"        => \$help,
-       "V|version"     => \$version
-);
-
-
-if (! $options_okay) # Bad option passed
-{
-       &help;
-       &nunk("Bad command line option passed!");
-}
-
-# Use defaults, if needed
-$warn = $warn || $DEFAULT_WARNING;
-$crit = $crit || $DEFAULT_CRITICAL;
-$checktype = $checktype || $DEFAULT_CHECKTYPE;
-$timeout = $timeout || $TIMEOUT || $DEFAULT_TIMEOUT;
-
-if ($help)
-{
-       &help;
-       &nok;
-}
-
-if ($version)
-{
-       print_revision($PROGNAME,"\$Revision$VERSION \$");
-       &nok;
-}
-
-if ($config) # Read any of "user", "pass", "dbsvr", "dbname" from config file
-{
-       &read_config;
-}
-
-# Some more descriptive syntax checks
-my $syntax_error;
-$syntax_error .= "No dbsvr given! " unless $dbsvr;
-$syntax_error .= "No dbname given! " unless $dbname;
-$syntax_error .= "No user given! " unless $user;
-$syntax_error .= "Bad checktype given!"
-       unless $checktype =~ m/^CONNECT|FREESPACE$/;
-&nunk($syntax_error) if $syntax_error;
-
-
-# Just in case of problems, let's not hang Nagios
-$SIG{'ALRM'} = sub {
-       &nunk("Timeout: no response from dbsvr $dbsvr within $timeout seconds");
-};
-alarm($timeout);
-
-
-# Decide on what we are checking
-if ($checktype eq "CONNECT")
-{
-       &connect;
-}
-elsif ($checktype eq "FREESPACE")
-{
-       &check_space;
-}
-
-my $dbh;
-my $is_connected;
-sub connect
-{
-       $dbh = DBI->connect("dbi:Sybase:server=$dbsvr;database=$dbname;".
-                      "timeout=$timeout,loginTimeout=$timeout", $user, $pass)
-               or &ncrit("Could not connect to '$dbname' on '$dbsvr'");
-
-       # Report success for a check of type CONNECT
-       &nok("Connect okay") if $checktype ne "FREESPACE";
-}
-
-sub disconnect
-{
-       $dbh->disconnect if $is_connected;
-       $is_connected = 0;
-}
-
-sub check_space
-{
-       &connect;
-
-       # Most of this sub based on Michael Peppler's check-space.pl
-       # For debugging purposes, more values are collected than needed.
-
-       $dbh->{syb_do_proc_status} = 1;
-
-       my $dbinfo;
-
-       # First check space in the database
-       my $sth = $dbh->prepare("sp_spaceused")
-               or &nunk("Failed to call sp_spaceused on '$dbsvr'");
-       $sth->execute
-               or &nunk("Failed to call sp_spaceused on '$dbsvr'");
-       do {
-               while(my $d = $sth->fetch)
-               {
-                       if($d->[0] =~ /$dbname/)
-                       {
-                               # Grab "database_size"
-                               $d->[1] =~ s/[^\d.]//g;
-                               $dbinfo->{size} = $d->[1];
-                       }
-                       else
-                       {
-                               # Reserved, data, index, unused
-                               foreach (@$d)
-                               {
-                                       s/\D//g;
-                               }
-
-                               # Grab "reserved", "data", "index"
-                               $dbinfo->{reserved} = $d->[0] / 1024;
-                               $dbinfo->{data} = $d->[1] / 1024;
-                               $dbinfo->{index} = $d->[2] / 1024;
-                               $dbinfo->{unused} = $d->[3] / 1024;
-                       }
-               }
-       } while($sth->{syb_more_results});
-
-       &explain("db size:  ".$dbinfo->{size});
-       &explain("reserved: ".$dbinfo->{reserved});
-       &explain(" data:    ".$dbinfo->{data});
-       &explain(" index:   ".$dbinfo->{index});
-       &explain(" unused:  ".$dbinfo->{unused});
-
-       # Get the actual device usage from sp_helpdb to get the free log space
-       $sth = $dbh->prepare("sp_helpdb $dbname")
-               or &nunk("Failed to call sp_helpdb $dbname on '$dbsvr'");
-       $sth->execute
-               or &nunk("Failed to call sp_helpdb $dbname on '$dbsvr'");
-       do {
-               while(my $d = $sth->fetch)
-               {
-                       # Look for "usage" column with value "log only"
-                       if($d->[2] && $d->[2] =~ /log only/)
-                       {
-                               # Grab "size", add it to our log size
-                               $d->[1] =~ s/[^\d\.]//g;
-                               $dbinfo->{log} += $d->[1];
-                       }
-
-                       # Look for "device fragments" column with "log only"
-                       # followed by a number.
-                       if($d->[0] =~ /log only .* (\d+)/)
-                       {
-                               $dbinfo->{logfree} = $1 / 1024;
-                       }
-               }
-       } while($sth->{syb_more_results});
-
-       &explain("log: ".$dbinfo->{log});
-       &explain("logfree: ".$dbinfo->{logfree});
-
-       # Subtract the log size from the database size
-       $dbinfo->{realsize} = $dbinfo->{size} - $dbinfo->{log};
-       &explain("realsize (i.e. size - log) = ".$dbinfo->{realsize});
-
-       # The "reserved" space is free for use by the table that freed it, so 
-       # it is not truly free space. To be safe, our calculation ignores it.
-       my $free = ($dbinfo->{realsize} - $dbinfo->{reserved})/$dbinfo->{realsize};
-       $free = sprintf("%.2f", $free*100);
-
-       &explain("(realsize-reserved)/realsize = $free%");
-       &explain("For safety, this calculation assumes no log space reuse. ".
-       "Because of this, you may get negative values.");
-
-
-       if ($free < $crit)
-       {
-               &ncrit("Free space is $free%! (critical threshold is $crit%)".
-                       "|free_space=$free%");
-       }
-
-       if ($free < $warn)
-       {
-               &nwarn("Free space is $free%! (warning threshold is $warn%)".
-                       "|free_space=$free%");
-       }
-
-
-       &nok("Free space within thresholds ($free% free)".
-               "|free_space=$free%");
-}
-
-sub read_config
-{
-       open (CONFIG, "<$config")
-               or &nunk("Failed to open config file '$config': $!");
-       while (<CONFIG>)
-       {
-               chomp;
-               next if m/^#/; # skip comments
-               next if m/^$/; # skip blanks
-
-               # Each case-insensitive argument can be followed by an optional
-               # colon, then must be followed by whitespace and the value.
-               # Options in the config file override those given on the 
-               # command line, but don't rely on this!
-
-               if    (m/USER:?\s+(\S+)/i)
-               {
-                       $user = $1;
-               }
-               elsif (m/PASS:?\s+(\S+)/i)
-               {
-                       $pass = $1;
-               }
-               elsif (m/DBSVR:?\s+(\S+)/i)
-               {
-                       $dbsvr = $1;
-               }
-               elsif (m/DBNAME:?\s+(\S+)/i)
-               {
-                       $dbname = $1;
-               }
-               else
-               {
-                       &nunk("Invalid line $. in config file '$config'");
-               }
-       }
-       close (CONFIG);
-}
-
-sub help
-{
-       print <<_HELP_;
-Usage: $PROGNAME OPTIONS
-A nagios plugin that connects to a Sybase database and checks free space.
-
-Mandatory arguments to long options are mandatory for short options too.
-  -U, --user           Username to connect to database.
-  -P, --pass           Password to connect to database.
-  -S, --dbsvr          Database server (as in the interfaces file).
-  -D, --dbname         Database name to check.
-  --config=FILE                Config file (see SECURITY below)
-  --checktype=TYPE     Type of check to run (see TYPEs below)
-  --explain            Explains how we calculated the free space.
-  -w, --warning                Warning threshold, in percent (default 25)
-  -c, --critical       Critical threshold, in percent (default 10)
-  -t, --timeout                Timeout value, in seconds (default 30)
-  -h, --help           This help message
-  -V, --version                Version information ($VERSION)
-
-Examples:
-       $PROGNAME -U sa -P secret -S bigbox -D orders
-       $PROGNAME --config=/secure/nagios-sybase.cfg --checktype=CONNECT
-
-TYPEs
- There are two types of checks you can run:
- --checktype=CONNECT
-    Checks just the connection to the database.
- --checktype=FREESPACE
-    (Default) Checks both the connection to the database and the free space.
-
-SECURITY - Using a config file
- Since a "ps ax" will reveal your database username and password, you can 
- instead specify them in a config file. Pass the config file with --config.
- The format of the file is:
-   USER     value
-   PASS     value
- You can also specify a DBSVR and DBNAME in the file. Comments (#) and blank
- lines are ignored. Use whitespace to separate argument and value.
-_HELP_
-
-}
-
-sub explain
-{
-       return unless $explain;
-
-       my $msg = shift;
-       print "$msg\n";
-}
-
-
-
-# Some wrappers..
-
-# Returns code 0, OK
-sub nok
-{
-       my $msg = shift;
-       print "OK: $msg\n" if $msg;
-
-       &disconnect;
-       exit $ERRORS{OK};
-}
-
-# Returns code 1, Warning
-sub nwarn
-{
-       my $msg = shift;
-       print "WARNING: $msg\n";
-
-       &disconnect;
-       exit $ERRORS{WARNING};
-}
-
-# Returns code 2, Critical
-sub ncrit
-{
-       my $msg = shift;
-       print "CRITICAL: $msg\n";
-
-       &disconnect;
-       exit $ERRORS{CRITICAL};
-}
-
-# Returns code 3, Unknown
-sub nunk
-{
-       my $msg = shift;
-       print "ERROR: $msg\n";
-
-       &disconnect;
-       exit $ERRORS{UNKNOWN};
-}