diff options
Diffstat (limited to 'plugins/check_ups.c')
-rw-r--r-- | plugins/check_ups.c | 209 |
1 files changed, 92 insertions, 117 deletions
diff --git a/plugins/check_ups.c b/plugins/check_ups.c index b077d31f..499b9222 100644 --- a/plugins/check_ups.c +++ b/plugins/check_ups.c | |||
@@ -1,70 +1,97 @@ | |||
1 | /****************************************************************************** | 1 | /****************************************************************************** |
2 | * | 2 | |
3 | * CHECK_UPS.C | 3 | This program is free software; you can redistribute it and/or modify |
4 | * | 4 | it under the terms of the GNU General Public License as published by |
5 | * Program: UPS monitor plugin for Nagios | 5 | the Free Software Foundation; either version 2 of the License, or (at |
6 | * License: GPL | 6 | your option) any later version. |
7 | * Copyright (c) 1999 Ethan Galstad (nagios@nagios.org) | 7 | |
8 | * | 8 | This program is distributed in the hope that it will be useful, but |
9 | * Last Modified: $Date$ | 9 | WITHOUT ANY WARRANTY; without even the implied warranty of |
10 | * | 10 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
11 | * Command line: CHECK_UPS <host_address> [-u ups] [-p port] [-v variable] \ | 11 | General Public License for more details. |
12 | * [-wv warn_value] [-cv crit_value] [-to to_sec] | 12 | |
13 | * | 13 | You should have received a copy of the GNU General Public License |
14 | * Description: | 14 | along with this program; if not, write to the Free Software |
15 | * | 15 | Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. |
16 | 16 | ||
17 | * This plugin attempts to determine the status of an UPS | ||
18 | * (Uninterruptible Power Supply) on a remote host (or the local host) | ||
19 | * that is being monitored with Russel Kroll's "Smarty UPS Tools" | ||
20 | * package. If the UPS is online or calibrating, the plugin will | ||
21 | * return an OK state. If the battery is on it will return a WARNING | ||
22 | * state. If the UPS is off or has a low battery the plugin will | ||
23 | * return a CRITICAL state. You may also specify a variable to check | ||
24 | * (such as temperature, utility voltage, battery load, etc.) as well | ||
25 | * as warning and critical thresholds for the value of that variable. | ||
26 | * If the remote host has multiple UPS that are being monitored you | ||
27 | * will have to use the [ups] option to specify which UPS to check. | ||
28 | * | ||
29 | * Notes: | ||
30 | * | ||
31 | * This plugin requires that the UPSD daemon distributed with Russel | ||
32 | * Kroll's "Smart UPS Tools" be installed on the remote host. If you | ||
33 | * don't have the package installed on your system, you can download | ||
34 | * it from http://www.exploits.org/nut | ||
35 | * | ||
36 | * License Information: | ||
37 | * | ||
38 | * This program is free software; you can redistribute it and/or modify | ||
39 | * it under the terms of the GNU General Public License as published by | ||
40 | * the Free Software Foundation; either version 2 of the License, or | ||
41 | * (at your option) any later version. | ||
42 | * | ||
43 | * This program is distributed in the hope that it will be useful, | ||
44 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
45 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
46 | * GNU General Public License for more details. | ||
47 | * | ||
48 | * You should have received a copy of the GNU General Public License | ||
49 | * along with this program; if not, write to the Free Software | ||
50 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | ||
51 | * | ||
52 | ******************************************************************************/ | 17 | ******************************************************************************/ |
53 | 18 | ||
54 | #include "config.h" | 19 | const char *progname = "check_ups"; |
20 | const char *revision = "$Revision$"; | ||
21 | const char *copyright = "2000-2002"; | ||
22 | const char *email = "nagiosplug-devel@lists.sourceforge.net"; | ||
23 | |||
55 | #include "common.h" | 24 | #include "common.h" |
56 | #include "netutils.h" | 25 | #include "netutils.h" |
57 | #include "utils.h" | 26 | #include "utils.h" |
58 | 27 | ||
59 | const char *progname = "check_ups"; | 28 | enum { |
60 | #define REVISION "$Revision$" | 29 | PORT = 3493 |
61 | #define COPYRIGHT "1999-2002" | 30 | }; |
62 | #define AUTHOR "Ethan Galstad" | 31 | |
63 | #define EMAIL "nagios@nagios.org" | 32 | void |
33 | print_usage (void) | ||
34 | { | ||
35 | printf (_("\ | ||
36 | Usage: %s -H host [-e expect] [-p port] [-w warn] [-c crit]\n\ | ||
37 | [-t timeout] [-v]\n"), progname); | ||
38 | printf (_(UT_HLP_VRS), progname, progname); | ||
39 | } | ||
40 | |||
41 | void | ||
42 | print_help (void) | ||
43 | { | ||
44 | char *myport; | ||
45 | asprintf (&myport, "%d", PORT); | ||
46 | |||
47 | print_revision (progname, revision); | ||
48 | |||
49 | printf (_("Copyright (c) 2000 Tom Shields")); | ||
50 | printf (_(COPYRIGHT), copyright, email); | ||
51 | |||
52 | printf (_("This plugin tests the UPS service on the specified host.\n\ | ||
53 | Network UPS Tools from www.exploits.org must be running for this plugin to\n\ | ||
54 | work.\n\n")); | ||
55 | |||
56 | print_usage (); | ||
57 | |||
58 | printf (_(UT_HELP_VRSN)); | ||
59 | |||
60 | printf (_(UT_HOST_PORT), 'p', myport); | ||
61 | |||
62 | printf (_("\ | ||
63 | -u, --ups=STRING\n\ | ||
64 | Name of UPS\n")); | ||
65 | |||
66 | printf (_(UT_WARN_CRIT)); | ||
64 | 67 | ||
65 | #define CHECK_NONE 0 | 68 | printf (_(UT_TIMEOUT), DEFAULT_SOCKET_TIMEOUT); |
66 | 69 | ||
67 | #define PORT 3493 | 70 | printf (_(UT_VERBOSE)); |
71 | |||
72 | printf (_("\ | ||
73 | This plugin attempts to determine the status of a UPS (Uninterruptible Power\n\ | ||
74 | Supply) on a local or remote host. If the UPS is online or calibrating, the\n\ | ||
75 | plugin will return an OK state. If the battery is on it will return a WARNING\n\ | ||
76 | state. If the UPS is off or has a low battery the plugin will return a CRITICAL\n\ | ||
77 | state.\n\n")); | ||
78 | |||
79 | printf (_("\ | ||
80 | You may also specify a variable to check [such as temperature, utility voltage,\n\ | ||
81 | battery load, etc.] as well as warning and critical thresholds for the value of\n\ | ||
82 | that variable. If the remote host has multiple UPS that are being monitored you\n\ | ||
83 | will have to use the [ups] option to specify which UPS to check.\n\n")); | ||
84 | |||
85 | printf (_("Notes:\n\n\ | ||
86 | This plugin requires that the UPSD daemon distributed with Russel Kroll's\n\ | ||
87 | Smart UPS Tools be installed on the remote host. If you do not have the\n\ | ||
88 | package installed on your system, you can download it from\n\ | ||
89 | http://www.exploits.org/nut\n\n")); | ||
90 | |||
91 | printf (_(UT_SUPPORT)); | ||
92 | } | ||
93 | |||
94 | #define CHECK_NONE 0 | ||
68 | 95 | ||
69 | #define UPS_NONE 0 /* no supported options */ | 96 | #define UPS_NONE 0 /* no supported options */ |
70 | #define UPS_UTILITY 1 /* supports utility line voltage */ | 97 | #define UPS_UTILITY 1 /* supports utility line voltage */ |
@@ -85,18 +112,18 @@ const char *progname = "check_ups"; | |||
85 | int server_port = PORT; | 112 | int server_port = PORT; |
86 | char *server_address = "127.0.0.1"; | 113 | char *server_address = "127.0.0.1"; |
87 | char *ups_name = NULL; | 114 | char *ups_name = NULL; |
88 | double warning_value = 0.0L; | 115 | double warning_value = 0.0; |
89 | double critical_value = 0.0L; | 116 | double critical_value = 0.0; |
90 | int check_warning_value = FALSE; | 117 | int check_warning_value = FALSE; |
91 | int check_critical_value = FALSE; | 118 | int check_critical_value = FALSE; |
92 | int check_variable = UPS_NONE; | 119 | int check_variable = UPS_NONE; |
93 | int supported_options = UPS_NONE; | 120 | int supported_options = UPS_NONE; |
94 | int status = UPSSTATUS_NONE; | 121 | int status = UPSSTATUS_NONE; |
95 | 122 | ||
96 | double ups_utility_voltage = 0.0L; | 123 | double ups_utility_voltage = 0.0; |
97 | double ups_battery_percent = 0.0L; | 124 | double ups_battery_percent = 0.0; |
98 | double ups_load_percent = 0.0L; | 125 | double ups_load_percent = 0.0; |
99 | double ups_temperature = 0.0L; | 126 | double ups_temperature = 0.0; |
100 | char *ups_status = "N/A"; | 127 | char *ups_status = "N/A"; |
101 | 128 | ||
102 | int determine_status (void); | 129 | int determine_status (void); |
@@ -105,8 +132,6 @@ int get_ups_variable (const char *, char *, int); | |||
105 | 132 | ||
106 | int process_arguments (int, char **); | 133 | int process_arguments (int, char **); |
107 | int validate_arguments (void); | 134 | int validate_arguments (void); |
108 | void print_help (void); | ||
109 | void print_usage (void); | ||
110 | 135 | ||
111 | int | 136 | int |
112 | main (int argc, char **argv) | 137 | main (int argc, char **argv) |
@@ -115,7 +140,7 @@ main (int argc, char **argv) | |||
115 | char *message; | 140 | char *message; |
116 | char temp_buffer[MAX_INPUT_BUFFER]; | 141 | char temp_buffer[MAX_INPUT_BUFFER]; |
117 | 142 | ||
118 | double ups_utility_deviation = 0.0L; | 143 | double ups_utility_deviation = 0.0; |
119 | 144 | ||
120 | if (process_arguments (argc, argv) != OK) | 145 | if (process_arguments (argc, argv) != OK) |
121 | usage ("Invalid command arguments supplied\n"); | 146 | usage ("Invalid command arguments supplied\n"); |
@@ -556,53 +581,3 @@ validate_arguments (void) | |||
556 | { | 581 | { |
557 | return OK; | 582 | return OK; |
558 | } | 583 | } |
559 | |||
560 | |||
561 | |||
562 | |||
563 | |||
564 | void | ||
565 | print_help (void) | ||
566 | { | ||
567 | print_revision (progname, "$Revision$"); | ||
568 | printf | ||
569 | ("Copyright (c) 2000 Tom Shields/Karl DeBisschop\n\n" | ||
570 | "This plugin tests the UPS service on the specified host.\n" | ||
571 | "Newtork UPS Tools for www.exploits.org must be running for this plugin to work.\n\n"); | ||
572 | print_usage (); | ||
573 | printf | ||
574 | ("\nOptions:\n" | ||
575 | " -H, --hostname=STRING or IPADDRESS\n" | ||
576 | " Check server on the indicated host\n" | ||
577 | " -p, --port=INTEGER\n" | ||
578 | " Make connection on the indicated port (default: %d)\n" | ||
579 | " -u, --ups=STRING\n" | ||
580 | " Name of UPS\n" | ||
581 | " -w, --warning=INTEGER\n" | ||
582 | " Seconds necessary to result in a warning status\n" | ||
583 | " -c, --critical=INTEGER\n" | ||
584 | " Seconds necessary to result in a critical status\n" | ||
585 | " -t, --timeout=INTEGER\n" | ||
586 | " Seconds before connection attempt times out (default: %d)\n" | ||
587 | " -v, --verbose\n" | ||
588 | " Print extra information (command-line use only)\n" | ||
589 | " -h, --help\n" | ||
590 | " Print detailed help screen\n" | ||
591 | " -V, --version\n" | ||
592 | " Print version information\n\n", PORT, DEFAULT_SOCKET_TIMEOUT); | ||
593 | support (); | ||
594 | } | ||
595 | |||
596 | |||
597 | |||
598 | |||
599 | |||
600 | void | ||
601 | print_usage (void) | ||
602 | { | ||
603 | printf | ||
604 | ("Usage: %s -H host [-e expect] [-p port] [-w warn] [-c crit]\n" | ||
605 | " [-t timeout] [-v]\n" | ||
606 | " %s --help\n" | ||
607 | " %s --version\n", progname, progname, progname); | ||
608 | } | ||