summaryrefslogtreecommitdiffstats
path: root/web/attachments/103460-check_ups-NUT2.0.diff
diff options
context:
space:
mode:
Diffstat (limited to 'web/attachments/103460-check_ups-NUT2.0.diff')
-rw-r--r--web/attachments/103460-check_ups-NUT2.0.diff588
1 files changed, 588 insertions, 0 deletions
diff --git a/web/attachments/103460-check_ups-NUT2.0.diff b/web/attachments/103460-check_ups-NUT2.0.diff
new file mode 100644
index 0000000..e28c718
--- /dev/null
+++ b/web/attachments/103460-check_ups-NUT2.0.diff
@@ -0,0 +1,588 @@
1diff -ru nagiosplug/AUTHORS nagiosplug_AQ/AUTHORS
2--- nagiosplug/AUTHORS 2004-08-23 23:59:37.000000000 +0200
3+++ nagiosplug_AQ/AUTHORS 2004-09-30 10:23:42.000000000 +0200
4@@ -119,3 +119,5 @@
5 Sean Finney
6 Bill Kunkel
7 Paulo Afonso Graner Fessel
8+Alain Richard
9+Arnaud Quette
10diff -ru nagiosplug/command.cfg.in nagiosplug_AQ/command.cfg.in
11--- nagiosplug/command.cfg.in 2003-06-12 06:46:10.000000000 +0200
12+++ nagiosplug_AQ/command.cfg.in 2004-10-01 12:31:15.000000000 +0200
13@@ -91,6 +91,7 @@
14 command[check_procs_zombie]=@libexecdir@/check_procs -w $ARG1$ -c $ARG2$ -s Z
15 command[check_procs_httpd]=@libexecdir@/check_procs -w 5:$ARG1$ -c 1:$ARG2$ -C httpd
16 command[check_procs_vsz]=@libexecdir@/check_procs -w 8096 -c 16182 -C httpd --metric VSZ
17+command[check_ups]=@libexecdir@/check_ups -H $HOSTADDRESS$ -u $UPS$
18
19 # An example of using check_by_ssh as an active service check
20 command[ssh_disk]=@libexecdir@/check_by_ssh -H $HOSTADDRESS$ -C '@libexecdir@/check_disk -w 85% -c 95% -p $ARG1$'
21diff -ru nagiosplug/plugins/check_ups.c nagiosplug_AQ/plugins/check_ups.c
22--- nagiosplug/plugins/check_ups.c 2004-03-14 05:09:19.000000000 +0100
23+++ nagiosplug_AQ/plugins/check_ups.c 2004-10-01 11:35:19.000000000 +0200
24@@ -1,26 +1,35 @@
25 /******************************************************************************
26-
27- This program is free software; you can redistribute it and/or modify
28- it under the terms of the GNU General Public License as published by
29- the Free Software Foundation; either version 2 of the License, or (at
30- your option) any later version.
31-
32- This program is distributed in the hope that it will be useful, but
33- WITHOUT ANY WARRANTY; without even the implied warranty of
34- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
35- General Public License for more details.
36-
37- You should have received a copy of the GNU General Public License
38- along with this program; if not, write to the Free Software
39- Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
40-
41-******************************************************************************/
42+ *
43+ * check_ups
44+ *
45+ * Program: Network UPS Tools plugin for Nagios
46+ * License: GPL
47+ * Copyright (c) 2000 Tom Shields
48+ * 2004 Alain Richard <alain.richard@equation.fr>
49+ * 2004 Arnaud Quette <arnaud.quette@mgeups.com>
50+ *
51+ * This program is free software; you can redistribute it and/or modify
52+ * it under the terms of the GNU General Public License as published by
53+ * the Free Software Foundation; either version 2 of the License, or (at
54+ * your option) any later version.
55+ *
56+ * This program is distributed in the hope that it will be useful, but
57+ * WITHOUT ANY WARRANTY; without even the implied warranty of
58+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
59+ * General Public License for more details.
60+ *
61+ * You should have received a copy of the GNU General Public License
62+ * along with this program; if not, write to the Free Software
63+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
64+ *
65+ ******************************************************************************/
66
67 const char *progname = "check_ups";
68-const char *revision = "$Revision: 1.14 $";
69-const char *copyright = "2000-2002";
70+const char *revision = "$Revision: 1.20 $";
71+const char *copyright = "2000-2004";
72 const char *email = "nagiosplug-devel@lists.sourceforge.net";
73
74+#include <locale.h>
75 #include "common.h"
76 #include "netutils.h"
77 #include "utils.h"
78@@ -38,14 +47,22 @@
79 #define UPS_TEMP 8 /* supports UPS temperature */
80 #define UPS_LOADPCT 16 /* supports load percent */
81
82-#define UPSSTATUS_NONE 0
83-#define UPSSTATUS_OFF 1
84-#define UPSSTATUS_OL 2
85-#define UPSSTATUS_OB 4
86-#define UPSSTATUS_LB 8
87-#define UPSSTATUS_CAL 16
88-#define UPSSTATUS_RB 32 /*Replace Battery */
89-#define UPSSTATUS_UNKOWN 64
90+#define UPSSTATUS_NONE 0
91+#define UPSSTATUS_OFF 1
92+#define UPSSTATUS_OL 2
93+#define UPSSTATUS_OB 4
94+#define UPSSTATUS_LB 8
95+#define UPSSTATUS_CAL 16
96+#define UPSSTATUS_RB 32 /*Replace Battery */
97+#define UPSSTATUS_BYPASS 64
98+#define UPSSTATUS_OVER 128
99+#define UPSSTATUS_TRIM 256
100+#define UPSSTATUS_BOOST 512
101+#define UPSSTATUS_CHRG 1024
102+#define UPSSTATUS_DISCHRG 2048
103+#define UPSSTATUS_UNKOWN 4096
104+
105+enum { NOSUCHVAR = ERROR-1 };
106
107 int server_port = PORT;
108 char *server_address;
109@@ -63,9 +80,9 @@
110 double ups_load_percent = 0.0;
111 double ups_temperature = 0.0;
112 char *ups_status;
113+int temp_output_c = 0;
114
115 int determine_status (void);
116-int determine_supported_vars (void);
117 int get_ups_variable (const char *, char *, size_t);
118
119 int process_arguments (int, char **);
120@@ -73,7 +90,7 @@
121 void print_help (void);
122 void print_usage (void);
123
124-int
125+ int
126 main (int argc, char **argv)
127 {
128 int result = STATE_OK;
129@@ -81,6 +98,7 @@
130 char *data;
131 char temp_buffer[MAX_INPUT_BUFFER];
132 double ups_utility_deviation = 0.0;
133+ int res;
134
135 setlocale (LC_ALL, "");
136 bindtextdomain (PACKAGE, LOCALEDIR);
137@@ -88,6 +106,7 @@
138
139 ups_status = strdup ("N/A");
140 data = strdup ("");
141+ message = strdup ("");
142
143 if (process_arguments (argc, argv) != OK)
144 usage ("Invalid command arguments supplied\n");
145@@ -98,15 +117,11 @@
146 /* set socket timeout */
147 alarm (socket_timeout);
148
149- /* determine what variables the UPS supports */
150- if (determine_supported_vars () != OK)
151- return STATE_CRITICAL;
152-
153 /* get the ups status if possible */
154+ if (determine_status () != OK)
155+ return STATE_CRITICAL;
156 if (supported_options & UPS_STATUS) {
157
158- if (determine_status () != OK)
159- return STATE_CRITICAL;
160 ups_status = strdup ("");
161 result = STATE_OK;
162
163@@ -138,6 +153,24 @@
164 asprintf (&ups_status, "%s%s", ups_status, ", Replace Battery");
165 result = STATE_WARNING;
166 }
167+ if (status & UPSSTATUS_BYPASS) {
168+ asprintf (&ups_status, "%s%s", ups_status, ", On Bypass");
169+ }
170+ if (status & UPSSTATUS_OVER) {
171+ asprintf (&ups_status, "%s%s", ups_status, ", Overload");
172+ }
173+ if (status & UPSSTATUS_TRIM) {
174+ asprintf (&ups_status, "%s%s", ups_status, ", Trimming");
175+ }
176+ if (status & UPSSTATUS_BOOST) {
177+ asprintf (&ups_status, "%s%s", ups_status, ", Boosting");
178+ }
179+ if (status & UPSSTATUS_CHRG) {
180+ asprintf (&ups_status, "%s%s", ups_status, ", Charging");
181+ }
182+ if (status & UPSSTATUS_DISCHRG) {
183+ asprintf (&ups_status, "%s%s", ups_status, ", Discharging");
184+ }
185 if (status & UPSSTATUS_UNKOWN) {
186 asprintf (&ups_status, "%s%s", ups_status, ", Unknown");
187 }
188@@ -146,10 +179,12 @@
189 }
190
191 /* get the ups utility voltage if possible */
192- if (supported_options & UPS_UTILITY) {
193-
194- if (get_ups_variable ("UTILITY", temp_buffer, sizeof (temp_buffer)) != OK)
195- return STATE_CRITICAL;
196+ res=get_ups_variable ("input.voltage", temp_buffer, sizeof (temp_buffer));
197+ if (res == NOSUCHVAR) supported_options &= ~UPS_UTILITY;
198+ else if (res != OK)
199+ return STATE_CRITICAL;
200+ else {
201+ supported_options |= UPS_UTILITY;
202
203 ups_utility_voltage = atof (temp_buffer);
204 asprintf (&message, "%sUtility=%3.1fV ", message, ups_utility_voltage);
205@@ -167,23 +202,24 @@
206 result = max_state (result, STATE_WARNING);
207 }
208 asprintf (&data, "%s",
209- fperfdata ("voltage", ups_utility_voltage, "V",
210- check_warn, warning_value,
211- check_crit, critical_value,
212+ perfdata ("voltage", (long)(1000*ups_utility_voltage), "mV",
213+ check_warn, (long)(1000*warning_value),
214+ check_crit, (long)(1000*critical_value),
215 TRUE, 0, FALSE, 0));
216 } else {
217 asprintf (&data, "%s",
218- fperfdata ("voltage", ups_utility_voltage, "V",
219+ perfdata ("voltage", (long)(1000*ups_utility_voltage), "mV",
220 FALSE, 0, FALSE, 0, TRUE, 0, FALSE, 0));
221 }
222 }
223
224 /* get the ups battery percent if possible */
225- if (supported_options & UPS_BATTPCT) {
226-
227- if (get_ups_variable ("BATTPCT", temp_buffer, sizeof (temp_buffer)) != OK)
228- return STATE_CRITICAL;
229-
230+ res=get_ups_variable ("battery.charge", temp_buffer, sizeof (temp_buffer));
231+ if (res == NOSUCHVAR) supported_options &= ~UPS_BATTPCT;
232+ else if ( res != OK)
233+ return STATE_CRITICAL;
234+ else {
235+ supported_options |= UPS_BATTPCT;
236 ups_battery_percent = atof (temp_buffer);
237 asprintf (&message, "%sBatt=%3.1f%% ", message, ups_battery_percent);
238
239@@ -207,11 +243,12 @@
240 }
241
242 /* get the ups load percent if possible */
243- if (supported_options & UPS_LOADPCT) {
244-
245- if (get_ups_variable ("LOADPCT", temp_buffer, sizeof (temp_buffer)) != OK)
246- return STATE_CRITICAL;
247-
248+ res=get_ups_variable ("ups.load", temp_buffer, sizeof (temp_buffer));
249+ if ( res == NOSUCHVAR ) supported_options &= ~UPS_LOADPCT;
250+ else if ( res != OK)
251+ return STATE_CRITICAL;
252+ else {
253+ supported_options |= UPS_LOADPCT;
254 ups_load_percent = atof (temp_buffer);
255 asprintf (&message, "%sLoad=%3.1f%% ", message, ups_load_percent);
256
257@@ -235,13 +272,20 @@
258 }
259
260 /* get the ups temperature if possible */
261- if (supported_options & UPS_TEMP) {
262-
263- if (get_ups_variable ("UPSTEMP", temp_buffer, sizeof (temp_buffer)) != OK)
264- return STATE_CRITICAL;
265-
266- ups_temperature = (atof (temp_buffer) * 1.8) + 32;
267- asprintf (&message, "%sTemp=%3.1fF", message, ups_temperature);
268+ res=get_ups_variable ("ups.temperature", temp_buffer, sizeof (temp_buffer));
269+ if ( res == NOSUCHVAR ) supported_options &= ~UPS_TEMP;
270+ else if ( res != OK)
271+ return STATE_CRITICAL;
272+ else {
273+ supported_options |= UPS_TEMP;
274+ if (temp_output_c) {
275+ ups_temperature = atof (temp_buffer);
276+ asprintf (&message, "%sTemp=%3.1fC", message, ups_temperature);
277+ }
278+ else {
279+ ups_temperature = (atof (temp_buffer) * 1.8) + 32;
280+ asprintf (&message, "%sTemp=%3.1fF", message, ups_temperature);
281+ }
282
283 if (check_variable == UPS_TEMP) {
284 if (check_crit==TRUE && ups_temperature>=critical_value) {
285@@ -284,15 +328,17 @@
286 char recv_buffer[MAX_INPUT_BUFFER];
287 char temp_buffer[MAX_INPUT_BUFFER];
288 char *ptr;
289-
290- if (get_ups_variable ("STATUS", recv_buffer, sizeof (recv_buffer)) !=
291- STATE_OK) {
292+ int res;
293+
294+ res=get_ups_variable ("ups.status", recv_buffer, sizeof (recv_buffer));
295+ if (res == NOSUCHVAR) return OK;
296+ if (res != STATE_OK) {
297 printf ("Invalid response received from hostn");
298 return ERROR;
299 }
300-
301- recv_buffer[strlen (recv_buffer) - 1] = 0;
302-
303+
304+ supported_options |= UPS_STATUS;
305+
306 strcpy (temp_buffer, recv_buffer);
307 for (ptr = (char *) strtok (temp_buffer, " "); ptr != NULL;
308 ptr = (char *) strtok (NULL, " ")) {
309@@ -308,6 +354,18 @@
310 status |= UPSSTATUS_CAL;
311 else if (!strcmp (ptr, "RB"))
312 status |= UPSSTATUS_RB;
313+ else if (!strcmp (ptr, "BYPASS"))
314+ status |= UPSSTATUS_BYPASS;
315+ else if (!strcmp (ptr, "OVER"))
316+ status |= UPSSTATUS_OVER;
317+ else if (!strcmp (ptr, "TRIM"))
318+ status |= UPSSTATUS_TRIM;
319+ else if (!strcmp (ptr, "BOOST"))
320+ status |= UPSSTATUS_BOOST;
321+ else if (!strcmp (ptr, "CHRG"))
322+ status |= UPSSTATUS_CHRG;
323+ else if (!strcmp (ptr, "DISCHRG"))
324+ status |= UPSSTATUS_DISCHRG;
325 else
326 status |= UPSSTATUS_UNKOWN;
327 }
328@@ -316,55 +374,6 @@
329 }
330
331
332-/* determines what options are supported by the UPS */
333-int
334-determine_supported_vars (void)
335-{
336- char send_buffer[MAX_INPUT_BUFFER];
337- char recv_buffer[MAX_INPUT_BUFFER];
338- char temp_buffer[MAX_INPUT_BUFFER];
339- char *ptr;
340-
341-
342- /* get the list of variables that this UPS supports */
343- if (ups_name)
344- sprintf (send_buffer, "LISTVARS %s\r\n", ups_name);
345- else
346- sprintf (send_buffer, "LISTVARS\r\n");
347- if (process_tcp_request
348- (server_address, server_port, send_buffer, recv_buffer,
349- sizeof (recv_buffer)) != STATE_OK) {
350- printf ("Invalid response received from host\n");
351- return ERROR;
352- }
353-
354- recv_buffer[strlen (recv_buffer) - 1] = 0;
355-
356- if (ups_name)
357- ptr = recv_buffer + 5 + strlen (ups_name) + 2;
358- else
359- ptr = recv_buffer + 5;
360-
361- strcpy (temp_buffer, recv_buffer);
362-
363- for (ptr = (char *) strtok (temp_buffer, " "); ptr != NULL;
364- ptr = (char *) strtok (NULL, " ")) {
365- if (!strcmp (ptr, "UTILITY"))
366- supported_options |= UPS_UTILITY;
367- else if (!strcmp (ptr, "BATTPCT"))
368- supported_options |= UPS_BATTPCT;
369- else if (!strcmp (ptr, "LOADPCT"))
370- supported_options |= UPS_LOADPCT;
371- else if (!strcmp (ptr, "STATUS"))
372- supported_options |= UPS_STATUS;
373- else if (!strcmp (ptr, "UPSTEMP"))
374- supported_options |= UPS_TEMP;
375- }
376-
377- return OK;
378-}
379-
380-
381 /* gets a variable value for a specific UPS */
382 int
383 get_ups_variable (const char *varname, char *buf, size_t buflen)
384@@ -373,12 +382,12 @@
385 char temp_buffer[MAX_INPUT_BUFFER];
386 char send_buffer[MAX_INPUT_BUFFER];
387 char *ptr;
388+ int len;
389
390+ *buf=0;
391+
392 /* create the command string to send to the UPS daemon */
393- if (ups_name)
394- sprintf (send_buffer, "REQ %s@%s\n", varname, ups_name);
395- else
396- sprintf (send_buffer, "REQ %s\n", varname);
397+ sprintf (send_buffer, "GET VAR %s %s\n", ups_name, varname);
398
399 /* send the command to the daemon and get a response back */
400 if (process_tcp_request
401@@ -388,40 +397,43 @@
402 return ERROR;
403 }
404
405- if (ups_name)
406- ptr = temp_buffer + strlen (varname) + 5 + strlen (ups_name) + 1;
407- else
408- ptr = temp_buffer + strlen (varname) + 5;
409-
410- if (!strcmp (ptr, "NOT-SUPPORTED")) {
411- printf ("Error: Variable '%s' is not supported\n", varname);
412+ ptr = temp_buffer;
413+ len = strlen(ptr);
414+ if (len > 0 && ptr[len-1] == '\n') ptr[len-1]=0;
415+ if (strcmp (ptr, "ERR UNKNOWN-UPS") == 0) {
416+ printf ("Error: no such ups '%s' on that host\n", ups_name);
417 return ERROR;
418 }
419
420- if (!strcmp (ptr, "DATA-STALE")) {
421+ if (strcmp (ptr, "ERR VAR-NOT-SUPPORTED") == 0) {
422+ //printf ("Error: Variable '%s' is not supported\n", varname);
423+ return NOSUCHVAR;
424+ }
425+
426+ if (strcmp (ptr, "ERR DATA-STALE") == 0) {
427 printf ("Error: UPS data is stale\n");
428 return ERROR;
429 }
430
431- if (!strcmp (ptr, "UNKNOWN-UPS")) {
432- if (ups_name)
433- printf ("Error: UPS '%s' is unknown\n", ups_name);
434- else
435- printf ("Error: UPS is unknown\n");
436+ if (strncmp (ptr, "ERR", 3) == 0) {
437+ printf ("Unkown error: %s\n", ptr);
438 return ERROR;
439 }
440
441- strncpy (buf, ptr, buflen - 1);
442- buf[buflen - 1] = 0;
443+ ptr = temp_buffer + strlen (varname) + strlen (ups_name) + 6;
444+ len = strlen(ptr);
445+ if (len < 2 || ptr[0] != '"' || ptr[len-1] != '"') {
446+ printf ("Error: unable to parse variable\n");
447+ return ERROR;
448+ }
449+ strncpy (buf, ptr+1, len - 2);
450+ buf[len - 2] = 0;
451
452 return OK;
453 }
454
455
456-
457-
458-
459-/* Command line: CHECK_UPS <host_address> [-u ups] [-p port] [-v variable]
460+/* Command line: CHECK_UPS -H <host_address> -u ups [-p port] [-v variable]
461 [-wv warn_value] [-cv crit_value] [-to to_sec] */
462
463
464@@ -439,6 +451,7 @@
465 {"critical", required_argument, 0, 'c'},
466 {"warning", required_argument, 0, 'w'},
467 {"timeout", required_argument, 0, 't'},
468+ {"temperature", no_argument, 0, 'T'},
469 {"variable", required_argument, 0, 'v'},
470 {"version", no_argument, 0, 'V'},
471 {"help", no_argument, 0, 'h'},
472@@ -458,7 +471,7 @@
473 }
474
475 while (1) {
476- c = getopt_long (argc, argv, "hVH:u:p:v:c:w:t:", longopts,
477+ c = getopt_long (argc, argv, "hVTH:u:p:v:c:w:t:", longopts,
478 &option);
479
480 if (c == -1 || c == EOF)
481@@ -475,6 +488,9 @@
482 usage2 ("Invalid host name", optarg);
483 }
484 break;
485+ case 'T': /* FIXME: to be improved (ie "-T C" for Celsius or "-T F" for Farenheit) */
486+ temp_output_c = 1;
487+ break;
488 case 'u': /* ups name */
489 ups_name = optarg;
490 break;
491@@ -525,7 +541,7 @@
492 }
493 break;
494 case 'V': /* version */
495- print_revision (progname, "$Revision: 1.14 $");
496+ print_revision (progname, revision);
497 exit (STATE_OK);
498 case 'h': /* help */
499 print_help ();
500@@ -548,20 +564,17 @@
501 }
502
503
504-
505-
506-
507 int
508 validate_arguments (void)
509 {
510- return OK;
511+ if (! ups_name) {
512+ printf ("Error : no ups indicated\n");
513+ return ERROR;
514+ }
515+ return OK;
516 }
517
518
519-
520-
521-
522-
523 void
524 print_help (void)
525 {
526@@ -571,11 +584,13 @@
527 print_revision (progname, revision);
528
529 printf (_("Copyright (c) 2000 Tom Shields"));
530+ printf (_("Copyright (c) 2004 Alain Richard <alain.richard@equation.fr>\n"));
531+ printf (_("Copyright (c) 2004 Arnaud Quette <arnaud.quette@mgeups.com>\n"));
532 printf (_(COPYRIGHT), copyright, email);
533
534 printf (_("This plugin tests the UPS service on the specified host.\n\
535-Network UPS Tools from www.exploits.org must be running for this plugin to\n\
536-work.\n\n"));
537+Network UPS Tools from www.networkupstools.org must be running for this \n\
538+plugin to work.\n\n"));
539
540 print_usage ();
541
542@@ -587,6 +602,9 @@
543 -u, --ups=STRING\n\
544 Name of UPS\n"));
545
546+ printf (_("-T, --temperature\n\
547+ Output of temperatures in Celsius\n"));
548+
549 printf (_(UT_WARN_CRIT));
550
551 printf (_(UT_TIMEOUT), DEFAULT_SOCKET_TIMEOUT);
552@@ -607,10 +625,10 @@
553 will have to use the [ups] option to specify which UPS to check.\n\n"));
554
555 printf (_("Notes:\n\n\
556-This plugin requires that the UPSD daemon distributed with Russel Kroll's\n\
557-Smart UPS Tools be installed on the remote host. If you do not have the\n\
558+This plugin requires that the UPSD daemon distributed with the NUT - Network\n\
559+UPS Tools to be installed on the remote host. If you do not have the\n\
560 package installed on your system, you can download it from\n\
561-http://www.exploits.org/nut\n\n"));
562+http://www.networkupstools.org\n\n"));
563
564 printf (_(UT_SUPPORT));
565 }
566@@ -622,7 +640,7 @@
567 print_usage (void)
568 {
569 printf (_("\
570-Usage: %s -H host [-e expect] [-p port] [-w warn] [-c crit]\n\
571- [-t timeout] [-v]\n"), progname);
572+Usage: %s -H host -u ups [-p port] [-v variable] [-wv warn_value] [-cv crit_value] [-to to_sec] [-T]\n"), progname);
573 printf (_(UT_HLP_VRS), progname, progname);
574 }
575+
576diff -ru nagiosplug/REQUIREMENTS nagiosplug_AQ/REQUIREMENTS
577--- nagiosplug/REQUIREMENTS 2004-04-29 13:12:20.000000000 +0200
578+++ nagiosplug_AQ/REQUIREMENTS 2004-10-01 12:42:55.000000000 +0200
579@@ -65,6 +65,9 @@
580 - Requires NSClient to run on the NT server to monitor
581 http://nsclient.ready2run.nl/
582
583+check_ups:
584+ - Requires Network UPS Tools (>= 1.4) to run on the server to monitor
585+ http://www.networkupstools.org/
586
587 OS Specific Issues
588 ------------------