Code

check_mssql.pl
authorSubhendu Ghosh <sghosh@users.sourceforge.net>
Mon, 19 Apr 2004 13:10:48 +0000 (13:10 +0000)
committerSubhendu Ghosh <sghosh@users.sourceforge.net>
Mon, 19 Apr 2004 13:10:48 +0000 (13:10 +0000)
git-svn-id: https://nagiosplug.svn.sourceforge.net/svnroot/nagiosplug/nagiosplug/trunk@869 f882894a-f735-0410-b71e-b25c423dba1c

AUTHORS
plugins-scripts/check_mssql.pl [new file with mode: 0755]

diff --git a/AUTHORS b/AUTHORS
index e3dd8fd594926df03f05df1077ecfc5fbec5ffa8..3d5f9b7928e2fb0548c2d60abee66a2e67229d4a 100644 (file)
--- a/AUTHORS
+++ b/AUTHORS
@@ -110,3 +110,5 @@ Jon Hallett
 Flo Gleixner
 Howard Wilkinson
 Torsten Werner
+Roy Sigurd Karlsbakk
+
diff --git a/plugins-scripts/check_mssql.pl b/plugins-scripts/check_mssql.pl
new file mode 100755 (executable)
index 0000000..fa15476
--- /dev/null
@@ -0,0 +1,141 @@
+#!/usr/bin/perl -w
+
+#
+# Copyright 2003 Roy Sigurd Karlsbakk
+#
+# Requires freetds and DBD::Sybase 
+# http://www.freetds.org 
+# http://www.mbay.net/~mpeppler/
+#
+# 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; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+#
+# Report bugs to: nagiosplug-help@lists.sourceforge.net
+# 
+# $Id$
+#
+
+
+use DBI;
+use DBD::Sybase;
+use Getopt::Long;
+use lib ".";
+use utils qw($TIMEOUT %ERRORS &print_revision &support);
+use strict;
+
+my $PROGNAME = "check_mssql";
+
+my (
+       $server,$database,$username,$password,$query,$help,$verbose,$timeout,
+       $dbh,$sth,$row,
+       $s,$opt_V,$regex
+);
+my $exitcode = $ERRORS{'OK'};
+
+process_arguments();
+
+# Just in case of problems, let's not hang Nagios
+$SIG{'ALRM'} = sub {
+     print ("SQL UNKNOWN: ERROR connection $server (alarm timeout)\n");
+     exit $ERRORS{"UNKNOWN"};
+};
+alarm($TIMEOUT);
+
+unless ($dbh = DBI->connect("dbi:Sybase:server=".uc($server), "$username", "$password")) {
+       printf "SQL CRITICAL: Can't connect to mssql server $DBI::errstr\n";
+       exit($ERRORS{'CRITICAL'});
+}
+
+if (defined $database) {  # otherwise use default database
+       unless ($dbh->do("use $database")) {
+               printf ("SQL CRITICAL: Can't 'use $database': $dbh->errstr");
+               exit($ERRORS{'CRITICAL'});
+       }
+}
+$sth = $dbh->prepare($query);
+unless ($sth->execute()) {
+       printf("SQL CRITICAL: Error in query: $dbh->errstr\n");
+       exit($ERRORS{'CRITICAL'});
+}
+
+$row = join(";",$sth->fetchrow_array);
+
+$sth->finish;
+$dbh->disconnect;
+
+alarm(0);
+if (defined $regex) {
+       if ($row =~ /$regex/) {
+               printf "SQL CRITICAL: - $row|$row\n";
+               exit $ERRORS{'CRITICAL'};
+       }else{
+               print "SQL OK: $row|$row\n";
+               exit $ERRORS{'OK'};
+       }
+}
+
+print "SQL OK: $row|$row\n";
+exit $ERRORS{'OK'};
+
+##################################################
+
+sub syntax {
+       $s = shift or $s = 'Unknown';
+       printf("Error: ($s)\n") unless ($help);
+       printf("Runs a query against a MS-SQL server or Sybase server and returns the first row\n");
+       printf("Returns an error if no responses are running. Row is passed to perfdata in\n");
+       printf("semicolon delimited format\n");
+       printf("A simple sql statement like \"select getdate()\" verifies server responsiveness\n\n");
+       printf("Syntax: %s -s <server> -d <database> -u <username> -p <password> -q <query>     [-v]\n", $PROGNAME);
+       printf("  --database -d         Database name\n");
+       printf("  --Hostname -H         Server name\n");
+       printf("  --username -u         Username\n");
+       printf("  --password -p         Password\n");
+       printf("  --query -q            SQL query to run\n");
+       printf("  --timeout -t          Plugin timeout (default:$TIMEOUT)\n");
+       printf("  --regex -r            regex against SQL response(CRIT if MATCH)\n");
+       printf("  --verbose -v          verbose\n");
+       printf("\nThe SQL response is concatenated into a string with a \";\" demarkation\n\n");
+       exit($ERRORS{'UNKNOWN'});
+}
+
+sub process_arguments {
+       Getopt::Long::Configure('bundling');
+       my $status = GetOptions
+               ("p=s" => \$password, "password=s" => \$password,
+                "u=s" => \$username, "username=s" => \$username,
+                "H=s" => \$server, "Hostname=s"    => \$server,
+                "d=s" => \$database, "database=s" => \$database,
+                "q=s" => \$query, "query=s" => \$query,
+                "t=i" => \$timeout, "timeout=i" => \$timeout,
+                "r=s" => \$regex, "regex=s" => \$regex,
+                "h" => \$help, "help" => \$help,
+                "v" => \$verbose, "verbose" => \$verbose,
+                "V" => \$opt_V, "version" => \$opt_V);
+
+       if (defined $opt_V) {
+               print_revision($PROGNAME,'$Revision$');
+               exit $ERRORS{'OK'};
+       }
+
+       syntax("Help:") if ($help);
+       syntax("Missing username") unless (defined($username));
+       syntax("Missing password") unless (defined($password));
+       syntax("Missing server") unless (defined($server));
+       syntax("Missing query string") unless (defined($query));
+       $timeout = $TIMEOUT unless (defined($timeout));
+       
+       return;
+
+}