Code

check_sybase 0.7 from Simon Bellman. Thx
authorStanley Hopcroft <stanleyhopcroft@users.sourceforge.net>
Fri, 29 Apr 2005 00:27:49 +0000 (00:27 +0000)
committerStanley Hopcroft <stanleyhopcroft@users.sourceforge.net>
Fri, 29 Apr 2005 00:27:49 +0000 (00:27 +0000)
git-svn-id: https://nagiosplug.svn.sourceforge.net/svnroot/nagiosplug/nagiosplug/trunk@1167 f882894a-f735-0410-b71e-b25c423dba1c

contrib/check_sybase

index 1f1cbf8887997ba751ab9fe8b00e4ad499f0d622..74cf17a4ae2da1b846117beef3ae6ffd3727ed32 100755 (executable)
@@ -1,22 +1,27 @@
-#!/usr/bin/perl -w
+#!/usr/bin/perl
 # check_sybase
 # A nagios plugin that connects to a Sybase database and checks free space.
 #
-# Copyright 2004 Simon Bellwood, NetMan Network Management and IT Services GmbH
+# 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
+# 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-2004     Fixed lib path, improved timeouts.
-# 0.4  26-JAN-2004     Added loginTimeout.
-my $VERSION = "0.4";
-
+# 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;
@@ -30,8 +35,8 @@ my $DEFAULT_WARNING   = "25";
 my $DEFAULT_CRITICAL  = "10";
 my $DEFAULT_TIMEOUT   = "30";
 
-my ($user, $pass, $dbsvr, $dbname, $config, $checktype, $warn, $crit, $timeout,
-    $help, $version);
+my ($user, $pass, $dbsvr, $dbname, $config, $checktype, $explain,
+    $warn, $crit, $timeout, $help, $version);
 
 my $options_okay = GetOptions(
        "U|user=s"      => \$user,
@@ -40,6 +45,7 @@ my $options_okay = GetOptions(
        "D|dbname=s"    => \$dbname,
        "config=s"      => \$config,
        "checktype=s"   => \$checktype,
+       "explain"       => \$explain,
        "w|warning=i"   => \$warn,
        "c|critical=i"  => \$crit,
        "t|timeout=i"   => \$timeout,
@@ -127,6 +133,7 @@ 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;
 
@@ -148,6 +155,7 @@ sub check_space
                        }
                        else
                        {
+                               # Reserved, data, index, unused
                                foreach (@$d)
                                {
                                        s/\D//g;
@@ -157,10 +165,17 @@ sub check_space
                                $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'");
@@ -186,27 +201,38 @@ sub check_space
                }
        } while($sth->{syb_more_results});
 
+       &explain("log: ".$dbinfo->{log});
+       &explain("logfree: ".$dbinfo->{logfree});
+
        # Subtract the log size from the database size
-       $dbinfo->{size} -= $dbinfo->{log};
+       $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->{size} - $dbinfo->{reserved}) / $dbinfo->{size};
+       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%)");
+               &ncrit("Free space is $free%! (critical threshold is $crit%)".
+                       "|free_space=$free%");
        }
 
        if ($free < $warn)
        {
-               &nwarn("Free space is $free%! (warning threshold is $warn%)");
+               &nwarn("Free space is $free%! (warning threshold is $warn%)".
+                       "|free_space=$free%");
        }
 
 
-       &nok("Free space within thresholds ($free% free)");
+       &nok("Free space within thresholds ($free% free)".
+               "|free_space=$free%");
 }
 
 sub read_config
@@ -261,6 +287,7 @@ Mandatory arguments to long options are mandatory for short options too.
   -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)
@@ -290,6 +317,14 @@ _HELP_
 
 }
 
+sub explain
+{
+       return unless $explain;
+
+       my $msg = shift;
+       print "$msg\n";
+}
+
 
 
 # Some wrappers..