diff options
Diffstat (limited to 'plugins')
| -rw-r--r-- | plugins/check_ups.c | 104 |
1 files changed, 51 insertions, 53 deletions
diff --git a/plugins/check_ups.c b/plugins/check_ups.c index e250ef9d..470e3be7 100644 --- a/plugins/check_ups.c +++ b/plugins/check_ups.c | |||
| @@ -31,7 +31,7 @@ | |||
| 31 | * This plugin requires that the UPSD daemon distributed with Russel | 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 | 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 | 33 | * don't have the package installed on your system, you can download |
| 34 | * it from http://www.exploits.org/~rkroll/smartupstools | 34 | * it from http://www.exploits.org/nut |
| 35 | * | 35 | * |
| 36 | * License Information: | 36 | * License Information: |
| 37 | * | 37 | * |
| @@ -66,20 +66,21 @@ | |||
| 66 | 66 | ||
| 67 | #define PORT 3305 | 67 | #define PORT 3305 |
| 68 | 68 | ||
| 69 | #define UPS_NONE 0 /* no supported options */ | 69 | #define UPS_NONE 0 /* no supported options */ |
| 70 | #define UPS_UTILITY 1 /* supports utility line voltage */ | 70 | #define UPS_UTILITY 1 /* supports utility line voltage */ |
| 71 | #define UPS_BATTPCT 2 /* supports percent battery remaining */ | 71 | #define UPS_BATTPCT 2 /* supports percent battery remaining */ |
| 72 | #define UPS_STATUS 4 /* supports UPS status */ | 72 | #define UPS_STATUS 4 /* supports UPS status */ |
| 73 | #define UPS_TEMP 8 /* supports UPS temperature */ | 73 | #define UPS_TEMP 8 /* supports UPS temperature */ |
| 74 | #define UPS_LOADPCT 16 /* supports load percent */ | 74 | #define UPS_LOADPCT 16 /* supports load percent */ |
| 75 | 75 | ||
| 76 | #define UPSSTATUS_NONE 0 | 76 | #define UPSSTATUS_NONE 0 |
| 77 | #define UPSSTATUS_OFF 1 | 77 | #define UPSSTATUS_OFF 1 |
| 78 | #define UPSSTATUS_OL 2 | 78 | #define UPSSTATUS_OL 2 |
| 79 | #define UPSSTATUS_OB 4 | 79 | #define UPSSTATUS_OB 4 |
| 80 | #define UPSSTATUS_LB 8 | 80 | #define UPSSTATUS_LB 8 |
| 81 | #define UPSSTATUS_CAL 16 | 81 | #define UPSSTATUS_CAL 16 |
| 82 | #define UPSSTATUS_UNKOWN 32 | 82 | #define UPSSTATUS_RB 32 /*Replace Battery */ |
| 83 | #define UPSSTATUS_UNKOWN 64 | ||
| 83 | 84 | ||
| 84 | int server_port = PORT; | 85 | int server_port = PORT; |
| 85 | char *server_address = "127.0.0.1"; | 86 | char *server_address = "127.0.0.1"; |
| @@ -96,7 +97,7 @@ double ups_utility_voltage = 0.0L; | |||
| 96 | double ups_battery_percent = 0.0L; | 97 | double ups_battery_percent = 0.0L; |
| 97 | double ups_load_percent = 0.0L; | 98 | double ups_load_percent = 0.0L; |
| 98 | double ups_temperature = 0.0L; | 99 | double ups_temperature = 0.0L; |
| 99 | char ups_status[MAX_INPUT_BUFFER] = "N/A"; | 100 | char *ups_status = "N/A"; |
| 100 | 101 | ||
| 101 | int determine_status (void); | 102 | int determine_status (void); |
| 102 | int determine_supported_vars (void); | 103 | int determine_supported_vars (void); |
| @@ -111,7 +112,7 @@ int | |||
| 111 | main (int argc, char **argv) | 112 | main (int argc, char **argv) |
| 112 | { | 113 | { |
| 113 | int result = STATE_OK; | 114 | int result = STATE_OK; |
| 114 | char output_message[MAX_INPUT_BUFFER]; | 115 | char *message; |
| 115 | char temp_buffer[MAX_INPUT_BUFFER]; | 116 | char temp_buffer[MAX_INPUT_BUFFER]; |
| 116 | 117 | ||
| 117 | double ups_utility_deviation = 0.0L; | 118 | double ups_utility_deviation = 0.0L; |
| @@ -134,35 +135,39 @@ main (int argc, char **argv) | |||
| 134 | 135 | ||
| 135 | if (determine_status () != OK) | 136 | if (determine_status () != OK) |
| 136 | return STATE_CRITICAL; | 137 | return STATE_CRITICAL; |
| 137 | ups_status[0] = 0; | 138 | asprintf (&ups_status, ""); |
| 138 | result = STATE_OK; | 139 | result = STATE_OK; |
| 139 | 140 | ||
| 140 | if (status & UPSSTATUS_OFF) { | 141 | if (status & UPSSTATUS_OFF) { |
| 141 | strcpy (ups_status, "Off"); | 142 | asprintf (&ups_status, "Off"); |
| 142 | result = STATE_CRITICAL; | 143 | result = STATE_CRITICAL; |
| 143 | } | 144 | } |
| 144 | else if ((status & (UPSSTATUS_OB | UPSSTATUS_LB)) == | 145 | else if ((status & (UPSSTATUS_OB | UPSSTATUS_LB)) == |
| 145 | (UPSSTATUS_OB | UPSSTATUS_LB)) { | 146 | (UPSSTATUS_OB | UPSSTATUS_LB)) { |
| 146 | strcpy (ups_status, "On Battery, Low Battery"); | 147 | asprintf (&ups_status, "On Battery, Low Battery"); |
| 147 | result = STATE_CRITICAL; | 148 | result = STATE_CRITICAL; |
| 148 | } | 149 | } |
| 149 | else { | 150 | else { |
| 150 | if (status & UPSSTATUS_OL) { | 151 | if (status & UPSSTATUS_OL) { |
| 151 | strcat (ups_status, "Online"); | 152 | asprintf (&ups_status, "%s%s", ups_status, "Online"); |
| 152 | } | 153 | } |
| 153 | if (status & UPSSTATUS_OB) { | 154 | if (status & UPSSTATUS_OB) { |
| 154 | strcat (ups_status, "On Battery"); | 155 | asprintf (&ups_status, "%s%s", ups_status, "On Battery"); |
| 155 | result = STATE_WARNING; | 156 | result = STATE_WARNING; |
| 156 | } | 157 | } |
| 157 | if (status & UPSSTATUS_LB) { | 158 | if (status & UPSSTATUS_LB) { |
| 158 | strcat (ups_status, ", Low Battery"); | 159 | asprintf (&ups_status, "%s%s", ups_status, ", Low Battery"); |
| 159 | result = STATE_WARNING; | 160 | result = STATE_WARNING; |
| 160 | } | 161 | } |
| 161 | if (status & UPSSTATUS_CAL) { | 162 | if (status & UPSSTATUS_CAL) { |
| 162 | strcat (ups_status, ", Calibrating"); | 163 | asprintf (&ups_status, "%s%s", ups_status, ", Calibrating"); |
| 164 | } | ||
| 165 | if (status & UPSSTATUS_RB) { | ||
| 166 | asprintf (&ups_status, "%s%s", ups_status, ", Replace Battery"); | ||
| 167 | result = STATE_WARNING; | ||
| 163 | } | 168 | } |
| 164 | if (status & UPSSTATUS_UNKOWN) { | 169 | if (status & UPSSTATUS_UNKOWN) { |
| 165 | strcat (ups_status, ", Unknown"); | 170 | asprintf (&ups_status, "%s%s", ups_status, ", Unknown"); |
| 166 | } | 171 | } |
| 167 | } | 172 | } |
| 168 | } | 173 | } |
| @@ -248,36 +253,27 @@ main (int argc, char **argv) | |||
| 248 | alarm (0); | 253 | alarm (0); |
| 249 | 254 | ||
| 250 | 255 | ||
| 251 | sprintf (output_message, "UPS %s - ", | 256 | asprintf (&message, "UPS %s - ", (result == STATE_OK) ? "ok" : "problem"); |
| 252 | (result == STATE_OK) ? "ok" : "problem"); | ||
| 253 | 257 | ||
| 254 | if (supported_options & UPS_STATUS) { | 258 | if (supported_options & UPS_STATUS) |
| 255 | sprintf (temp_buffer, "Status=%s ", ups_status); | 259 | asprintf (&message, "%sStatus=%s ", message, ups_status); |
| 256 | strcat (output_message, temp_buffer); | 260 | |
| 257 | } | 261 | if (supported_options & UPS_UTILITY) |
| 258 | if (supported_options & UPS_UTILITY) { | 262 | asprintf (&message, "%sUtility=%3.1fV ", message, ups_utility_voltage); |
| 259 | sprintf (temp_buffer, "Utility=%3.1fV ", ups_utility_voltage); | 263 | |
| 260 | strcat (output_message, temp_buffer); | 264 | if (supported_options & UPS_BATTPCT) |
| 261 | } | 265 | asprintf (&message, "%sBatt=%3.1f%% ", message, ups_battery_percent); |
| 262 | if (supported_options & UPS_BATTPCT) { | 266 | |
| 263 | sprintf (temp_buffer, "Batt=%3.1f%% ", ups_battery_percent); | 267 | if (supported_options & UPS_LOADPCT) |
| 264 | strcat (output_message, temp_buffer); | 268 | asprintf (&message, "%sLoad=%3.1f%% ", message, ups_load_percent); |
| 265 | } | 269 | |
| 266 | if (supported_options & UPS_LOADPCT) { | 270 | if (supported_options & UPS_TEMP) |
| 267 | sprintf (temp_buffer, "Load=%3.1f%% ", ups_load_percent); | 271 | asprintf (&message, "%sTemp=%3.1fF", message, ups_temperature); |
| 268 | strcat (output_message, temp_buffer); | 272 | |
| 269 | } | 273 | if (supported_options == UPS_NONE) |
| 270 | if (supported_options & UPS_TEMP) { | 274 | asprintf (&message, "UPS does not support any available options\n"); |
| 271 | sprintf (temp_buffer, "Temp=%3.1fF", ups_temperature); | ||
| 272 | strcat (output_message, temp_buffer); | ||
| 273 | } | ||
| 274 | if (supported_options == UPS_NONE) { | ||
| 275 | sprintf (temp_buffer, | ||
| 276 | "UPS does not appear to support any available options\n"); | ||
| 277 | strcat (output_message, temp_buffer); | ||
| 278 | } | ||
| 279 | 275 | ||
| 280 | printf ("%s\n", output_message); | 276 | printf ("%s\n", message); |
| 281 | 277 | ||
| 282 | return result; | 278 | return result; |
| 283 | } | 279 | } |
| @@ -313,6 +309,8 @@ determine_status (void) | |||
| 313 | status |= UPSSTATUS_LB; | 309 | status |= UPSSTATUS_LB; |
| 314 | else if (!strcmp (ptr, "CAL")) | 310 | else if (!strcmp (ptr, "CAL")) |
| 315 | status |= UPSSTATUS_CAL; | 311 | status |= UPSSTATUS_CAL; |
| 312 | else if (!strcmp (ptr, "RB")) | ||
| 313 | status |= UPSSTATUS_RB; | ||
| 316 | else | 314 | else |
| 317 | status |= UPSSTATUS_UNKOWN; | 315 | status |= UPSSTATUS_UNKOWN; |
| 318 | } | 316 | } |
