diff options
Diffstat (limited to 'plugins/check_pgsql.c')
-rw-r--r-- | plugins/check_pgsql.c | 166 |
1 files changed, 90 insertions, 76 deletions
diff --git a/plugins/check_pgsql.c b/plugins/check_pgsql.c index e1484566..dea39cf9 100644 --- a/plugins/check_pgsql.c +++ b/plugins/check_pgsql.c | |||
@@ -30,45 +30,9 @@ const char *progname = "check_pgsql"; | |||
30 | #define EMAIL "kdebisschop@users.sourceforge.net" | 30 | #define EMAIL "kdebisschop@users.sourceforge.net" |
31 | #define SUMMARY "Tests to see if a PostgreSQL DBMS is accepting connections.\n" | 31 | #define SUMMARY "Tests to see if a PostgreSQL DBMS is accepting connections.\n" |
32 | 32 | ||
33 | #define OPTIONS "[-c critical_time] [-w warning_time] [-t timeout] [-H host]\n\ | ||
34 | [-P port] [-d database] [-l logname] [-p password]" | ||
35 | |||
36 | #define LONGOPTIONS "\ | ||
37 | -c, --critical=INTEGER\n\ | ||
38 | Exit STATE_CRITICAL if connection time exceeds threshold (default: %d)\n\ | ||
39 | -w, --warning=INTEGER\n\ | ||
40 | Exit STATE_WARNING if connection time exceeds threshold (default: %d)\n\ | ||
41 | -t, --timeout=INTEGER\n\ | ||
42 | Terminate test if timeout limit is exceeded (default: %d)\n\ | ||
43 | -H, --hostname=STRING\n\ | ||
44 | Name or numeric IP address of machine running backend\n\ | ||
45 | -P, --port=INTEGER\n\ | ||
46 | Port running backend (default: %d)\n\ | ||
47 | -d, --database=STRING\n\ | ||
48 | Database to check (default: %s)\n\ | ||
49 | -l, --logname = STRING\n\ | ||
50 | Login name of user\n\ | ||
51 | -p, --password = STRING\n\ | ||
52 | Password (BIG SECURITY ISSUE)\n" | ||
53 | |||
54 | #define DESCRIPTION "All parameters are optional.\n\ | ||
55 | \n\ | ||
56 | This plugin tests a PostgreSQL DBMS to determine whether it is active and\n\ | ||
57 | accepting queries. In its current operation, it simply connects to the\n\ | ||
58 | specified database, and then disconnects. If no database is specified, it\n\ | ||
59 | connects to the template1 database, which is present in every functioning \n\ | ||
60 | PostgreSQL DBMS.\n\ | ||
61 | \n\ | ||
62 | The plugin will connect to a local postmaster if no host is specified. To\n\ | ||
63 | connect to a remote host, be sure that the remote postmaster accepts TCP/IP\n\ | ||
64 | connections (start the postmaster with the -i option).\n\ | ||
65 | \n\ | ||
66 | Typically, the nagios user (unless the --logname option is used) should be\n\ | ||
67 | able to connect to the database without a password. The plugin can also send\n\ | ||
68 | a password, but no effort is made to obsure or encrypt the password.\n" | ||
69 | |||
70 | #define DEFAULT_DB "template1" | 33 | #define DEFAULT_DB "template1" |
71 | #define DEFAULT_HOST "127.0.0.1" | 34 | #define DEFAULT_HOST "127.0.0.1" |
35 | |||
72 | enum { | 36 | enum { |
73 | DEFAULT_PORT = 5432, | 37 | DEFAULT_PORT = 5432, |
74 | DEFAULT_WARN = 2, | 38 | DEFAULT_WARN = 2, |
@@ -156,6 +120,82 @@ Please note that all tags must be lowercase to use the DocBook XML DTD. | |||
156 | <title>Functions</title> | 120 | <title>Functions</title> |
157 | -@@ | 121 | -@@ |
158 | ******************************************************************************/ | 122 | ******************************************************************************/ |
123 | |||
124 | |||
125 | |||
126 | |||
127 | void | ||
128 | print_help (void) | ||
129 | { | ||
130 | print_revision (progname, REVISION); | ||
131 | printf | ||
132 | ("Copyright (c) %s %s <%s>\n\n%s\n", | ||
133 | COPYRIGHT, AUTHOR, EMAIL, SUMMARY); | ||
134 | print_usage (); | ||
135 | printf (_("\ | ||
136 | \nOptions:\n\ | ||
137 | -H, --hostname=ADDRESS\n\ | ||
138 | Host name argument for servers using host headers (use numeric\n\ | ||
139 | address if possible to bypass DNS lookup).\n\ | ||
140 | -P, --port=INTEGER\n\ | ||
141 | Port number (default: %d)\n\ | ||
142 | -4, --use-ipv4\n\ | ||
143 | Use IPv4 connection\n\ | ||
144 | -6, --use-ipv6\n\ | ||
145 | Use IPv6 connection\n"), DEFAULT_PORT); | ||
146 | printf (S_("\ | ||
147 | -d, --database=STRING\n\ | ||
148 | Database to check (default: %s)\n\ | ||
149 | -l, --logname = STRING\n\ | ||
150 | Login name of user\n\ | ||
151 | -p, --password = STRING\n\ | ||
152 | Password (BIG SECURITY ISSUE)\n\n"), DEFAULT_DB); | ||
153 | printf (S_("\nOptions:\n\ | ||
154 | -c, --critical=INTEGER\n\ | ||
155 | Exit STATE_CRITICAL if connection time exceeds threshold (default: %d)\n\ | ||
156 | -w, --warning=INTEGER\n\ | ||
157 | Exit STATE_WARNING if connection time exceeds threshold (default: %d)\n\ | ||
158 | -t, --timeout=INTEGER\n\ | ||
159 | Terminate test if timeout limit is exceeded (default: %d)\n"), | ||
160 | DEFAULT_WARN, DEFAULT_CRIT, DEFAULT_TIMEOUT); | ||
161 | printf (_("\ | ||
162 | -v, --verbose\n\ | ||
163 | Show details for command-line debugging (Nagios may truncate output)\n\ | ||
164 | -h, --help\n\ | ||
165 | Print detailed help screen\n\ | ||
166 | -V, --version\n\ | ||
167 | Print version information\n\n")); | ||
168 | printf (S_("All parameters are optional.\n\ | ||
169 | \n\ | ||
170 | This plugin tests a PostgreSQL DBMS to determine whether it is active and\n\ | ||
171 | accepting queries. In its current operation, it simply connects to the\n\ | ||
172 | specified database, and then disconnects. If no database is specified, it\n\ | ||
173 | connects to the template1 database, which is present in every functioning \n\ | ||
174 | PostgreSQL DBMS.\n")); | ||
175 | printf (S_("\n\ | ||
176 | The plugin will connect to a local postmaster if no host is specified. To\n\ | ||
177 | connect to a remote host, be sure that the remote postmaster accepts TCP/IP\n\ | ||
178 | connections (start the postmaster with the -i option).\n")); | ||
179 | printf (S_("\n\ | ||
180 | Typically, the nagios user (unless the --logname option is used) should be\n\ | ||
181 | able to connect to the database without a password. The plugin can also send\n\ | ||
182 | a password, but no effort is made to obsure or encrypt the password.\n")); | ||
183 | |||
184 | support (); | ||
185 | } | ||
186 | |||
187 | void | ||
188 | print_usage (void) | ||
189 | { | ||
190 | printf (S_("\ | ||
191 | Usage:\n %s [-H <host>] [-P <port>] [-c <critical time>] [-w <warning time>]\n\ | ||
192 | [-t <timeout>]"), progname); | ||
193 | printf (S_("[-d <database>] [-l <logname>] [-p <password>]\n")); | ||
194 | printf (S_("\ | ||
195 | %s (-h | --help) for detailed help\n\ | ||
196 | %s (-V | --version) for version information\n"), | ||
197 | progname, progname); | ||
198 | } | ||
159 | 199 | ||
160 | int | 200 | int |
161 | main (int argc, char **argv) | 201 | main (int argc, char **argv) |
@@ -175,7 +215,7 @@ main (int argc, char **argv) | |||
175 | 215 | ||
176 | /* Set signal handling and alarm */ | 216 | /* Set signal handling and alarm */ |
177 | if (signal (SIGALRM, timeout_alarm_handler) == SIG_ERR) { | 217 | if (signal (SIGALRM, timeout_alarm_handler) == SIG_ERR) { |
178 | printf ("Cannot catch SIGALRM"); | 218 | printf (_("Cannot catch SIGALRM")); |
179 | return STATE_UNKNOWN; | 219 | return STATE_UNKNOWN; |
180 | } | 220 | } |
181 | alarm (timeout_interval); | 221 | alarm (timeout_interval); |
@@ -189,57 +229,31 @@ main (int argc, char **argv) | |||
189 | 229 | ||
190 | /* check to see that the backend connection was successfully made */ | 230 | /* check to see that the backend connection was successfully made */ |
191 | if (PQstatus (conn) == CONNECTION_BAD) { | 231 | if (PQstatus (conn) == CONNECTION_BAD) { |
192 | printf ("PGSQL: CRITICAL - no connection to '%s' (%s).\n", dbName, | 232 | printf (_("PGSQL: CRITICAL - no connection to '%s' (%s).\n"), dbName, |
193 | PQerrorMessage (conn)); | 233 | PQerrorMessage (conn)); |
194 | PQfinish (conn); | 234 | PQfinish (conn); |
195 | return STATE_CRITICAL; | 235 | return STATE_CRITICAL; |
196 | } | 236 | } |
197 | else if (elapsed_time > tcrit) { | 237 | else if (elapsed_time > tcrit) { |
198 | PQfinish (conn); | 238 | PQfinish (conn); |
199 | printf ("PGSQL: CRITICAL - database %s (%d sec.)\n", dbName, | 239 | printf (_("PGSQL: CRITICAL - database %s (%d sec.)\n"), dbName, |
200 | elapsed_time); | 240 | elapsed_time); |
201 | return STATE_CRITICAL; | 241 | return STATE_CRITICAL; |
202 | } | 242 | } |
203 | else if (elapsed_time > twarn) { | 243 | else if (elapsed_time > twarn) { |
204 | PQfinish (conn); | 244 | PQfinish (conn); |
205 | printf ("PGSQL: WARNING - database %s (%d sec.)\n", dbName, elapsed_time); | 245 | printf (_("PGSQL: WARNING - database %s (%d sec.)\n"), dbName, elapsed_time); |
206 | return STATE_WARNING; | 246 | return STATE_WARNING; |
207 | } | 247 | } |
208 | else { | 248 | else { |
209 | PQfinish (conn); | 249 | PQfinish (conn); |
210 | printf ("PGSQL: ok - database %s (%d sec.)\n", dbName, elapsed_time); | 250 | printf (_("PGSQL: ok - database %s (%d sec.)\n"), dbName, elapsed_time); |
211 | return STATE_OK; | 251 | return STATE_OK; |
212 | } | 252 | } |
213 | } | 253 | } |
214 | 254 | ||
215 | 255 | ||
216 | 256 | ||
217 | |||
218 | void | ||
219 | print_help (void) | ||
220 | { | ||
221 | print_revision (progname, REVISION); | ||
222 | printf | ||
223 | ("Copyright (c) %s %s <%s>\n\n%s\n", | ||
224 | COPYRIGHT, AUTHOR, EMAIL, SUMMARY); | ||
225 | print_usage (); | ||
226 | printf | ||
227 | ("\nOptions:\n" LONGOPTIONS "\n" DESCRIPTION "\n", | ||
228 | DEFAULT_WARN, DEFAULT_CRIT, DEFAULT_TIMEOUT, DEFAULT_PORT, DEFAULT_DB); | ||
229 | support (); | ||
230 | } | ||
231 | |||
232 | void | ||
233 | print_usage (void) | ||
234 | { | ||
235 | printf ("Usage:\n" " %s %s\n" | ||
236 | " %s (-h | --help) for detailed help\n" | ||
237 | " %s (-V | --version) for version information\n", | ||
238 | progname, OPTIONS, progname, progname); | ||
239 | } | ||
240 | |||
241 | |||
242 | |||
243 | /* process command-line arguments */ | 257 | /* process command-line arguments */ |
244 | int | 258 | int |
245 | process_arguments (int argc, char **argv) | 259 | process_arguments (int argc, char **argv) |
@@ -271,7 +285,7 @@ process_arguments (int argc, char **argv) | |||
271 | 285 | ||
272 | switch (c) { | 286 | switch (c) { |
273 | case '?': /* usage */ | 287 | case '?': /* usage */ |
274 | usage3 ("Unknown argument", optopt); | 288 | usage3 (_("Unknown argument"), optopt); |
275 | case 'h': /* help */ | 289 | case 'h': /* help */ |
276 | print_help (); | 290 | print_help (); |
277 | exit (STATE_OK); | 291 | exit (STATE_OK); |
@@ -280,38 +294,38 @@ process_arguments (int argc, char **argv) | |||
280 | exit (STATE_OK); | 294 | exit (STATE_OK); |
281 | case 't': /* timeout period */ | 295 | case 't': /* timeout period */ |
282 | if (!is_integer (optarg)) | 296 | if (!is_integer (optarg)) |
283 | usage2 ("Timeout Interval must be an integer", optarg); | 297 | usage2 (_("Timeout Interval must be an integer"), optarg); |
284 | timeout_interval = atoi (optarg); | 298 | timeout_interval = atoi (optarg); |
285 | break; | 299 | break; |
286 | case 'c': /* critical time threshold */ | 300 | case 'c': /* critical time threshold */ |
287 | if (!is_integer (optarg)) | 301 | if (!is_integer (optarg)) |
288 | usage2 ("Invalid critical threshold", optarg); | 302 | usage2 (_("Invalid critical threshold"), optarg); |
289 | tcrit = atoi (optarg); | 303 | tcrit = atoi (optarg); |
290 | break; | 304 | break; |
291 | case 'w': /* warning time threshold */ | 305 | case 'w': /* warning time threshold */ |
292 | if (!is_integer (optarg)) | 306 | if (!is_integer (optarg)) |
293 | usage2 ("Invalid critical threshold", optarg); | 307 | usage2 (_("Invalid critical threshold"), optarg); |
294 | twarn = atoi (optarg); | 308 | twarn = atoi (optarg); |
295 | break; | 309 | break; |
296 | case 'H': /* host */ | 310 | case 'H': /* host */ |
297 | if (!is_host (optarg)) | 311 | if (!is_host (optarg)) |
298 | usage2 ("You gave an invalid host name", optarg); | 312 | usage2 (_("You gave an invalid host name"), optarg); |
299 | pghost = optarg; | 313 | pghost = optarg; |
300 | break; | 314 | break; |
301 | case 'P': /* port */ | 315 | case 'P': /* port */ |
302 | if (!is_integer (optarg)) | 316 | if (!is_integer (optarg)) |
303 | usage2 ("Port must be an integer", optarg); | 317 | usage2 (_("Port must be an integer"), optarg); |
304 | pgport = optarg; | 318 | pgport = optarg; |
305 | break; | 319 | break; |
306 | case 'd': /* database name */ | 320 | case 'd': /* database name */ |
307 | if (!is_pg_dbname (optarg)) | 321 | if (!is_pg_dbname (optarg)) |
308 | usage2 ("Database name is not valid", optarg); | 322 | usage2 (_("Database name is not valid"), optarg); |
309 | strncpy (dbName, optarg, NAMEDATALEN - 1); | 323 | strncpy (dbName, optarg, NAMEDATALEN - 1); |
310 | dbName[NAMEDATALEN - 1] = 0; | 324 | dbName[NAMEDATALEN - 1] = 0; |
311 | break; | 325 | break; |
312 | case 'l': /* login name */ | 326 | case 'l': /* login name */ |
313 | if (!is_pg_logname (optarg)) | 327 | if (!is_pg_logname (optarg)) |
314 | usage2 ("user name is not valid", optarg); | 328 | usage2 (_("user name is not valid"), optarg); |
315 | pguser = optarg; | 329 | pguser = optarg; |
316 | break; | 330 | break; |
317 | case 'p': /* authentication password */ | 331 | case 'p': /* authentication password */ |