X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=plugins%2Fcheck_load.c;h=7e1cc481e9d777b3662cf404c9f65c6322f9d6eb;hb=187f86275426bfb501c7180c48161e1e22af1ef7;hp=bdb1e55d18fae7cdf2af6f6f7fc0d39dab6010ae;hpb=a228492c4bea15a3e6e7bdbfd6631611c97fe92c;p=nagiosplug.git diff --git a/plugins/check_load.c b/plugins/check_load.c index bdb1e55..7e1cc48 100644 --- a/plugins/check_load.c +++ b/plugins/check_load.c @@ -13,12 +13,14 @@ 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$ ******************************************************************************/ const char *progname = "check_load"; const char *revision = "$Revision$"; -const char *copyright = "1999-2003"; +const char *copyright = "1999-2004"; const char *email = "nagiosplug-devel@lists.sourceforge.net"; #include "common.h" @@ -49,14 +51,12 @@ char *status_line; - - - int main (int argc, char **argv) { + int result = STATE_UNKNOWN; + #if HAVE_GETLOADAVG==1 - int result; double la[3] = { 0.0, 0.0, 0.0 }; /* NetBSD complains about unitialized arrays */ #else # if HAVE_PROC_LOADAVG==1 @@ -64,15 +64,18 @@ main (int argc, char **argv) char input_buffer[MAX_INPUT_BUFFER]; char *tmp_ptr; # else - int result; char input_buffer[MAX_INPUT_BUFFER]; # endif #endif float la1, la5, la15; + setlocale (LC_ALL, ""); + bindtextdomain (PACKAGE, LOCALEDIR); + textdomain (PACKAGE); + if (process_arguments (argc, argv) == ERROR) - usage ("failed processing arguments\n"); + usage4 (_("Could not parse arguments")); #if HAVE_GETLOADAVG==1 result = getloadavg (la, 3); @@ -112,7 +115,7 @@ main (int argc, char **argv) printf (_("Could not open stderr for %s\n"), PATH_TO_UPTIME); } fgets (input_buffer, MAX_INPUT_BUFFER - 1, child_process); - sscanf (input_buffer, "%*[^l]load average: %f, %f, %f"), &la1, &la5, &la15); + sscanf (input_buffer, "%*[^l]load average: %f, %f, %f", &la1, &la5, &la15); result = spclose (child_process); if (result) { @@ -122,6 +125,7 @@ main (int argc, char **argv) # endif #endif + if ((la1 < 0.0) || (la5 < 0.0) || (la15 < 0.0)) { #if HAVE_GETLOADAVG==1 printf (_("Error in getloadavg()\n")); @@ -134,32 +138,36 @@ main (int argc, char **argv) #endif return STATE_UNKNOWN; } + asprintf(&status_line, _("load average: %.2f, %.2f, %.2f"), la1, la5, la15); - if ((la1 >= cload1) || (la5 >= cload5) || (la15 >= cload15)) { - printf(_("CRITICAL - %s\n"), status_line); - return STATE_CRITICAL; - } - if ((la1 >= wload1) || (la5 >= wload5) || (la15 >= wload15)) { - printf (_("WARNING - %s\n"), status_line); - return STATE_WARNING; - } - printf (_("OK - %s\n"), status_line); + + if ((la1 >= cload1) || (la5 >= cload5) || (la15 >= cload15)) + result = STATE_CRITICAL; + else if ((la1 >= wload1) || (la5 >= wload5) || (la15 >= wload15)) + result = STATE_WARNING; + else + result = STATE_OK; + + die (result, + "%s - %s|%s %s %s\n", + state_text (result), + status_line, + fperfdata ("load1", la1, "", (int)wload1, wload1, (int)cload1, cload1, TRUE, 0, FALSE, 0), + fperfdata ("load5", la5, "", (int)wload5, wload5, (int)cload5, cload5, TRUE, 0, FALSE, 0), + fperfdata ("load15", la15, "", (int)wload15, wload15, (int)cload15, cload15, TRUE, 0, FALSE, 0)); return STATE_OK; } - - - /* process command-line arguments */ int process_arguments (int argc, char **argv) { int c = 0; - int option_index = 0; - static struct option long_options[] = { + int option = 0; + static struct option longopts[] = { {"warning", required_argument, 0, 'w'}, {"critical", required_argument, 0, 'c'}, {"version", no_argument, 0, 'V'}, @@ -171,7 +179,7 @@ process_arguments (int argc, char **argv) return ERROR; while (1) { - c = getopt_long (argc, argv, "Vhc:w:", long_options, &option_index); + c = getopt_long (argc, argv, "Vhc:w:", longopts, &option); if (c == -1 || c == EOF) break; @@ -210,13 +218,13 @@ process_arguments (int argc, char **argv) usage (_("Critical threshold must be float or float triplet!\n")); break; case 'V': /* version */ - print_revision (progname, "$Revision$"); + print_revision (progname, revision); exit (STATE_OK); case 'h': /* help */ print_help (); exit (STATE_OK); case '?': /* help */ - usage (_("Invalid argument\n")); + usage2 (_("Unknown argument"), optarg); } } @@ -256,8 +264,6 @@ process_arguments (int argc, char **argv) - - int validate_arguments (void) { @@ -284,16 +290,13 @@ validate_arguments (void) - - - void print_help (void) { print_revision (progname, revision); - printf (_("Copyright (c) 1999 Felipe Gustavo de Almeida \n")); - printf (_(COPYRIGHT), copyright, email); + printf ("Copyright (c) 1999 Felipe Gustavo de Almeida \n"); + printf (COPYRIGHT, copyright, email); printf (_("This plugin tests the current system load average.\n\n")); @@ -314,7 +317,5 @@ the load average format is the same used by \"uptime\" and \"w\"\n\n")); void print_usage (void) { - printf (_("Usage: %s -w WLOAD1,WLOAD5,WLOAD15 -c CLOAD1,CLOAD5,CLOAD15\n"), - progname); - printf (_(UT_HLP_VRS), progname, progname); + printf ("Usage: %s -w WLOAD1,WLOAD5,WLOAD15 -c CLOAD1,CLOAD5,CLOAD15\n", progname); }