diff --git a/plugins/check_ups.c b/plugins/check_ups.c
index 7e7b36a4b01882e3b429d148618b2679fd19934c..e11332fc6593890abee2aaa7b0cf2b9eb174e8d3 100644 (file)
--- a/plugins/check_ups.c
+++ b/plugins/check_ups.c
/******************************************************************************
/******************************************************************************
+ check_ups
+
+ Program: Network UPS Tools plugin for Nagios
+ License: GPL
+ Copyright (c) 2000 Tom Shields
+ 2004 Alain Richard <alain.richard@equation.fr>
+ 2004 Arnaud Quette <arnaud.quette@mgeups.com>
+
+
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or (at
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or (at
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ $Id$
+
******************************************************************************/
const char *progname = "check_ups";
const char *revision = "$Revision$";
******************************************************************************/
const char *progname = "check_ups";
const char *revision = "$Revision$";
-const char *copyright = "2000-2002";
+const char *copyright = "2000-2004";
const char *email = "nagiosplug-devel@lists.sourceforge.net";
#include "common.h"
const char *email = "nagiosplug-devel@lists.sourceforge.net";
#include "common.h"
#define UPS_TEMP 8 /* supports UPS temperature */
#define UPS_LOADPCT 16 /* supports load percent */
#define UPS_TEMP 8 /* supports UPS temperature */
#define UPS_LOADPCT 16 /* supports load percent */
-#define UPSSTATUS_NONE 0
-#define UPSSTATUS_OFF 1
-#define UPSSTATUS_OL 2
-#define UPSSTATUS_OB 4
-#define UPSSTATUS_LB 8
-#define UPSSTATUS_CAL 16
-#define UPSSTATUS_RB 32 /*Replace Battery */
-#define UPSSTATUS_UNKOWN 64
+#define UPSSTATUS_NONE 0
+#define UPSSTATUS_OFF 1
+#define UPSSTATUS_OL 2
+#define UPSSTATUS_OB 4
+#define UPSSTATUS_LB 8
+#define UPSSTATUS_CAL 16
+#define UPSSTATUS_RB 32 /*Replace Battery */
+#define UPSSTATUS_BYPASS 64
+#define UPSSTATUS_OVER 128
+#define UPSSTATUS_TRIM 256
+#define UPSSTATUS_BOOST 512
+#define UPSSTATUS_CHRG 1024
+#define UPSSTATUS_DISCHRG 2048
+#define UPSSTATUS_UNKOWN 4096
+
+enum { NOSUCHVAR = ERROR-1 };
int server_port = PORT;
char *server_address;
char *ups_name = NULL;
double warning_value = 0.0;
double critical_value = 0.0;
int server_port = PORT;
char *server_address;
char *ups_name = NULL;
double warning_value = 0.0;
double critical_value = 0.0;
-int check_warning_value = FALSE;
-int check_critical_value = FALSE;
+int check_warn = FALSE;
+int check_crit = FALSE;
int check_variable = UPS_NONE;
int supported_options = UPS_NONE;
int status = UPSSTATUS_NONE;
int check_variable = UPS_NONE;
int supported_options = UPS_NONE;
int status = UPSSTATUS_NONE;
double ups_load_percent = 0.0;
double ups_temperature = 0.0;
char *ups_status;
double ups_load_percent = 0.0;
double ups_temperature = 0.0;
char *ups_status;
+int temp_output_c = 0;
int determine_status (void);
int determine_status (void);
-int determine_supported_vars (void);
int get_ups_variable (const char *, char *, size_t);
int process_arguments (int, char **);
int get_ups_variable (const char *, char *, size_t);
int process_arguments (int, char **);
int
main (int argc, char **argv)
{
int
main (int argc, char **argv)
{
- int result = STATE_OK;
+ int result = STATE_UNKNOWN;
char *message;
char *message;
+ char *data;
char temp_buffer[MAX_INPUT_BUFFER];
char temp_buffer[MAX_INPUT_BUFFER];
-
double ups_utility_deviation = 0.0;
double ups_utility_deviation = 0.0;
+ int res;
+
+ setlocale (LC_ALL, "");
+ bindtextdomain (PACKAGE, LOCALEDIR);
+ textdomain (PACKAGE);
+
ups_status = strdup ("N/A");
ups_status = strdup ("N/A");
+ data = strdup ("");
+ message = strdup ("");
- if (process_arguments (argc, argv) != OK)
- usage ("Invalid command arguments supplied\n");
+ if (process_arguments (argc, argv) == ERROR)
+ usage4 (_("Could not parse arguments"));
/* initialize alarm signal handling */
signal (SIGALRM, socket_timeout_alarm_handler);
/* initialize alarm signal handling */
signal (SIGALRM, socket_timeout_alarm_handler);
/* set socket timeout */
alarm (socket_timeout);
/* set socket timeout */
alarm (socket_timeout);
- /* determine what variables the UPS supports */
- if (determine_supported_vars () != OK)
- return STATE_CRITICAL;
-
/* get the ups status if possible */
/* get the ups status if possible */
+ if (determine_status () != OK)
+ return STATE_CRITICAL;
if (supported_options & UPS_STATUS) {
if (supported_options & UPS_STATUS) {
- if (determine_status () != OK)
- return STATE_CRITICAL;
ups_status = strdup ("");
result = STATE_OK;
ups_status = strdup ("");
result = STATE_OK;
}
else if ((status & (UPSSTATUS_OB | UPSSTATUS_LB)) ==
(UPSSTATUS_OB | UPSSTATUS_LB)) {
}
else if ((status & (UPSSTATUS_OB | UPSSTATUS_LB)) ==
(UPSSTATUS_OB | UPSSTATUS_LB)) {
- asprintf (&ups_status, "On Battery, Low Battery");
+ asprintf (&ups_status, _("On Battery, Low Battery"));
result = STATE_CRITICAL;
}
else {
if (status & UPSSTATUS_OL) {
result = STATE_CRITICAL;
}
else {
if (status & UPSSTATUS_OL) {
- asprintf (&ups_status, "%s%s", ups_status, "Online");
+ asprintf (&ups_status, "%s%s", ups_status, _("Online"));
}
if (status & UPSSTATUS_OB) {
}
if (status & UPSSTATUS_OB) {
- asprintf (&ups_status, "%s%s", ups_status, "On Battery");
+ asprintf (&ups_status, "%s%s", ups_status, _("On Battery"));
result = STATE_WARNING;
}
if (status & UPSSTATUS_LB) {
result = STATE_WARNING;
}
if (status & UPSSTATUS_LB) {
- asprintf (&ups_status, "%s%s", ups_status, ", Low Battery");
+ asprintf (&ups_status, "%s%s", ups_status, _(", Low Battery"));
result = STATE_WARNING;
}
if (status & UPSSTATUS_CAL) {
result = STATE_WARNING;
}
if (status & UPSSTATUS_CAL) {
- asprintf (&ups_status, "%s%s", ups_status, ", Calibrating");
+ asprintf (&ups_status, "%s%s", ups_status, _(", Calibrating"));
}
if (status & UPSSTATUS_RB) {
}
if (status & UPSSTATUS_RB) {
- asprintf (&ups_status, "%s%s", ups_status, ", Replace Battery");
+ asprintf (&ups_status, "%s%s", ups_status, _(", Replace Battery"));
result = STATE_WARNING;
}
result = STATE_WARNING;
}
+ if (status & UPSSTATUS_BYPASS) {
+ asprintf (&ups_status, "%s%s", ups_status, _(", On Bypass"));
+ }
+ if (status & UPSSTATUS_OVER) {
+ asprintf (&ups_status, "%s%s", ups_status, _(", Overload"));
+ }
+ if (status & UPSSTATUS_TRIM) {
+ asprintf (&ups_status, "%s%s", ups_status, _(", Trimming"));
+ }
+ if (status & UPSSTATUS_BOOST) {
+ asprintf (&ups_status, "%s%s", ups_status, _(", Boosting"));
+ }
+ if (status & UPSSTATUS_CHRG) {
+ asprintf (&ups_status, "%s%s", ups_status, _(", Charging"));
+ }
+ if (status & UPSSTATUS_DISCHRG) {
+ asprintf (&ups_status, "%s%s", ups_status, _(", Discharging"));
+ }
if (status & UPSSTATUS_UNKOWN) {
if (status & UPSSTATUS_UNKOWN) {
- asprintf (&ups_status, "%s%s", ups_status, ", Unknown");
+ asprintf (&ups_status, "%s%s", ups_status, _(", Unknown"));
}
}
}
}
+ asprintf (&message, "%sStatus=%s ", message, ups_status);
}
/* get the ups utility voltage if possible */
}
/* get the ups utility voltage if possible */
- if (supported_options & UPS_UTILITY) {
-
- if (get_ups_variable ("UTILITY", temp_buffer, sizeof (temp_buffer)) != OK)
- return STATE_CRITICAL;
+ res=get_ups_variable ("input.voltage", temp_buffer, sizeof (temp_buffer));
+ if (res == NOSUCHVAR) supported_options &= ~UPS_UTILITY;
+ else if (res != OK)
+ return STATE_CRITICAL;
+ else {
+ supported_options |= UPS_UTILITY;
ups_utility_voltage = atof (temp_buffer);
ups_utility_voltage = atof (temp_buffer);
+ asprintf (&message, "%sUtility=%3.1fV ", message, ups_utility_voltage);
if (ups_utility_voltage > 120.0)
ups_utility_deviation = 120.0 - ups_utility_voltage;
if (ups_utility_voltage > 120.0)
ups_utility_deviation = 120.0 - ups_utility_voltage;
ups_utility_deviation = ups_utility_voltage - 120.0;
if (check_variable == UPS_UTILITY) {
ups_utility_deviation = ups_utility_voltage - 120.0;
if (check_variable == UPS_UTILITY) {
- if (check_critical_value == TRUE
- && ups_utility_deviation >= critical_value) result = STATE_CRITICAL;
- else if (check_warning_value == TRUE
- && ups_utility_deviation >= warning_value
- && result < STATE_WARNING) result = STATE_WARNING;
+ if (check_crit==TRUE && ups_utility_deviation>=critical_value) {
+ result = STATE_CRITICAL;
+ }
+ else if (check_warn==TRUE && ups_utility_deviation>=warning_value) {
+ result = max_state (result, STATE_WARNING);
+ }
+ asprintf (&data, "%s",
+ perfdata ("voltage", (long)(1000*ups_utility_voltage), "mV",
+ check_warn, (long)(1000*warning_value),
+ check_crit, (long)(1000*critical_value),
+ TRUE, 0, FALSE, 0));
+ } else {
+ asprintf (&data, "%s",
+ perfdata ("voltage", (long)(1000*ups_utility_voltage), "mV",
+ FALSE, 0, FALSE, 0, TRUE, 0, FALSE, 0));
}
}
/* get the ups battery percent if possible */
}
}
/* get the ups battery percent if possible */
- if (supported_options & UPS_BATTPCT) {
-
- if (get_ups_variable ("BATTPCT", temp_buffer, sizeof (temp_buffer)) != OK)
- return STATE_CRITICAL;
-
+ res=get_ups_variable ("battery.charge", temp_buffer, sizeof (temp_buffer));
+ if (res == NOSUCHVAR) supported_options &= ~UPS_BATTPCT;
+ else if ( res != OK)
+ return STATE_CRITICAL;
+ else {
+ supported_options |= UPS_BATTPCT;
ups_battery_percent = atof (temp_buffer);
ups_battery_percent = atof (temp_buffer);
+ asprintf (&message, "%sBatt=%3.1f%% ", message, ups_battery_percent);
if (check_variable == UPS_BATTPCT) {
if (check_variable == UPS_BATTPCT) {
- if (check_critical_value == TRUE
- && ups_battery_percent <= critical_value) result = STATE_CRITICAL;
- else if (check_warning_value == TRUE
- && ups_battery_percent <= warning_value
- && result < STATE_WARNING) result = STATE_WARNING;
+ if (check_crit==TRUE && ups_battery_percent <= critical_value) {
+ result = STATE_CRITICAL;
+ }
+ else if (check_warn==TRUE && ups_battery_percent<=warning_value) {
+ result = max_state (result, STATE_WARNING);
+ }
+ asprintf (&data, "%s %s", data,
+ perfdata ("battery", (long)ups_battery_percent, "%",
+ check_warn, (long)(1000*warning_value),
+ check_crit, (long)(1000*critical_value),
+ TRUE, 0, TRUE, 100));
+ } else {
+ asprintf (&data, "%s %s", data,
+ perfdata ("battery", (long)ups_battery_percent, "%",
+ FALSE, 0, FALSE, 0, TRUE, 0, TRUE, 100));
}
}
/* get the ups load percent if possible */
}
}
/* get the ups load percent if possible */
- if (supported_options & UPS_LOADPCT) {
-
- if (get_ups_variable ("LOADPCT", temp_buffer, sizeof (temp_buffer)) != OK)
- return STATE_CRITICAL;
-
+ res=get_ups_variable ("ups.load", temp_buffer, sizeof (temp_buffer));
+ if ( res == NOSUCHVAR ) supported_options &= ~UPS_LOADPCT;
+ else if ( res != OK)
+ return STATE_CRITICAL;
+ else {
+ supported_options |= UPS_LOADPCT;
ups_load_percent = atof (temp_buffer);
ups_load_percent = atof (temp_buffer);
+ asprintf (&message, "%sLoad=%3.1f%% ", message, ups_load_percent);
if (check_variable == UPS_LOADPCT) {
if (check_variable == UPS_LOADPCT) {
- if (check_critical_value == TRUE && ups_load_percent >= critical_value)
+ if (check_crit==TRUE && ups_load_percent>=critical_value) {
result = STATE_CRITICAL;
result = STATE_CRITICAL;
- else if (check_warning_value == TRUE
- && ups_load_percent >= warning_value && result < STATE_WARNING)
- result = STATE_WARNING;
+ }
+ else if (check_warn==TRUE && ups_load_percent>=warning_value) {
+ result = max_state (result, STATE_WARNING);
+ }
+ asprintf (&data, "%s %s", data,
+ perfdata ("load", (long)ups_load_percent, "%",
+ check_warn, (long)(1000*warning_value),
+ check_crit, (long)(1000*critical_value),
+ TRUE, 0, TRUE, 100));
+ } else {
+ asprintf (&data, "%s %s", data,
+ perfdata ("load", (long)ups_load_percent, "%",
+ FALSE, 0, FALSE, 0, TRUE, 0, TRUE, 100));
}
}
/* get the ups temperature if possible */
}
}
/* get the ups temperature if possible */
- if (supported_options & UPS_TEMP) {
-
- if (get_ups_variable ("UPSTEMP", temp_buffer, sizeof (temp_buffer)) != OK)
- return STATE_CRITICAL;
-
- ups_temperature = (atof (temp_buffer) * 1.8) + 32;
+ res=get_ups_variable ("ups.temperature", temp_buffer, sizeof (temp_buffer));
+ if ( res == NOSUCHVAR ) supported_options &= ~UPS_TEMP;
+ else if ( res != OK)
+ return STATE_CRITICAL;
+ else {
+ supported_options |= UPS_TEMP;
+ if (temp_output_c) {
+ ups_temperature = atof (temp_buffer);
+ asprintf (&message, "%sTemp=%3.1fC", message, ups_temperature);
+ }
+ else {
+ ups_temperature = (atof (temp_buffer) * 1.8) + 32;
+ asprintf (&message, "%sTemp=%3.1fF", message, ups_temperature);
+ }
if (check_variable == UPS_TEMP) {
if (check_variable == UPS_TEMP) {
- if (check_critical_value == TRUE && ups_temperature >= critical_value)
+ if (check_crit==TRUE && ups_temperature>=critical_value) {
result = STATE_CRITICAL;
result = STATE_CRITICAL;
- else if (check_warning_value == TRUE && ups_temperature >= warning_value
- && result < STATE_WARNING)
- result = STATE_WARNING;
+ }
+ else if (check_warn == TRUE && ups_temperature>=warning_value) {
+ result = max_state (result, STATE_WARNING);
+ }
+ asprintf (&data, "%s %s", data,
+ perfdata ("temp", (long)ups_temperature, "degF",
+ check_warn, (long)(1000*warning_value),
+ check_crit, (long)(1000*critical_value),
+ TRUE, 0, FALSE, 0));
+ } else {
+ asprintf (&data, "%s %s", data,
+ perfdata ("temp", (long)ups_temperature, "degF",
+ FALSE, 0, FALSE, 0, TRUE, 0, FALSE, 0));
}
}
/* if the UPS does not support any options we are looking for, report an error */
}
}
/* if the UPS does not support any options we are looking for, report an error */
- if (supported_options == UPS_NONE)
+ if (supported_options == UPS_NONE) {
result = STATE_CRITICAL;
result = STATE_CRITICAL;
+ asprintf (&message, _("UPS does not support any available options\n"));
+ }
/* reset timeout */
alarm (0);
/* reset timeout */
alarm (0);
-
- asprintf (&message, "UPS %s - ", (result == STATE_OK) ? "ok" : "problem");
-
- if (supported_options & UPS_STATUS)
- asprintf (&message, "%sStatus=%s ", message, ups_status);
-
- if (supported_options & UPS_UTILITY)
- asprintf (&message, "%sUtility=%3.1fV ", message, ups_utility_voltage);
-
- if (supported_options & UPS_BATTPCT)
- asprintf (&message, "%sBatt=%3.1f%% ", message, ups_battery_percent);
-
- if (supported_options & UPS_LOADPCT)
- asprintf (&message, "%sLoad=%3.1f%% ", message, ups_load_percent);
-
- if (supported_options & UPS_TEMP)
- asprintf (&message, "%sTemp=%3.1fF", message, ups_temperature);
-
- if (supported_options == UPS_NONE)
- asprintf (&message, "UPS does not support any available options\n");
-
- printf ("%s\n", message);
-
+ printf ("UPS %s - %s|%s\n", state_text(result), message, data);
return result;
}
return result;
}
char recv_buffer[MAX_INPUT_BUFFER];
char temp_buffer[MAX_INPUT_BUFFER];
char *ptr;
char recv_buffer[MAX_INPUT_BUFFER];
char temp_buffer[MAX_INPUT_BUFFER];
char *ptr;
+ int res;
- if (get_ups_variable ("STATUS", recv_buffer, sizeof (recv_buffer)) !=
- STATE_OK) {
- printf ("Invalid response received from hostn");
+ res=get_ups_variable ("ups.status", recv_buffer, sizeof (recv_buffer));
+ if (res == NOSUCHVAR) return OK;
+ if (res != STATE_OK) {
+ printf (_("Invalid response received from host\n"));
return ERROR;
}
return ERROR;
}
- recv_buffer[strlen (recv_buffer) - 1] = 0;
+ supported_options |= UPS_STATUS;
strcpy (temp_buffer, recv_buffer);
for (ptr = (char *) strtok (temp_buffer, " "); ptr != NULL;
strcpy (temp_buffer, recv_buffer);
for (ptr = (char *) strtok (temp_buffer, " "); ptr != NULL;
status |= UPSSTATUS_CAL;
else if (!strcmp (ptr, "RB"))
status |= UPSSTATUS_RB;
status |= UPSSTATUS_CAL;
else if (!strcmp (ptr, "RB"))
status |= UPSSTATUS_RB;
+ else if (!strcmp (ptr, "BYPASS"))
+ status |= UPSSTATUS_BYPASS;
+ else if (!strcmp (ptr, "OVER"))
+ status |= UPSSTATUS_OVER;
+ else if (!strcmp (ptr, "TRIM"))
+ status |= UPSSTATUS_TRIM;
+ else if (!strcmp (ptr, "BOOST"))
+ status |= UPSSTATUS_BOOST;
+ else if (!strcmp (ptr, "CHRG"))
+ status |= UPSSTATUS_CHRG;
+ else if (!strcmp (ptr, "DISCHRG"))
+ status |= UPSSTATUS_DISCHRG;
else
status |= UPSSTATUS_UNKOWN;
}
else
status |= UPSSTATUS_UNKOWN;
}
}
}
-/* determines what options are supported by the UPS */
-int
-determine_supported_vars (void)
-{
- char send_buffer[MAX_INPUT_BUFFER];
- char recv_buffer[MAX_INPUT_BUFFER];
- char temp_buffer[MAX_INPUT_BUFFER];
- char *ptr;
-
-
- /* get the list of variables that this UPS supports */
- if (ups_name)
- sprintf (send_buffer, "LISTVARS %s\r\n", ups_name);
- else
- sprintf (send_buffer, "LISTVARS\r\n");
- if (process_tcp_request
- (server_address, server_port, send_buffer, recv_buffer,
- sizeof (recv_buffer)) != STATE_OK) {
- printf ("Invalid response received from host\n");
- return ERROR;
- }
-
- recv_buffer[strlen (recv_buffer) - 1] = 0;
-
- if (ups_name)
- ptr = recv_buffer + 5 + strlen (ups_name) + 2;
- else
- ptr = recv_buffer + 5;
-
- strcpy (temp_buffer, recv_buffer);
-
- for (ptr = (char *) strtok (temp_buffer, " "); ptr != NULL;
- ptr = (char *) strtok (NULL, " ")) {
- if (!strcmp (ptr, "UTILITY"))
- supported_options |= UPS_UTILITY;
- else if (!strcmp (ptr, "BATTPCT"))
- supported_options |= UPS_BATTPCT;
- else if (!strcmp (ptr, "LOADPCT"))
- supported_options |= UPS_LOADPCT;
- else if (!strcmp (ptr, "STATUS"))
- supported_options |= UPS_STATUS;
- else if (!strcmp (ptr, "UPSTEMP"))
- supported_options |= UPS_TEMP;
- }
-
- return OK;
-}
-
-
/* gets a variable value for a specific UPS */
int
get_ups_variable (const char *varname, char *buf, size_t buflen)
/* gets a variable value for a specific UPS */
int
get_ups_variable (const char *varname, char *buf, size_t buflen)
char temp_buffer[MAX_INPUT_BUFFER];
char send_buffer[MAX_INPUT_BUFFER];
char *ptr;
char temp_buffer[MAX_INPUT_BUFFER];
char send_buffer[MAX_INPUT_BUFFER];
char *ptr;
+ int len;
+ *buf=0;
+
/* create the command string to send to the UPS daemon */
/* create the command string to send to the UPS daemon */
- if (ups_name)
- sprintf (send_buffer, "REQ %s@%s\n", varname, ups_name);
- else
- sprintf (send_buffer, "REQ %s\n", varname);
+ sprintf (send_buffer, "GET VAR %s %s\n", ups_name, varname);
/* send the command to the daemon and get a response back */
if (process_tcp_request
(server_address, server_port, send_buffer, temp_buffer,
sizeof (temp_buffer)) != STATE_OK) {
/* send the command to the daemon and get a response back */
if (process_tcp_request
(server_address, server_port, send_buffer, temp_buffer,
sizeof (temp_buffer)) != STATE_OK) {
- printf ("Invalid response received from host\n");
+ printf (_("Invalid response received from host\n"));
return ERROR;
}
return ERROR;
}
- if (ups_name)
- ptr = temp_buffer + strlen (varname) + 5 + strlen (ups_name) + 1;
- else
- ptr = temp_buffer + strlen (varname) + 5;
-
- if (!strcmp (ptr, "NOT-SUPPORTED")) {
- printf ("Error: Variable '%s' is not supported\n", varname);
+ ptr = temp_buffer;
+ len = strlen(ptr);
+ if (len > 0 && ptr[len-1] == '\n') ptr[len-1]=0;
+ if (strcmp (ptr, "ERR UNKNOWN-UPS") == 0) {
+ printf (_("CRITICAL - no such ups '%s' on that host\n"), ups_name);
return ERROR;
}
return ERROR;
}
- if (!strcmp (ptr, "DATA-STALE")) {
- printf ("Error: UPS data is stale\n");
+ if (strcmp (ptr, "ERR VAR-NOT-SUPPORTED") == 0) {
+ /*printf ("Error: Variable '%s' is not supported\n", varname);*/
+ return NOSUCHVAR;
+ }
+
+ if (strcmp (ptr, "ERR DATA-STALE") == 0) {
+ printf (_("CRITICAL - UPS data is stale\n"));
return ERROR;
}
return ERROR;
}
- if (!strcmp (ptr, "UNKNOWN-UPS")) {
- if (ups_name)
- printf ("Error: UPS '%s' is unknown\n", ups_name);
- else
- printf ("Error: UPS is unknown\n");
+ if (strncmp (ptr, "ERR", 3) == 0) {
+ printf (_("Unknown error: %s\n"), ptr);
return ERROR;
}
return ERROR;
}
- strncpy (buf, ptr, buflen - 1);
- buf[buflen - 1] = 0;
+ ptr = temp_buffer + strlen (varname) + strlen (ups_name) + 6;
+ len = strlen(ptr);
+ if (len < 2 || ptr[0] != '"' || ptr[len-1] != '"') {
+ printf (_("Error: unable to parse variable\n"));
+ return ERROR;
+ }
+ strncpy (buf, ptr+1, len - 2);
+ buf[len - 2] = 0;
return OK;
}
return OK;
}
-
-
-
-/* Command line: CHECK_UPS <host_address> [-u ups] [-p port] [-v variable]
+/* Command line: CHECK_UPS -H <host_address> -u ups [-p port] [-v variable]
[-wv warn_value] [-cv crit_value] [-to to_sec] */
[-wv warn_value] [-cv crit_value] [-to to_sec] */
{"critical", required_argument, 0, 'c'},
{"warning", required_argument, 0, 'w'},
{"timeout", required_argument, 0, 't'},
{"critical", required_argument, 0, 'c'},
{"warning", required_argument, 0, 'w'},
{"timeout", required_argument, 0, 't'},
+ {"temperature", no_argument, 0, 'T'},
{"variable", required_argument, 0, 'v'},
{"version", no_argument, 0, 'V'},
{"help", no_argument, 0, 'h'},
{"variable", required_argument, 0, 'v'},
{"version", no_argument, 0, 'V'},
{"help", no_argument, 0, 'h'},
}
while (1) {
}
while (1) {
- c = getopt_long (argc, argv, "hVH:u:p:v:c:w:t:", longopts,
+ c = getopt_long (argc, argv, "hVTH:u:p:v:c:w:t:", longopts,
&option);
if (c == -1 || c == EOF)
&option);
if (c == -1 || c == EOF)
switch (c) {
case '?': /* help */
switch (c) {
case '?': /* help */
- usage3 ("Unknown option", optopt);
+ usage2 (_("Unknown argument"), optarg);
case 'H': /* hostname */
if (is_host (optarg)) {
server_address = optarg;
}
else {
case 'H': /* hostname */
if (is_host (optarg)) {
server_address = optarg;
}
else {
- usage2 ("Invalid host name", optarg);
+ usage2 (_("Invalid hostname/address"), optarg);
}
break;
}
break;
+ case 'T': /* FIXME: to be improved (ie "-T C" for Celsius or "-T F" for Farenheit) */
+ temp_output_c = 1;
+ break;
case 'u': /* ups name */
ups_name = optarg;
break;
case 'u': /* ups name */
ups_name = optarg;
break;
server_port = atoi (optarg);
}
else {
server_port = atoi (optarg);
}
else {
- usage2 ("Server port must be a positive integer", optarg);
+ usage2 (_("Port must be a positive integer"), optarg);
}
break;
case 'c': /* critical time threshold */
if (is_intnonneg (optarg)) {
critical_value = atoi (optarg);
}
break;
case 'c': /* critical time threshold */
if (is_intnonneg (optarg)) {
critical_value = atoi (optarg);
- check_critical_value = TRUE;
+ check_crit = TRUE;
}
else {
}
else {
- usage2 ("Critical time must be a nonnegative integer", optarg);
+ usage2 (_("Critical time must be a positive integer"), optarg);
}
break;
case 'w': /* warning time threshold */
if (is_intnonneg (optarg)) {
warning_value = atoi (optarg);
}
break;
case 'w': /* warning time threshold */
if (is_intnonneg (optarg)) {
warning_value = atoi (optarg);
- check_warning_value = TRUE;
+ check_warn = TRUE;
}
else {
}
else {
- usage2 ("Warning time must be a nonnegative integer", optarg);
+ usage2 (_("Warning time must be a positive integer"), optarg);
}
break;
case 'v': /* variable */
}
break;
case 'v': /* variable */
else if (!strcmp (optarg, "LOADPCT"))
check_variable = UPS_LOADPCT;
else
else if (!strcmp (optarg, "LOADPCT"))
check_variable = UPS_LOADPCT;
else
- usage2 ("Unrecognized UPS variable", optarg);
+ usage2 (_("Unrecognized UPS variable"), optarg);
break;
case 't': /* timeout */
if (is_intnonneg (optarg)) {
socket_timeout = atoi (optarg);
}
else {
break;
case 't': /* timeout */
if (is_intnonneg (optarg)) {
socket_timeout = atoi (optarg);
}
else {
- usage ("Time interval must be a nonnegative integer\n");
+ usage4 (_("Timeout interval must be a positive integer"));
}
break;
case 'V': /* version */
}
break;
case 'V': /* version */
- print_revision (progname, "$Revision$");
+ print_revision (progname, revision);
exit (STATE_OK);
case 'h': /* help */
print_help ();
exit (STATE_OK);
case 'h': /* help */
print_help ();
if (is_host (argv[optind]))
server_address = argv[optind++];
else
if (is_host (argv[optind]))
server_address = argv[optind++];
else
- usage ("Invalid host name");
+ usage2 (_("Invalid hostname/address"), optarg);
}
if (server_address == NULL)
}
if (server_address == NULL)
}
}
-
-
-
int
validate_arguments (void)
{
int
validate_arguments (void)
{
+ if (! ups_name) {
+ printf (_("Error : no ups indicated\n"));
+ return ERROR;
+ }
return OK;
}
return OK;
}
-
-
-
-\f
void
print_help (void)
{
void
print_help (void)
{
print_revision (progname, revision);
print_revision (progname, revision);
- printf (_("Copyright (c) 2000 Tom Shields"));
- printf (_(COPYRIGHT), copyright, email);
+ printf ("Copyright (c) 2000 Tom Shields");
+ printf ("Copyright (c) 2004 Alain Richard <alain.richard@equation.fr>\n");
+ printf ("Copyright (c) 2004 Arnaud Quette <arnaud.quette@mgeups.com>\n");
+ printf (COPYRIGHT, copyright, email);
printf (_("This plugin tests the UPS service on the specified host.\n\
printf (_("This plugin tests the UPS service on the specified host.\n\
-Network UPS Tools from www.exploits.org must be running for this plugin to\n\
-work.\n\n"));
+Network UPS Tools from www.networkupstools.org must be running for this\n\
+plugin to work.\n\n"));
print_usage ();
print_usage ();
-u, --ups=STRING\n\
Name of UPS\n"));
-u, --ups=STRING\n\
Name of UPS\n"));
+ printf (_("\
+ -T, --temperature\n\
+ Output of temperatures in Celsius\n"));
+
printf (_(UT_WARN_CRIT));
printf (_(UT_TIMEOUT), DEFAULT_SOCKET_TIMEOUT);
printf (_(UT_WARN_CRIT));
printf (_(UT_TIMEOUT), DEFAULT_SOCKET_TIMEOUT);
This plugin requires that the UPSD daemon distributed with Russel Kroll's\n\
Smart UPS Tools be installed on the remote host. If you do not have the\n\
package installed on your system, you can download it from\n\
This plugin requires that the UPSD daemon distributed with Russel Kroll's\n\
Smart UPS Tools be installed on the remote host. If you do not have the\n\
package installed on your system, you can download it from\n\
-http://www.exploits.org/nut\n\n"));
+http://www.networkupstools.org\n\n"));
printf (_(UT_SUPPORT));
}
printf (_(UT_SUPPORT));
}
-
-
void
print_usage (void)
{
void
print_usage (void)
{
- printf (_("\
-Usage: %s -H host [-e expect] [-p port] [-w warn] [-c crit]\n\
- [-t timeout] [-v]\n"), progname);
- printf (_(UT_HLP_VRS), progname, progname);
+ printf ("\
+Usage: %s -H host -u ups [-p port] [-v variable]\n\
+ [-wv warn_value] [-cv crit_value] [-to to_sec] [-T]\n", progname);
}
}