diff options
| author | Matthew Kent <mattkent@users.sourceforge.net> | 2004-11-21 05:24:57 +0000 |
|---|---|---|
| committer | Matthew Kent <mattkent@users.sourceforge.net> | 2004-11-21 05:24:57 +0000 |
| commit | 12d424489ebbeb8b79a97efa5d97174776ec2511 (patch) | |
| tree | 3d37e4984d44bf49ed470a3f7e5432464f52d44a /plugins | |
| parent | 08b92b8b8f1529b32c661ca583cc99cd347cbe6e (diff) | |
| download | monitoring-plugins-12d424489ebbeb8b79a97efa5d97174776ec2511.tar.gz | |
Patch from Nathan Shafer to add replication slave check (1006777)
git-svn-id: https://nagiosplug.svn.sourceforge.net/svnroot/nagiosplug/nagiosplug/trunk@920 f882894a-f735-0410-b71e-b25c423dba1c
Diffstat (limited to 'plugins')
| -rw-r--r-- | plugins/check_mysql.c | 67 |
1 files changed, 63 insertions, 4 deletions
diff --git a/plugins/check_mysql.c b/plugins/check_mysql.c index d62bfc87..2c90e6db 100644 --- a/plugins/check_mysql.c +++ b/plugins/check_mysql.c | |||
| @@ -19,6 +19,8 @@ const char *revision = "$Revision$"; | |||
| 19 | const char *copyright = "1999-2002"; | 19 | const char *copyright = "1999-2002"; |
| 20 | const char *email = "nagiosplug-devel@lists.sourceforge.net"; | 20 | const char *email = "nagiosplug-devel@lists.sourceforge.net"; |
| 21 | 21 | ||
| 22 | #define SLAVERESULTSIZE 40 | ||
| 23 | |||
| 22 | #include "common.h" | 24 | #include "common.h" |
| 23 | #include "utils.h" | 25 | #include "utils.h" |
| 24 | #include "netutils.h" | 26 | #include "netutils.h" |
| @@ -30,6 +32,7 @@ char *db_host = NULL; | |||
| 30 | char *db_pass = NULL; | 32 | char *db_pass = NULL; |
| 31 | char *db = NULL; | 33 | char *db = NULL; |
| 32 | unsigned int db_port = MYSQL_PORT; | 34 | unsigned int db_port = MYSQL_PORT; |
| 35 | int check_slave = 0; | ||
| 33 | 36 | ||
| 34 | int process_arguments (int, char **); | 37 | int process_arguments (int, char **); |
| 35 | int validate_arguments (void); | 38 | int validate_arguments (void); |
| @@ -41,7 +44,10 @@ main (int argc, char **argv) | |||
| 41 | { | 44 | { |
| 42 | 45 | ||
| 43 | MYSQL mysql; | 46 | MYSQL mysql; |
| 47 | MYSQL_RES *res; | ||
| 48 | MYSQL_ROW row; | ||
| 44 | char *result = NULL; | 49 | char *result = NULL; |
| 50 | char slaveresult[SLAVERESULTSIZE]; | ||
| 45 | 51 | ||
| 46 | setlocale (LC_ALL, ""); | 52 | setlocale (LC_ALL, ""); |
| 47 | bindtextdomain (PACKAGE, LOCALEDIR); | 53 | bindtextdomain (PACKAGE, LOCALEDIR); |
| @@ -82,11 +88,58 @@ main (int argc, char **argv) | |||
| 82 | die (STATE_CRITICAL, "%s\n", mysql_error (&mysql)); | 88 | die (STATE_CRITICAL, "%s\n", mysql_error (&mysql)); |
| 83 | } | 89 | } |
| 84 | 90 | ||
| 91 | if(check_slave) { | ||
| 92 | /* check the slave status */ | ||
| 93 | if (mysql_query (&mysql, "show slave status") != 0) { | ||
| 94 | mysql_close (&mysql); | ||
| 95 | die (STATE_CRITICAL, "slave query error: %s\n", mysql_error (&mysql)); | ||
| 96 | } | ||
| 97 | |||
| 98 | /* store the result */ | ||
| 99 | if ( (res = mysql_store_result (&mysql)) == NULL) { | ||
| 100 | mysql_close (&mysql); | ||
| 101 | die (STATE_CRITICAL, "slave store_result error: %s\n", mysql_error (&mysql)); | ||
| 102 | } | ||
| 103 | |||
| 104 | /* fetch the first row */ | ||
| 105 | if ( (row = mysql_fetch_row (res)) == NULL) { | ||
| 106 | mysql_free_result (res); | ||
| 107 | mysql_close (&mysql); | ||
| 108 | die (STATE_CRITICAL, "slave fetch row error: %s\n", mysql_error (&mysql)); | ||
| 109 | } | ||
| 110 | |||
| 111 | if (mysql_field_count (&mysql) == 12) { | ||
| 112 | /* mysql 3.23.x */ | ||
| 113 | snprintf (slaveresult, SLAVERESULTSIZE, "Slave running: %s", row[6]); | ||
| 114 | if (strcmp (row[6], "Yes") != 0) { | ||
| 115 | mysql_free_result (res); | ||
| 116 | mysql_close (&mysql); | ||
| 117 | die (STATE_CRITICAL, "%s\n", slaveresult); | ||
| 118 | } | ||
| 119 | |||
| 120 | } else { | ||
| 121 | /* mysql 4.x.x */ | ||
| 122 | snprintf (slaveresult, SLAVERESULTSIZE, "Slave IO: %s Slave SQL: %s", row[9], row[10]); | ||
| 123 | if (strcmp (row[9], "Yes") != 0 || strcmp (row[10], "Yes") != 0) { | ||
| 124 | mysql_free_result (res); | ||
| 125 | mysql_close (&mysql); | ||
| 126 | die (STATE_CRITICAL, "%s\n", slaveresult); | ||
| 127 | } | ||
| 128 | } | ||
| 129 | |||
| 130 | /* free the result */ | ||
| 131 | mysql_free_result (res); | ||
| 132 | } | ||
| 133 | |||
| 85 | /* close the connection */ | 134 | /* close the connection */ |
| 86 | mysql_close (&mysql); | 135 | mysql_close (&mysql); |
| 87 | 136 | ||
| 88 | /* print out the result of stats */ | 137 | /* print out the result of stats */ |
| 89 | printf ("%s\n", result); | 138 | if (check_slave) { |
| 139 | printf ("%s %s\n", result, slaveresult); | ||
| 140 | } else { | ||
| 141 | printf ("%s\n", result); | ||
| 142 | } | ||
| 90 | 143 | ||
| 91 | return STATE_OK; | 144 | return STATE_OK; |
| 92 | } | 145 | } |
| @@ -108,6 +161,7 @@ process_arguments (int argc, char **argv) | |||
| 108 | {"username", required_argument, 0, 'u'}, | 161 | {"username", required_argument, 0, 'u'}, |
| 109 | {"password", required_argument, 0, 'p'}, | 162 | {"password", required_argument, 0, 'p'}, |
| 110 | {"port", required_argument, 0, 'P'}, | 163 | {"port", required_argument, 0, 'P'}, |
| 164 | {"check-slave", no_argument, 0, 'S'}, | ||
| 111 | {"verbose", no_argument, 0, 'v'}, | 165 | {"verbose", no_argument, 0, 'v'}, |
| 112 | {"version", no_argument, 0, 'V'}, | 166 | {"version", no_argument, 0, 'V'}, |
| 113 | {"help", no_argument, 0, 'h'}, | 167 | {"help", no_argument, 0, 'h'}, |
| @@ -118,7 +172,7 @@ process_arguments (int argc, char **argv) | |||
| 118 | return ERROR; | 172 | return ERROR; |
| 119 | 173 | ||
| 120 | while (1) { | 174 | while (1) { |
| 121 | c = getopt_long (argc, argv, "hVP:p:u:d:H:", longopts, &option); | 175 | c = getopt_long (argc, argv, "hVSP:p:u:d:H:", longopts, &option); |
| 122 | 176 | ||
| 123 | if (c == -1 || c == EOF) | 177 | if (c == -1 || c == EOF) |
| 124 | break; | 178 | break; |
| @@ -144,6 +198,9 @@ process_arguments (int argc, char **argv) | |||
| 144 | case 'P': /* critical time threshold */ | 198 | case 'P': /* critical time threshold */ |
| 145 | db_port = atoi (optarg); | 199 | db_port = atoi (optarg); |
| 146 | break; | 200 | break; |
| 201 | case 'S': | ||
| 202 | check_slave = 1; /* check-slave */ | ||
| 203 | break; | ||
| 147 | case 'V': /* version */ | 204 | case 'V': /* version */ |
| 148 | print_revision (progname, revision); | 205 | print_revision (progname, revision); |
| 149 | exit (STATE_OK); | 206 | exit (STATE_OK); |
| @@ -234,7 +291,9 @@ print_help (void) | |||
| 234 | -p, --password=STRING\n\ | 291 | -p, --password=STRING\n\ |
| 235 | Use the indicated password to authenticate the connection\n\ | 292 | Use the indicated password to authenticate the connection\n\ |
| 236 | ==> IMPORTANT: THIS FORM OF AUTHENTICATION IS NOT SECURE!!! <==\n\ | 293 | ==> IMPORTANT: THIS FORM OF AUTHENTICATION IS NOT SECURE!!! <==\n\ |
| 237 | Your clear-text password will be visible as a process table entry\n")); | 294 | Your clear-text password will be visible as a process table entry\n\ |
| 295 | -S, --check-slave\n\ | ||
| 296 | Check if the slave thread is running properly.\n")); | ||
| 238 | 297 | ||
| 239 | printf (_("\n\ | 298 | printf (_("\n\ |
| 240 | There are no required arguments. By default, the local database with\n\ | 299 | There are no required arguments. By default, the local database with\n\ |
| @@ -250,7 +309,7 @@ void | |||
| 250 | print_usage (void) | 309 | print_usage (void) |
| 251 | { | 310 | { |
| 252 | printf (_("\ | 311 | printf (_("\ |
| 253 | Usage: %s [-d database] [-H host] [-P port] [-u user] [-p password]\n"), | 312 | Usage: %s [-d database] [-H host] [-P port] [-u user] [-p password] [-S]\n"), |
| 254 | progname); | 313 | progname); |
| 255 | printf (_(UT_HLP_VRS), progname, progname); | 314 | printf (_(UT_HLP_VRS), progname, progname); |
| 256 | } | 315 | } |
