X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=plugins%2Fcheck_ide_smart.c;h=3811dc12059739c7b3b8516c2e24ac6b29de2bb8;hb=25d1ee331dbe4977a4a1a756c67f32bd51d9b070;hp=644dc4881c0c48d0b363fb9e7ff27ea06f890585;hpb=e71d2c2b71d20ba3110030b4c6f3de1d9e827313;p=nagiosplug.git diff --git a/plugins/check_ide_smart.c b/plugins/check_ide_smart.c index 644dc48..3811dc1 100644 --- a/plugins/check_ide_smart.c +++ b/plugins/check_ide_smart.c @@ -1,50 +1,48 @@ -/* - * check_ide-smart v.1 - hacked version of ide-smart for Nagios - * Copyright (C) 2000 Robert Dale - * - * Nagios - http://www.nagios.org - * - * Notes: - * ide-smart has the same functionality as before. Some return - * values were changed, otherwise the --net-saint option was added. - * - * Run with: check_ide-smart --net-saint [-d] - * Where DRIVE is an IDE drive, ie. /dev/hda, /dev/hdb, /dev/hdc - * - * - Returns 0 on no errors - * - Returns 1 on advisories - * - Returns 2 on prefailure - * - Returns -1 not too often - * - * ide-smart 1.3 - IDE S.M.A.R.T. checking tool - * Copyright (C) 1998-1999 Ragnar Hojland Espinosa - * 1998 Gadi Oxman - * - * 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 your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - * - * $Id$ - */ +/***************************************************************************** +* +* Nagios check_ide_smart plugin +* ide-smart 1.3 - IDE S.M.A.R.T. checking tool +* +* License: GPL +* Copyright (C) 1998-1999 Ragnar Hojland Espinosa +* 1998 Gadi Oxman +* Copyright (c) 2000 Robert Dale +* Copyright (c) 2000-2007 Nagios Plugins Development Team +* +* Description: +* +* This file contains the check_ide_smart plugin +* +* This plugin checks a local hard drive with the (Linux specific) SMART +* interface +* +* +* 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 3 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see . +* +* +*****************************************************************************/ const char *progname = "check_ide_smart"; -const char *revision = "$Revision$"; -const char *copyright = "2000-2004"; +const char *copyright = "1998-2007"; 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 +143,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,11 +164,15 @@ 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} + {"version", no_argument, 0, 'V'}, + {0, 0, 0, 0} }; + /* Parse extra opts if any */ + argv=np_extra_opts (&argc, argv, progname); + setlocale (LC_ALL, ""); bindtextdomain (PACKAGE, LOCALEDIR); textdomain (PACKAGE); @@ -176,8 +180,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) { @@ -203,64 +207,61 @@ main (int argc, char *argv[]) print_help (); return STATE_OK; case 'V': - print_revision (progname, revision); + print_revision (progname, NP_VERSION); return STATE_OK; default: - printf (_("%s: Unknown argument: %s\n\n"), progname, optarg); - print_usage (); - exit (STATE_UNKNOWN); + usage5 (); } + } - 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; } @@ -326,7 +327,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; @@ -365,6 +366,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"), @@ -372,14 +374,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; @@ -399,7 +403,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; @@ -431,26 +435,8 @@ print_values (values_t * p, thresholds_t * t) } - -void -print_thresholds (thresholds_t * p) -{ - threshold_t * threshold = p->thresholds; - int i; - printf ("\n"); - printf ("SmartRevision=%d\n", p->revision); - for (i = 0; i < NR_ATTRIBUTES; i++) { - if (threshold->id) { - printf ("Id=%3d, Threshold=%3d\n", threshold->id, - threshold->threshold); } - ++threshold; - } - printf ("CheckSum=%d\n", p->checksum); -} - 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]; @@ -488,36 +474,63 @@ smart_read_thresholds (int fd, thresholds_t * thresholds) } - void -print_help () +print_help (void) { - print_revision (progname, revision); + print_revision (progname, NP_VERSION); printf ("Nagios feature - 1999 Robert Dale \n"); printf ("(C) 1999 Ragnar Hojland Espinosa \n"); printf (COPYRIGHT, copyright, email); - - printf ("\ -Usage: %s [DEVICE] [OPTION]\n\ - -d, --device=DEVICE\n\ - Select device DEVICE\n\ - -i, --immediate\n\ - Perform immediately offline tests\n\ - -q, --quiet-check\n\ - Returns the number of failed tests\n\ - -1, --auto-on\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); + + printf (_("This plugin checks a local hard drive with the (Linux specific) SMART interface [http://smartlinux.sourceforge.net/smart/index.php].")); + + printf ("\n\n"); + + print_usage (); + + printf (UT_HELP_VRSN); + printf (UT_EXTRA_OPTS); + + printf (" %s\n", "-d, --device=DEVICE"); + printf (" %s\n", _("Select device DEVICE")); + printf (" %s\n", _("Note: if the device is selected with this option, _no_ other options are accepted")); + printf (" %s\n", "-i, --immediate"); + printf (" %s\n", _("Perform immediately offline tests")); + printf (" %s\n", "-q, --quiet-check"); + printf (" %s\n", _("Returns the number of failed tests")); + printf (" %s\n", "-1, --auto-on"); + printf (" %s\n", _("Turn on automatic offline tests")); + printf (" %s\n", "-0, --auto-off"); + printf (" %s\n", _("Turn off automatic offline tests")); + printf (" %s\n", "-n, --nagios"); + printf (" %s\n", _("Output suitable for Nagios")); + +#ifdef NP_EXTRA_OPTS + printf ("\n"); + printf ("%s\n", _("Notes:")); + printf (UT_EXTRA_OPTS_NOTES); +#endif + + printf (UT_SUPPORT); } + /* todo : add to the long nanual as example + * + * 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 + * - Returns 1 on advisories + * - Returns 2 on prefailure + * - Returns -1 not too often + */ void print_usage (void) { - printf ("Usage: %s \n"), progname); + printf (_("Usage:")); + printf ("%s [-d ] [-i ] [-q quiet] [-1 ]",progname); + printf (" [-O ] [-n ]\n"); }