diff options
Diffstat (limited to 'web/attachments/170107-check_pgsql.patch')
| -rw-r--r-- | web/attachments/170107-check_pgsql.patch | 138 |
1 files changed, 138 insertions, 0 deletions
diff --git a/web/attachments/170107-check_pgsql.patch b/web/attachments/170107-check_pgsql.patch new file mode 100644 index 0000000..b880f8c --- /dev/null +++ b/web/attachments/170107-check_pgsql.patch | |||
| @@ -0,0 +1,138 @@ | |||
| 1 | --- check_pgsql.original 2006-03-07 12:40:11.000000000 -0700 | ||
| 2 | +++ check_pgsql.c 2006-03-07 12:47:48.000000000 -0700 | ||
| 3 | @@ -21,5 +21,5 @@ | ||
| 4 | const char *progname = "check_pgsql"; | ||
| 5 | const char *revision = "$Revision: 1.31 $"; | ||
| 6 | -const char *copyright = "1999-2004"; | ||
| 7 | +const char *copyright = "1999-2006"; | ||
| 8 | const char *email = "nagiosplug-devel@lists.sourceforge.net"; | ||
| 9 | |||
| 10 | @@ -36,5 +36,7 @@ | ||
| 11 | DEFAULT_PORT = 5432, | ||
| 12 | DEFAULT_WARN = 2, | ||
| 13 | - DEFAULT_CRIT = 8 | ||
| 14 | + DEFAULT_CRIT = 8, | ||
| 15 | + DEFAULT_WARNING_XID_AGE = 500000000, /* 500M */ | ||
| 16 | + DEFAULT_CRITICAL_XID_AGE = 1000000000 /* 1B */ | ||
| 17 | }; | ||
| 18 | |||
| 19 | @@ -58,4 +60,6 @@ | ||
| 20 | double twarn = (double)DEFAULT_WARN; | ||
| 21 | double tcrit = (double)DEFAULT_CRIT; | ||
| 22 | +int warning_xid_age = DEFAULT_WARNING_XID_AGE; | ||
| 23 | +int critical_xid_age = DEFAULT_CRITICAL_XID_AGE; | ||
| 24 | |||
| 25 | PGconn *conn; | ||
| 26 | @@ -124,4 +128,9 @@ | ||
| 27 | int elapsed_time; | ||
| 28 | int status = STATE_UNKNOWN; | ||
| 29 | + int i,j; | ||
| 30 | + int nFields; | ||
| 31 | + const char *paramValues[1]; | ||
| 32 | + char param[100]; | ||
| 33 | + PGresult *res; | ||
| 34 | |||
| 35 | /* begin, by setting the parameters for a backend connection if the | ||
| 36 | @@ -167,8 +176,43 @@ | ||
| 37 | } | ||
| 38 | else { | ||
| 39 | + snprintf(param, 100, "%d", warning_xid_age); | ||
| 40 | + paramValues[0] = param; | ||
| 41 | + res = PQexecParams(conn, | ||
| 42 | + "SELECT datname,age(datvacuumxid) FROM pg_database WHERE age(datvacuumxid) > $1 ORDER BY age(datvacuumxid) DESC", | ||
| 43 | + 1, NULL, paramValues, NULL, NULL, 0); | ||
| 44 | + if (PQresultStatus(res) != PGRES_TUPLES_OK) | ||
| 45 | + { | ||
| 46 | + printf (_("CRITICAL - error '%s' running query on '%s' (%s).\n"), | ||
| 47 | + PQerrorMessage(conn), dbName, PQerrorMessage (conn)); | ||
| 48 | + PQclear (res); | ||
| 49 | + PQfinish (conn); | ||
| 50 | + return STATE_CRITICAL; | ||
| 51 | + } | ||
| 52 | + | ||
| 53 | + if (PQntuples(res) > 0) | ||
| 54 | + { | ||
| 55 | + j = atoi(PQgetvalue(res, 0, 1)); | ||
| 56 | + | ||
| 57 | + printf (_("%s: Databases in danger of XID wraparound: "), | ||
| 58 | + ((j > critical_xid_age) ? "CRITICAL" : "WARNING")); | ||
| 59 | + | ||
| 60 | + for (i = 0; i < PQntuples(res); i++) | ||
| 61 | + { | ||
| 62 | + printf (_("%s age %s"), PQgetvalue(res, i, 0), PQgetvalue(res, i, 1)); | ||
| 63 | + if (i < PQntuples(res) - 1) | ||
| 64 | + printf (_(",")); | ||
| 65 | + else | ||
| 66 | + printf (_("\n\n")); | ||
| 67 | + } | ||
| 68 | + PQclear (res); | ||
| 69 | + PQfinish (conn); | ||
| 70 | + return (j > critical_xid_age) ? STATE_CRITICAL : STATE_WARNING; | ||
| 71 | + } | ||
| 72 | + | ||
| 73 | + PQclear(res); | ||
| 74 | status = STATE_OK; | ||
| 75 | } | ||
| 76 | PQfinish (conn); | ||
| 77 | - printf (_(" %s - database %s (%d sec.)|%s\n"), | ||
| 78 | + printf (_(" %s - database %s (%ds, XIDs OK)|%s\n"), | ||
| 79 | state_text(status), dbName, elapsed_time, | ||
| 80 | fperfdata("time", elapsed_time, "s", | ||
| 81 | @@ -198,9 +242,11 @@ | ||
| 82 | {"port", required_argument, 0, 'P'}, | ||
| 83 | {"database", required_argument, 0, 'd'}, | ||
| 84 | + {"warnxid", required_argument, 0, 'x'}, | ||
| 85 | + {"critxid", required_argument, 0, 'y'}, | ||
| 86 | {0, 0, 0, 0} | ||
| 87 | }; | ||
| 88 | |||
| 89 | while (1) { | ||
| 90 | - c = getopt_long (argc, argv, "hVt:c:w:H:P:d:l:p:a:", | ||
| 91 | + c = getopt_long (argc, argv, "hVt:c:w:H:P:d:l:p:a:x:y:", | ||
| 92 | longopts, &option); | ||
| 93 | |||
| 94 | @@ -259,4 +305,16 @@ | ||
| 95 | pguser = optarg; | ||
| 96 | break; | ||
| 97 | + case 'x': | ||
| 98 | + if (!is_intpos(optarg)) | ||
| 99 | + usage2 (_("Warning XID age must be a positive integer"), optarg); | ||
| 100 | + else | ||
| 101 | + warning_xid_age = atoi(optarg); | ||
| 102 | + break; | ||
| 103 | + case 'y': | ||
| 104 | + if (!is_intpos(optarg)) | ||
| 105 | + usage2 (_("Critical XID age must be a positive integer"), optarg); | ||
| 106 | + else | ||
| 107 | + critical_xid_age = atoi(optarg); | ||
| 108 | + break; | ||
| 109 | case 'p': /* authentication password */ | ||
| 110 | case 'a': | ||
| 111 | @@ -403,11 +461,17 @@ | ||
| 112 | |||
| 113 | printf (_("\ | ||
| 114 | - -d, --database=STRING\n\ | ||
| 115 | + -d, --database=STRING\n\ | ||
| 116 | Database to check (default: %s)\n\ | ||
| 117 | - -l, --logname = STRING\n\ | ||
| 118 | + -l, --logname = STRING\n\ | ||
| 119 | Login name of user\n\ | ||
| 120 | - -p, --password = STRING\n\ | ||
| 121 | + -p, --password = STRING\n\ | ||
| 122 | Password (BIG SECURITY ISSUE)\n"), DEFAULT_DB); | ||
| 123 | |||
| 124 | + printf (_("\ | ||
| 125 | + -x, --warnxid=INTEGER\n\ | ||
| 126 | + Minimum XID age to generate a warning (default: %d)\n\ | ||
| 127 | + -y, --critxid=INTEGER\n\ | ||
| 128 | + Minimum XID age to generate a critical (default: %d)\n"), DEFAULT_WARNING_XID_AGE, DEFAULT_CRITICAL_XID_AGE); | ||
| 129 | + | ||
| 130 | printf (_(UT_WARN_CRIT)); | ||
| 131 | |||
| 132 | @@ -442,4 +506,5 @@ | ||
| 133 | printf ("\ | ||
| 134 | Usage: %s [-H <host>] [-P <port>] [-c <critical time>] [-w <warning time>]\n\ | ||
| 135 | - [-t <timeout>] [-d <database>] [-l <logname>] [-p <password>]\n", progname); | ||
| 136 | + [-t <timeout>] [-d <database>] [-l <logname>] [-p <password>]\n\ | ||
| 137 | + [-x <warning_xid_age>] [-y <critical_xid_age>]\n", progname); | ||
| 138 | } | ||
