summaryrefslogtreecommitdiffstats
path: root/web/attachments/97188-check_mysql.check_slave.patch
blob: 6607fdcee3f7e9b9193b05441bac42c3eba45b2a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
diff -Naur nagios-plugins-1.4.0alpha1.orig/plugins/check_mysql.c nagios-plugins-1.4.0alpha1/plugins/check_mysql.c
--- nagios-plugins-1.4.0alpha1.orig/plugins/check_mysql.c	2003-08-21 23:22:38.000000000 -0700
+++ nagios-plugins-1.4.0alpha1/plugins/check_mysql.c	2004-07-30 11:15:56.000000000 -0700
@@ -19,6 +19,8 @@
 const char *copyright = "1999-2002";
 const char *email = "nagiosplug-devel@lists.sourceforge.net";
 
+#define SLAVERESULTSIZE 40
+
 #include "common.h"
 #include "utils.h"
 #include "netutils.h"
@@ -30,6 +32,7 @@
 char *db_pass = NULL;
 char *db = NULL;
 unsigned int db_port = MYSQL_PORT;
+int check_slave = 0;
 
 int process_arguments (int, char **);
 int validate_arguments (void);
@@ -41,7 +44,10 @@
 {
 
 	MYSQL mysql;
+	MYSQL_RES *res;
+	MYSQL_ROW row;
 	char *result = NULL;
+	char slaveresult[SLAVERESULTSIZE];
 
 	setlocale (LC_ALL, "");
 	bindtextdomain (PACKAGE, LOCALEDIR);
@@ -82,11 +88,58 @@
 			die (STATE_CRITICAL, "%s\n", mysql_error (&mysql));
 	}
 
+	if(check_slave) {
+		/* check the slave status */
+		if (mysql_query (&mysql, "show slave status") != 0) {
+			mysql_close (&mysql);
+			die (STATE_CRITICAL, "slave query error: %s\n", mysql_error (&mysql));
+		}
+
+		/* store the result */
+		if ( (res = mysql_store_result (&mysql)) == NULL) {
+			mysql_close (&mysql);
+			die (STATE_CRITICAL, "slave store_result error: %s\n", mysql_error (&mysql));
+		}
+
+		/* fetch the first row */
+		if ( (row = mysql_fetch_row (res)) == NULL) {
+			mysql_free_result (res);
+			mysql_close (&mysql);
+			die (STATE_CRITICAL, "slave fetch row error: %s\n", mysql_error (&mysql));
+		}
+
+		if (mysql_field_count (&mysql) == 12) {
+			/* mysql 3.23.x */
+			snprintf (slaveresult, SLAVERESULTSIZE, "Slave running: %s", row[6]);
+			if (strcmp (row[6], "Yes") != 0) {
+				mysql_free_result (res);
+				mysql_close (&mysql);
+				die (STATE_CRITICAL, "%s\n", slaveresult);
+			}
+
+		} else {
+			/* mysql 4.x.x */
+			snprintf (slaveresult, SLAVERESULTSIZE, "Slave IO: %s Slave SQL: %s", row[9], row[10]);
+			if (strcmp (row[9], "Yes") != 0 || strcmp (row[10], "Yes") != 0) {
+				mysql_free_result (res);
+				mysql_close (&mysql);
+				die (STATE_CRITICAL, "%s\n", slaveresult);
+			}
+		}
+
+		/* free the result */
+		mysql_free_result (res);
+	}
+
 	/* close the connection */
 	mysql_close (&mysql);
 
 	/* print out the result of stats */
-	printf ("%s\n", result);
+	if (check_slave) {
+		printf ("%s %s\n", result, slaveresult);
+	} else {
+		printf ("%s\n", result);
+	}
 
 	return STATE_OK;
 }
@@ -108,6 +161,7 @@
 		{"username", required_argument, 0, 'u'},
 		{"password", required_argument, 0, 'p'},
 		{"port", required_argument, 0, 'P'},
+		{"check-slave", no_argument, 0, 'S'},
 		{"verbose", no_argument, 0, 'v'},
 		{"version", no_argument, 0, 'V'},
 		{"help", no_argument, 0, 'h'},
@@ -118,7 +172,7 @@
 		return ERROR;
 
 	while (1) {
-		c = getopt_long (argc, argv, "hVP:p:u:d:H:", longopts, &option);
+		c = getopt_long (argc, argv, "hVSP:p:u:d:H:", longopts, &option);
 
 		if (c == -1 || c == EOF)
 			break;
@@ -144,6 +198,9 @@
 		case 'P':									/* critical time threshold */
 			db_port = atoi (optarg);
 			break;
+		case 'S':
+			check_slave = 1;							/* check-slave */
+			break;
 		case 'V':									/* version */
 			print_revision (progname, revision);
 			exit (STATE_OK);
@@ -234,7 +291,9 @@
  -p, --password=STRING\n\
    Use the indicated password to authenticate the connection\n\
    ==> IMPORTANT: THIS FORM OF AUTHENTICATION IS NOT SECURE!!! <==\n\
-   Your clear-text password will be visible as a process table entry\n"));
+   Your clear-text password will be visible as a process table entry\n\
+ -S, --check-slave\n\
+   Check if the slave thread is running properly.\n"));
 
 	printf (_("\n\
 There are no required arguments. By default, the local database with\n\
@@ -250,7 +309,7 @@
 print_usage (void)
 {
 	printf (_("\
-Usage: %s [-d database] [-H host] [-P port] [-u user] [-p password]\n"),
+Usage: %s [-d database] [-H host] [-P port] [-u user] [-p password] [-S]\n"),
 	        progname);
 	printf (_(UT_HLP_VRS), progname, progname);
 }