X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=plugins%2Fcheck_ide_smart.c;h=4172483905899e4bd376a2af846576fd46adce38;hb=0f342875df1cb8f0fb1803bebbfb536b30b51020;hp=16cd1a875b7289fa1bdb7c7da2d31ea413383510;hpb=e9ccc6b21a1152bbf150302c4a29a6df79d75bd7;p=nagiosplug.git diff --git a/plugins/check_ide_smart.c b/plugins/check_ide_smart.c index 16cd1a8..4172483 100644 --- a/plugins/check_ide_smart.c +++ b/plugins/check_ide_smart.c @@ -6,9 +6,9 @@ * * Notes: * ide-smart has the same functionality as before. Some return - * values were changed, otherwise the --net-saint option was added. + * values were changed, otherwise the --nagios option was added. * - * Run with: check_ide-smart --net-saint [-d] + * Run with: check_ide-smart --nagios [-d] * Where DRIVE is an IDE drive, ie. /dev/hda, /dev/hdb, /dev/hdc * * - Returns 0 on no errors @@ -45,6 +45,9 @@ const char *email = "nagiosplug-devel@lists.sourceforge.net"; #include "common.h" #include "utils.h" +void print_help (void); +void print_usage (void); + #include #include #include @@ -145,6 +148,8 @@ enum SmartCommand SMART_CMD_AUTO_OFFLINE }; +void print_values (values_t * p, thresholds_t * t); +int smart_cmd_simple (int fd, enum SmartCommand command, __u8 val0, char show_error); int main (int argc, char *argv[]) @@ -164,7 +169,7 @@ main (int argc, char *argv[]) {"quiet-check", no_argument, 0, 'q'}, {"auto-on", no_argument, 0, '1'}, {"auto-off", no_argument, 0, '0'}, - {"net-saint", no_argument, 0, 'n'}, + {"nagios", no_argument, 0, 'n'}, {"help", no_argument, 0, 'h'}, {"version", no_argument, 0, 'V'}, {0, 0, 0, 0} }; @@ -176,8 +181,8 @@ main (int argc, char *argv[]) while (1) { o = getopt_long (argc, argv, "+d:iq10nhV", longopts, &longindex); - - if (o == -1 || o == EOF) + + if (o == -1 || o == EOF || o == 1) break; switch (o) { @@ -208,57 +213,56 @@ main (int argc, char *argv[]) default: usage2 (_("Unknown argument"), optarg); } + } - if (optind < argc) { - device = argv[optind]; - } + if (optind < argc) { + device = argv[optind]; + } - if (!device) { - show_help (); - show_version (); - return -1; - } + if (!device) { + print_help (); + return STATE_OK; + } - fd = open (device, O_RDONLY); + fd = open (device, O_RDONLY); - if (fd < 0) { - printf (_("CRITICAL - Couldn't open device: %s\n"), strerror (errno)); - return 2; - } + if (fd < 0) { + printf (_("CRITICAL - Couldn't open device %s: %s\n"), device, strerror (errno)); + return STATE_CRITICAL; + } - if (smart_cmd_simple (fd, SMART_CMD_ENABLE, 0, TRUE)) { - printf (_("CRITICAL - SMART_CMD_ENABLE\n")); - return 2; - } + if (smart_cmd_simple (fd, SMART_CMD_ENABLE, 0, TRUE)) { + printf (_("CRITICAL - SMART_CMD_ENABLE\n")); + return STATE_CRITICAL; + } - switch (command) { - case 0: - retval = smart_cmd_simple (fd, SMART_CMD_AUTO_OFFLINE, 0, TRUE); - break; - case 1: - retval = smart_cmd_simple (fd, SMART_CMD_AUTO_OFFLINE, 0xF8, TRUE); - break; - case 2: - retval = smart_cmd_simple (fd, SMART_CMD_IMMEDIATE_OFFLINE, 0, TRUE); - break; - case 3: - smart_read_values (fd, &values); - smart_read_thresholds (fd, &thresholds); - retval = values_not_passed (&values, &thresholds); - break; - case 4: - smart_read_values (fd, &values); - smart_read_thresholds (fd, &thresholds); - retval = net_saint (&values, &thresholds); - break; - default: - smart_read_values (fd, &values); - smart_read_thresholds (fd, &thresholds); - print_values (&values, &thresholds); - break; - } - close (fd); + switch (command) { + case 0: + retval = smart_cmd_simple (fd, SMART_CMD_AUTO_OFFLINE, 0, TRUE); + break; + case 1: + retval = smart_cmd_simple (fd, SMART_CMD_AUTO_OFFLINE, 0xF8, TRUE); + break; + case 2: + retval = smart_cmd_simple (fd, SMART_CMD_IMMEDIATE_OFFLINE, 0, TRUE); + break; + case 3: + smart_read_values (fd, &values); + smart_read_thresholds (fd, &thresholds); + retval = values_not_passed (&values, &thresholds); + break; + case 4: + smart_read_values (fd, &values); + smart_read_thresholds (fd, &thresholds); + retval = nagios (&values, &thresholds); + break; + default: + smart_read_values (fd, &values); + smart_read_thresholds (fd, &thresholds); + print_values (&values, &thresholds); + break; } + close (fd); return retval; } @@ -324,7 +328,7 @@ values_not_passed (values_t * p, thresholds_t * t) int -net_saint (values_t * p, thresholds_t * t) +nagios (values_t * p, thresholds_t * t) { value_t * value = p->values; threshold_t * threshold = t->thresholds; @@ -363,6 +367,7 @@ net_saint (values_t * p, thresholds_t * t) prefailure > 1 ? 's' : ' ', failed, total); + status=STATE_CRITICAL; break; case ADVISORY: printf (_("WARNING - %d Harddrive Advisor%s Detected. %d/%d tests failed.\n"), @@ -370,14 +375,16 @@ net_saint (values_t * p, thresholds_t * t) advisory > 1 ? "ies" : "y", failed, total); + status=STATE_WARNING; break; case OPERATIONAL: printf (_("OK - Operational (%d/%d tests passed)\n"), passed, total); + status=STATE_OK; break; default: - printf (_("ERROR - Status '%d' uknown. %d/%d tests passed\n"), status, + printf (_("ERROR - Status '%d' unkown. %d/%d tests passed\n"), status, passed, total); - status = -1; + status = STATE_UNKNOWN; break; } return status; @@ -397,7 +404,7 @@ print_value (value_t * p, threshold_t * t) void -print_values (values_t * p, thresholds_t * t) +print_values (values_t * p, thresholds_t * t) { value_t * value = p->values; threshold_t * threshold = t->thresholds; @@ -447,8 +454,7 @@ print_thresholds (thresholds_t * p) } int -smart_cmd_simple (int fd, enum SmartCommand command, __u8 val0, - char show_error) +smart_cmd_simple (int fd, enum SmartCommand command, __u8 val0, char show_error) { int e = 0; __u8 args[4]; @@ -487,18 +493,21 @@ smart_read_thresholds (int fd, thresholds_t * thresholds) void -print_help () +print_help (void) { print_revision (progname, revision); printf ("Nagios feature - 1999 Robert Dale \n"); printf ("(C) 1999 Ragnar Hojland Espinosa \n"); printf (COPYRIGHT, copyright, email); + + printf(_("This plugin checks a local hard drive with the (Linux specific) SMART interface [http://smartlinux.sourceforge.net/smart/index.php].\n\n")); printf ("\ -Usage: %s [DEVICE] [OPTION]\n\ +Usage: %s [OPTION] [DEVICE]\n\ -d, --device=DEVICE\n\ Select device DEVICE\n\ + Note: if the device is selected with this option, _no_ other options are accepted\n\ -i, --immediate\n\ Perform immediately offline tests\n\ -q, --quiet-check\n\ @@ -507,13 +516,15 @@ Usage: %s [DEVICE] [OPTION]\n\ Turn on automatic offline tests\n\ -0, --auto-off\n\ Turn off automatic offline tests\n\ - -n, --net-saint\n\ - Output suitable for Net Saint\n", progname); + -n, --nagios\n\ + Output suitable for Nagios\n", progname); } void print_usage (void) { - printf ("Usage: %s \n"), progname); + printf ("\ +Usage: %s [-d ] [-i ] [-q quiet] [-1 ]\n\ + [-O ] [-n ]\n", progname); }