X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=plugins%2Fcheck_pgsql.c;h=1a93f6bf17e27898b17f370685149fdc6275a220;hb=44f8455b2cf248c6f50c35bfc3510d2946084c5b;hp=07abd9c06f2d7f4e777f7a7157a1d96a2c814e47;hpb=0c1c9f51e2c33db04918d2aa322fd1f9a688979b;p=nagiosplug.git diff --git a/plugins/check_pgsql.c b/plugins/check_pgsql.c index 07abd9c..1a93f6b 100644 --- a/plugins/check_pgsql.c +++ b/plugins/check_pgsql.c @@ -1,20 +1,47 @@ -/****************************************************************************** - - 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. +/***************************************************************************** +* +* Nagios check_pgsql plugin +* +* License: GPL +* Copyright (c) 1999-2007 Nagios Plugins Development Team +* +* Last Modified: $Date$ +* +* Description: +* +* This file contains the check_pgsql plugin +* +* Test whether a PostgreSQL Database is accepting connections. +* +* +* 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 3 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, see . +* +* $Id$ +* +*****************************************************************************/ - 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. +const char *progname = "check_pgsql"; +const char *revision = "$Revision$"; +const char *copyright = "1999-2007"; +const char *email = "nagiosplug-devel@lists.sourceforge.net"; - 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., 675 Mass Ave, Cambridge, MA 02139, USA. +#include "common.h" +#include "utils.h" - *****************************************************************************/ +#include "netutils.h" +#include +#include #define DEFAULT_DB "template1" #define DEFAULT_HOST "127.0.0.1" @@ -25,10 +52,7 @@ enum { DEFAULT_CRIT = 8 }; -#include "common.h" -#include "utils.h" -#include "netutils.h" -#include + int process_arguments (int, char **); int validate_arguments (void); @@ -51,11 +75,6 @@ double tcrit = (double)DEFAULT_CRIT; PGconn *conn; /*PGresult *res;*/ -const char *progname = "check_pgsql"; -const char *revision = "$Revision$"; -const char *copyright = "1999-2003"; -const char *email = "nagiosplug-devel@lists.sourceforge.net"; - /****************************************************************************** @@ -110,15 +129,14 @@ Please note that all tags must be lowercase to use the DocBook XML DTD. Functions -@@ ******************************************************************************/ - - int main (int argc, char **argv) { - int elapsed_time, status; + int elapsed_time; + int status = STATE_UNKNOWN; /* begin, by setting the parameters for a backend connection if the * parameters are null, then the system will try to use reasonable @@ -132,13 +150,15 @@ main (int argc, char **argv) bindtextdomain (PACKAGE, LOCALEDIR); textdomain (PACKAGE); + /* Parse extra opts if any */ + argv=np_extra_opts (&argc, argv, progname); + if (process_arguments (argc, argv) == ERROR) - usage ("Could not parse arguments"); + usage4 (_("Could not parse arguments")); /* Set signal handling and alarm */ if (signal (SIGALRM, timeout_alarm_handler) == SIG_ERR) { - printf (_("Cannot catch SIGALRM")); - return STATE_UNKNOWN; + usage4 (_("Cannot catch SIGALRM")); } alarm (timeout_interval); @@ -151,7 +171,7 @@ main (int argc, char **argv) /* check to see that the backend connection was successfully made */ if (PQstatus (conn) == CONNECTION_BAD) { - printf (_("PGSQL: CRITICAL - no connection to '%s' (%s).\n"), + printf (_("CRITICAL - no connection to '%s' (%s).\n"), dbName, PQerrorMessage (conn)); PQfinish (conn); return STATE_CRITICAL; @@ -166,13 +186,13 @@ main (int argc, char **argv) status = STATE_OK; } PQfinish (conn); - printf (_("PGSQL: %s - database %s (%d sec.)|%s\n"), + printf (_(" %s - database %s (%d sec.)|%s\n"), state_text(status), dbName, elapsed_time, fperfdata("time", elapsed_time, "s", (int)twarn, twarn, (int)tcrit, tcrit, TRUE, 0, FALSE,0)); return status; } - + /* process command-line arguments */ @@ -206,8 +226,7 @@ process_arguments (int argc, char **argv) switch (c) { case '?': /* usage */ - usage3 (_("Unknown argument"), optopt); - break; + usage5 (); case 'h': /* help */ print_help (); exit (STATE_OK); @@ -222,25 +241,25 @@ process_arguments (int argc, char **argv) break; case 'c': /* critical time threshold */ if (!is_nonnegative (optarg)) - usage2 (_("Invalid critical threshold"), optarg); + usage2 (_("Critical threshold must be a positive integer"), optarg); else tcrit = strtod (optarg, NULL); break; case 'w': /* warning time threshold */ if (!is_nonnegative (optarg)) - usage2 (_("Invalid critical threshold"), optarg); + usage2 (_("Warning threshold must be a positive integer"), optarg); else twarn = strtod (optarg, NULL); break; case 'H': /* host */ if (!is_host (optarg)) - usage2 (_("Invalid host name"), optarg); + usage2 (_("Invalid hostname/address"), optarg); else pghost = optarg; break; case 'P': /* port */ if (!is_integer (optarg)) - usage2 (_("Port must be an integer"), optarg); + usage2 (_("Port must be a positive integer"), optarg); else pgport = optarg; break; @@ -252,7 +271,7 @@ process_arguments (int argc, char **argv) break; case 'l': /* login name */ if (!is_pg_logname (optarg)) - usage2 (_("user name is not valid"), optarg); + usage2 (_("User name is not valid"), optarg); else pguser = optarg; break; @@ -287,12 +306,13 @@ first character cannot be a number, however. -@@ ******************************************************************************/ + + int validate_arguments () { return OK; } - /****************************************************************************** @@ -315,6 +335,8 @@ first character cannot be a number, however. -@@ ******************************************************************************/ + + int is_pg_dbname (char *dbname) { @@ -324,9 +346,9 @@ is_pg_dbname (char *dbname) return (FALSE); strncpy (txt, dbname, NAMEDATALEN - 1); txt[NAMEDATALEN - 1] = 0; - if (sscanf (txt, "%[_a-zA-Z]%[^_a-zA-Z0-9]", tmp, tmp) == 1) + if (sscanf (txt, "%[_a-zA-Z]%[^_a-zA-Z0-9-]", tmp, tmp) == 1) return (TRUE); - if (sscanf (txt, "%[_a-zA-Z]%[_a-zA-Z0-9]%[^_a-zA-Z0-9]", tmp, tmp, tmp) == + if (sscanf (txt, "%[_a-zA-Z]%[_a-zA-Z0-9-]%[^_a-zA-Z0-9-]", tmp, tmp, tmp) == 2) return (TRUE); return (FALSE); } @@ -355,6 +377,8 @@ should be added. -@@ ******************************************************************************/ + + int is_pg_logname (char *username) { @@ -370,8 +394,6 @@ is_pg_logname (char *username) -@@ ******************************************************************************/ - - @@ -384,25 +406,28 @@ print_help (void) print_revision (progname, revision); - printf (_(COPYRIGHT), copyright, email); + printf (COPYRIGHT, copyright, email); - printf (_("Test whether a PostgreSQL DBMS is accepting connections.\n\n")); + printf (_("Test whether a PostgreSQL Database is accepting connections.")); + + printf ("\n\n"); print_usage (); printf (_(UT_HELP_VRSN)); + printf (_(UT_EXTRA_OPTS)); printf (_(UT_HOST_PORT), 'P', myport); printf (_(UT_IPv46)); - printf (S_("\ - -d, --database=STRING\n\ - Database to check (default: %s)\n\ - -l, --logname = STRING\n\ - Login name of user\n\ - -p, --password = STRING\n\ - Password (BIG SECURITY ISSUE)\n"), DEFAULT_DB); + printf (" %s\n", "-d, --database=STRING"); + printf (" %s", _("Database to check ")); + printf (_("(default: %s)"), DEFAULT_DB); + printf (" %s\n", "-l, --logname = STRING"); + printf (" %s\n", _("Login name of user")); + printf (" %s\n", "-p, --password = STRING"); + printf (" %s\n", _("Password (BIG SECURITY ISSUE)")); printf (_(UT_WARN_CRIT)); @@ -410,38 +435,37 @@ print_help (void) printf (_(UT_VERBOSE)); - printf (S_("\nAll parameters are optional.\n\ -\n\ -This plugin tests a PostgreSQL DBMS to determine whether it is active and\n\ -accepting queries. In its current operation, it simply connects to the\n\ -specified database, and then disconnects. If no database is specified, it\n\ -connects to the template1 database, which is present in every functioning \n\ -PostgreSQL DBMS.\n")); - printf (S_("\n\ -The plugin will connect to a local postmaster if no host is specified. To\n\ -connect to a remote host, be sure that the remote postmaster accepts TCP/IP\n\ -connections (start the postmaster with the -i option).\n")); - printf (S_("\n\ -Typically, the nagios user (unless the --logname option is used) should be\n\ -able to connect to the database without a password. The plugin can also send\n\ -a password, but no effort is made to obsure or encrypt the password.\n")); + printf ("\n"); + printf (" %s\n", _("All parameters are optional.")); + printf (" %s\n", _("This plugin tests a PostgreSQL DBMS to determine whether it is active and")); + printf (" %s\n", _("accepting queries. In its current operation, it simply connects to the")); + printf (" %s\n", _("specified database, and then disconnects. If no database is specified, it")); + printf (" %s\n", _("connects to the template1 database, which is present in every functioning")); + printf (" %s\n\n", _("PostgreSQL DBMS.")); + + printf (" %s\n", _("The plugin will connect to a local postmaster if no host is specified. To")); + printf (" %s\n", _("connect to a remote host, be sure that the remote postmaster accepts TCP/IP")); + printf (" %s\n\n", _("connections (start the postmaster with the -i option).")); + + printf (" %s\n", _("Typically, the nagios user (unless the --logname option is used) should be")); + printf (" %s\n", _("able to connect to the database without a password. The plugin can also send")); + printf (" %s\n", _("a password, but no effort is made to obsure or encrypt the password.")); + +#ifdef NP_EXTRA_OPTS + printf ("\n"); + printf ("%s\n", _("Notes:")); + printf (_(UT_EXTRA_OPTS_NOTES)); +#endif printf (_(UT_SUPPORT)); } - void print_usage (void) { - printf (S_("\ -Usage:\n %s [-H ] [-P ] [-c ] [-w ]\n\ - [-t ]"), progname); - printf (S_("[-d ] [-l ] [-p ]\n")); - printf (S_("\ - %s (-h | --help) for detailed help\n\ - %s (-V | --version) for version information\n"), - progname, progname); + printf (_("Usage:")); + printf ("%s [-H ] [-P ] [-c ] [-w ]\n", progname); + printf (" [-t ] [-d ] [-l ] [-p ]\n"); } -