diff options
author | Lorenz Kästle <12514511+RincewindsHat@users.noreply.github.com> | 2025-09-15 13:18:17 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2025-09-15 13:18:17 +0200 |
commit | 8ef825d85fb4d09c32ca44c545d6eb8d995ddea4 (patch) | |
tree | 5ab7b18797dfd5849dec7827c87ca3bb5fcb0993 /plugins/check_pgsql.c | |
parent | a3cf9041af810770daf5d9b83f1906fa9bb0dd11 (diff) | |
parent | 204cf956f0b3db90d079321ee957b3860da7e33f (diff) | |
download | monitoring-plugins-8ef825d85fb4d09c32ca44c545d6eb8d995ddea4.tar.gz |
Merge pull request #2149 from RincewindsHat/clang-format
Clang format
Diffstat (limited to 'plugins/check_pgsql.c')
-rw-r--r-- | plugins/check_pgsql.c | 77 |
1 files changed, 48 insertions, 29 deletions
diff --git a/plugins/check_pgsql.c b/plugins/check_pgsql.c index 84305adb..793a686f 100644 --- a/plugins/check_pgsql.c +++ b/plugins/check_pgsql.c | |||
@@ -46,14 +46,15 @@ const char *email = "devel@monitoring-plugins.org"; | |||
46 | #define DEFAULT_HOST "127.0.0.1" | 46 | #define DEFAULT_HOST "127.0.0.1" |
47 | 47 | ||
48 | /* return the PSQL server version as a 3-tuple */ | 48 | /* return the PSQL server version as a 3-tuple */ |
49 | #define PSQL_SERVER_VERSION3(server_version) \ | 49 | #define PSQL_SERVER_VERSION3(server_version) \ |
50 | (server_version) / 10000, (server_version) / 100 - (int)((server_version) / 10000) * 100, \ | 50 | (server_version) / 10000, (server_version) / 100 - (int)((server_version) / 10000) * 100, \ |
51 | (server_version) - (int)((server_version) / 100) * 100 | 51 | (server_version) - (int)((server_version) / 100) * 100 |
52 | /* return true if the given host is a UNIX domain socket */ | 52 | /* return true if the given host is a UNIX domain socket */ |
53 | #define PSQL_IS_UNIX_DOMAIN_SOCKET(host) ((NULL == (host)) || ('\0' == *(host)) || ('/' == *(host))) | 53 | #define PSQL_IS_UNIX_DOMAIN_SOCKET(host) ((NULL == (host)) || ('\0' == *(host)) || ('/' == *(host))) |
54 | /* return a 3-tuple identifying a host/port independent of the socket type */ | 54 | /* return a 3-tuple identifying a host/port independent of the socket type */ |
55 | #define PSQL_SOCKET3(host, port) \ | 55 | #define PSQL_SOCKET3(host, port) \ |
56 | ((NULL == (host)) || ('\0' == *(host))) ? DEFAULT_PGSOCKET_DIR : host, PSQL_IS_UNIX_DOMAIN_SOCKET(host) ? "/.s.PGSQL." : ":", port | 56 | ((NULL == (host)) || ('\0' == *(host))) ? DEFAULT_PGSOCKET_DIR : host, \ |
57 | PSQL_IS_UNIX_DOMAIN_SOCKET(host) ? "/.s.PGSQL." : ":", port | ||
57 | 58 | ||
58 | typedef struct { | 59 | typedef struct { |
59 | int errorcode; | 60 | int errorcode; |
@@ -63,8 +64,9 @@ static check_pgsql_config_wrapper process_arguments(int /*argc*/, char ** /*argv | |||
63 | 64 | ||
64 | static void print_help(void); | 65 | static void print_help(void); |
65 | static bool is_pg_logname(char * /*username*/); | 66 | static bool is_pg_logname(char * /*username*/); |
66 | static mp_state_enum do_query(PGconn * /*conn*/, char * /*query*/, const char /*pgqueryname*/[], thresholds * /*qthresholds*/, | 67 | static mp_state_enum do_query(PGconn * /*conn*/, char * /*query*/, const char /*pgqueryname*/[], |
67 | char * /*query_warning*/, char * /*query_critical*/); | 68 | thresholds * /*qthresholds*/, char * /*query_warning*/, |
69 | char * /*query_critical*/); | ||
68 | void print_usage(void); | 70 | void print_usage(void); |
69 | 71 | ||
70 | static int verbose = 0; | 72 | static int verbose = 0; |
@@ -167,7 +169,8 @@ int main(int argc, char **argv) { | |||
167 | } | 169 | } |
168 | 170 | ||
169 | if (verbose) { /* do not include password (see right below) in output */ | 171 | if (verbose) { /* do not include password (see right below) in output */ |
170 | printf("Connecting to PostgreSQL using conninfo: %s%s\n", conninfo, config.pgpasswd ? " password = <hidden>" : ""); | 172 | printf("Connecting to PostgreSQL using conninfo: %s%s\n", conninfo, |
173 | config.pgpasswd ? " password = <hidden>" : ""); | ||
171 | } | 174 | } |
172 | 175 | ||
173 | if (config.pgpasswd) { | 176 | if (config.pgpasswd) { |
@@ -185,8 +188,8 @@ int main(int argc, char **argv) { | |||
185 | --end_timeval.tv_sec; | 188 | --end_timeval.tv_sec; |
186 | end_timeval.tv_usec += 1000000; | 189 | end_timeval.tv_usec += 1000000; |
187 | } | 190 | } |
188 | double elapsed_time = | 191 | double elapsed_time = (double)(end_timeval.tv_sec - start_timeval.tv_sec) + |
189 | (double)(end_timeval.tv_sec - start_timeval.tv_sec) + ((double)(end_timeval.tv_usec - start_timeval.tv_usec) / 1000000.0); | 192 | ((double)(end_timeval.tv_usec - start_timeval.tv_usec) / 1000000.0); |
190 | 193 | ||
191 | if (verbose) { | 194 | if (verbose) { |
192 | printf("Time elapsed: %f\n", elapsed_time); | 195 | printf("Time elapsed: %f\n", elapsed_time); |
@@ -218,16 +221,18 @@ int main(int argc, char **argv) { | |||
218 | printf("Successfully connected to database %s (user %s) " | 221 | printf("Successfully connected to database %s (user %s) " |
219 | "at server %s%s%s (server version: %d.%d.%d, " | 222 | "at server %s%s%s (server version: %d.%d.%d, " |
220 | "protocol version: %d, pid: %d)\n", | 223 | "protocol version: %d, pid: %d)\n", |
221 | PQdb(conn), PQuser(conn), PSQL_SOCKET3(server_host, PQport(conn)), PSQL_SERVER_VERSION3(server_version), | 224 | PQdb(conn), PQuser(conn), PSQL_SOCKET3(server_host, PQport(conn)), |
222 | PQprotocolVersion(conn), PQbackendPID(conn)); | 225 | PSQL_SERVER_VERSION3(server_version), PQprotocolVersion(conn), PQbackendPID(conn)); |
223 | } | 226 | } |
224 | 227 | ||
225 | printf(_(" %s - database %s (%f sec.)|%s\n"), state_text(status), config.dbName, elapsed_time, | 228 | printf(_(" %s - database %s (%f sec.)|%s\n"), state_text(status), config.dbName, elapsed_time, |
226 | fperfdata("time", elapsed_time, "s", (config.twarn > 0.0), config.twarn, (config.tcrit > 0.0), config.tcrit, true, 0, false, 0)); | 229 | fperfdata("time", elapsed_time, "s", (config.twarn > 0.0), config.twarn, |
230 | (config.tcrit > 0.0), config.tcrit, true, 0, false, 0)); | ||
227 | 231 | ||
228 | mp_state_enum query_status = STATE_UNKNOWN; | 232 | mp_state_enum query_status = STATE_UNKNOWN; |
229 | if (config.pgquery) { | 233 | if (config.pgquery) { |
230 | query_status = do_query(conn, config.pgquery, config.pgqueryname, config.qthresholds, config.query_warning, config.query_critical); | 234 | query_status = do_query(conn, config.pgquery, config.pgqueryname, config.qthresholds, |
235 | config.query_warning, config.query_critical); | ||
231 | } | 236 | } |
232 | 237 | ||
233 | if (verbose) { | 238 | if (verbose) { |
@@ -265,7 +270,8 @@ check_pgsql_config_wrapper process_arguments(int argc, char **argv) { | |||
265 | 270 | ||
266 | while (true) { | 271 | while (true) { |
267 | int option = 0; | 272 | int option = 0; |
268 | int option_char = getopt_long(argc, argv, "hVt:c:w:H:P:d:l:p:a:o:q:C:W:v", longopts, &option); | 273 | int option_char = |
274 | getopt_long(argc, argv, "hVt:c:w:H:P:d:l:p:a:o:q:C:W:v", longopts, &option); | ||
269 | 275 | ||
270 | if (option_char == EOF) { | 276 | if (option_char == EOF) { |
271 | break; | 277 | break; |
@@ -357,7 +363,8 @@ check_pgsql_config_wrapper process_arguments(int argc, char **argv) { | |||
357 | } | 363 | } |
358 | } | 364 | } |
359 | 365 | ||
360 | set_thresholds(&result.config.qthresholds, result.config.query_warning, result.config.query_critical); | 366 | set_thresholds(&result.config.qthresholds, result.config.query_warning, |
367 | result.config.query_critical); | ||
361 | 368 | ||
362 | return result; | 369 | return result; |
363 | } | 370 | } |
@@ -457,29 +464,39 @@ void print_help(void) { | |||
457 | 464 | ||
458 | printf(" %s\n", _("If a query is specified using the -q option, it will be executed after")); | 465 | printf(" %s\n", _("If a query is specified using the -q option, it will be executed after")); |
459 | printf(" %s\n", _("connecting to the server. The result from the query has to be numeric.")); | 466 | printf(" %s\n", _("connecting to the server. The result from the query has to be numeric.")); |
460 | printf(" %s\n", _("Multiple SQL commands, separated by semicolon, are allowed but the result ")); | 467 | printf(" %s\n", |
468 | _("Multiple SQL commands, separated by semicolon, are allowed but the result ")); | ||
461 | printf(" %s\n", _("of the last command is taken into account only. The value of the first")); | 469 | printf(" %s\n", _("of the last command is taken into account only. The value of the first")); |
462 | printf(" %s\n", _("column in the first row is used as the check result. If a second column is")); | 470 | printf(" %s\n", |
471 | _("column in the first row is used as the check result. If a second column is")); | ||
463 | printf(" %s\n", _("present in the result set, this is added to the plugin output with a")); | 472 | printf(" %s\n", _("present in the result set, this is added to the plugin output with a")); |
464 | printf(" %s\n", _("prefix of \"Extra Info:\". This information can be displayed in the system")); | 473 | printf(" %s\n", |
474 | _("prefix of \"Extra Info:\". This information can be displayed in the system")); | ||
465 | printf(" %s\n\n", _("executing the plugin.")); | 475 | printf(" %s\n\n", _("executing the plugin.")); |
466 | 476 | ||
467 | printf(" %s\n", _("See the chapter \"Monitoring Database Activity\" of the PostgreSQL manual")); | 477 | printf(" %s\n", _("See the chapter \"Monitoring Database Activity\" of the PostgreSQL manual")); |
468 | printf(" %s\n\n", _("for details about how to access internal statistics of the database server.")); | 478 | printf(" %s\n\n", |
479 | _("for details about how to access internal statistics of the database server.")); | ||
469 | 480 | ||
470 | printf(" %s\n", _("For a list of available connection parameters which may be used with the -o")); | 481 | printf(" %s\n", |
471 | printf(" %s\n", _("command line option, see the documentation for PQconnectdb() in the chapter")); | 482 | _("For a list of available connection parameters which may be used with the -o")); |
483 | printf(" %s\n", | ||
484 | _("command line option, see the documentation for PQconnectdb() in the chapter")); | ||
472 | printf(" %s\n", _("\"libpq - C Library\" of the PostgreSQL manual. For example, this may be")); | 485 | printf(" %s\n", _("\"libpq - C Library\" of the PostgreSQL manual. For example, this may be")); |
473 | printf(" %s\n", _("used to specify a service name in pg_service.conf to be used for additional")); | 486 | printf(" %s\n", |
487 | _("used to specify a service name in pg_service.conf to be used for additional")); | ||
474 | printf(" %s\n", _("connection parameters: -o 'service=<name>' or to specify the SSL mode:")); | 488 | printf(" %s\n", _("connection parameters: -o 'service=<name>' or to specify the SSL mode:")); |
475 | printf(" %s\n\n", _("-o 'sslmode=require'.")); | 489 | printf(" %s\n\n", _("-o 'sslmode=require'.")); |
476 | 490 | ||
477 | printf(" %s\n", _("The plugin will connect to a local postmaster if no host is specified. To")); | 491 | printf(" %s\n", _("The plugin will connect to a local postmaster if no host is specified. To")); |
478 | printf(" %s\n", _("connect to a remote host, be sure that the remote postmaster accepts TCP/IP")); | 492 | printf(" %s\n", |
493 | _("connect to a remote host, be sure that the remote postmaster accepts TCP/IP")); | ||
479 | printf(" %s\n\n", _("connections (start the postmaster with the -i option).")); | 494 | printf(" %s\n\n", _("connections (start the postmaster with the -i option).")); |
480 | 495 | ||
481 | printf(" %s\n", _("Typically, the monitoring user (unless the --logname option is used) should be")); | 496 | printf(" %s\n", |
482 | printf(" %s\n", _("able to connect to the database without a password. The plugin can also send")); | 497 | _("Typically, the monitoring user (unless the --logname option is used) should be")); |
498 | printf(" %s\n", | ||
499 | _("able to connect to the database without a password. The plugin can also send")); | ||
483 | printf(" %s\n", _("a password, but no effort is made to obscure or encrypt the password.")); | 500 | printf(" %s\n", _("a password, but no effort is made to obscure or encrypt the password.")); |
484 | 501 | ||
485 | printf(UT_SUPPORT); | 502 | printf(UT_SUPPORT); |
@@ -492,15 +509,16 @@ void print_usage(void) { | |||
492 | "[-q <query>] [-C <critical query range>] [-W <warning query range>]\n"); | 509 | "[-q <query>] [-C <critical query range>] [-W <warning query range>]\n"); |
493 | } | 510 | } |
494 | 511 | ||
495 | mp_state_enum do_query(PGconn *conn, char *query, const char pgqueryname[], thresholds *qthresholds, char *query_warning, | 512 | mp_state_enum do_query(PGconn *conn, char *query, const char pgqueryname[], thresholds *qthresholds, |
496 | char *query_critical) { | 513 | char *query_warning, char *query_critical) { |
497 | if (verbose) { | 514 | if (verbose) { |
498 | printf("Executing SQL query \"%s\".\n", query); | 515 | printf("Executing SQL query \"%s\".\n", query); |
499 | } | 516 | } |
500 | PGresult *res = PQexec(conn, query); | 517 | PGresult *res = PQexec(conn, query); |
501 | 518 | ||
502 | if (PGRES_TUPLES_OK != PQresultStatus(res)) { | 519 | if (PGRES_TUPLES_OK != PQresultStatus(res)) { |
503 | printf(_("QUERY %s - %s: %s.\n"), _("CRITICAL"), _("Error with query"), PQerrorMessage(conn)); | 520 | printf(_("QUERY %s - %s: %s.\n"), _("CRITICAL"), _("Error with query"), |
521 | PQerrorMessage(conn)); | ||
504 | return STATE_CRITICAL; | 522 | return STATE_CRITICAL; |
505 | } | 523 | } |
506 | 524 | ||
@@ -548,7 +566,8 @@ mp_state_enum do_query(PGconn *conn, char *query, const char pgqueryname[], thre | |||
548 | printf(_("'%s' returned %f"), query, value); | 566 | printf(_("'%s' returned %f"), query, value); |
549 | } | 567 | } |
550 | 568 | ||
551 | printf("|query=%f;%s;%s;;\n", value, query_warning ? query_warning : "", query_critical ? query_critical : ""); | 569 | printf("|query=%f;%s;%s;;\n", value, query_warning ? query_warning : "", |
570 | query_critical ? query_critical : ""); | ||
552 | if (PQnfields(res) > 1) { | 571 | if (PQnfields(res) > 1) { |
553 | char *extra_info = PQgetvalue(res, 0, 1); | 572 | char *extra_info = PQgetvalue(res, 0, 1); |
554 | if (extra_info != NULL) { | 573 | if (extra_info != NULL) { |