Code

Miscelleneous bug fixes (Gerd Mueller - 1235879)
[nagiosplug.git] / plugins / check_nwstat.c
index ce5773b9dbbdb87c770bee6e4464516004d7143c..9f17a7dd78f991302140ca4211c1c8ed9f2a328e 100644 (file)
@@ -20,7 +20,7 @@
 
 const char *progname = "check_nwstat";
 const char *revision = "$Revision$";
-const char *copyright = "2000-2003";
+const char *copyright = "2000-2004";
 const char *email = "nagiosplug-devel@lists.sourceforge.net";
 
 #include "common.h"
@@ -84,7 +84,7 @@ void print_usage(void);
 
 int
 main(int argc, char **argv) {
-       int result;
+       int result = STATE_UNKNOWN;
        int sd;
        char *send_buffer=NULL;
        char recv_buffer[MAX_INPUT_BUFFER];
@@ -121,7 +121,7 @@ main(int argc, char **argv) {
        bindtextdomain (PACKAGE, LOCALEDIR);
        textdomain (PACKAGE);
 
-       if (process_arguments(argc,argv) != TRUE)
+       if (process_arguments(argc,argv) == ERROR)
                usage4 (_("Could not parse arguments"));
 
        /* initialize alarm signal handling */
@@ -169,6 +169,10 @@ main(int argc, char **argv) {
                if (result!=STATE_OK)
                        return result;
                utilization=strtoul(recv_buffer,NULL,10);
+
+               close(sd);
+               my_tcp_connect (server_address, server_port, &sd);
+
                send_buffer = strdup ("UPTIME\r\n");
                result=send_tcp_request(sd,send_buffer,recv_buffer,sizeof(recv_buffer));
                if (result!=STATE_OK)
@@ -325,20 +329,24 @@ main(int argc, char **argv) {
 
                        free_disk_space=strtoul(recv_buffer,NULL,10);
 
+                       close(sd);
+                       my_tcp_connect (server_address, server_port, &sd);
+
                        asprintf (&send_buffer,"VKS%s\r\n",volume_name);
                        result=send_tcp_request(sd,send_buffer,recv_buffer,sizeof(recv_buffer));
                        if (result!=STATE_OK)
                                return result;
                        total_disk_space=strtoul(recv_buffer,NULL,10);
 
-                       percent_free_space=(int)(((double)free_disk_space/(double)total_disk_space)*100.0);
+                       percent_free_space=(unsigned long)(((double)free_disk_space/(double)total_disk_space)*100.0);
 
                        if (check_critical_value==TRUE && percent_free_space <= critical_value)
                                result=STATE_CRITICAL;
                        else if (check_warning_value==TRUE && percent_free_space <= warning_value)
                                result=STATE_WARNING;
                        free_disk_space/=1024;
-                       asprintf (&output_message,_("%lu MB (%lu%%) free on volume %s"),free_disk_space,percent_free_space,volume_name);
+                       total_disk_space/=1024;
+                       asprintf (&output_message,_("%lu MB (%lu%%) free on volume %s - total %lu MB"),free_disk_space,percent_free_space,volume_name,total_disk_space);
                }
 
                /* check to see if DS Database is open or closed */
@@ -353,6 +361,9 @@ main(int argc, char **argv) {
                else
                        result=STATE_WARNING;
  
+               close(sd);
+               my_tcp_connect (server_address, server_port, &sd);
+
                send_buffer = strdup ("S13\r\n");
                result=send_tcp_request(sd,send_buffer,recv_buffer,sizeof(recv_buffer));
                temp_buffer=strtok(recv_buffer,"\r\n");
@@ -472,7 +483,7 @@ main(int argc, char **argv) {
                                return result;
                        total_disk_space=strtoul(recv_buffer,NULL,10);
 
-                       percent_purgeable_space=(int)(((double)purgeable_disk_space/(double)total_disk_space)*100.0);
+                       percent_purgeable_space=(unsigned long)(((double)purgeable_disk_space/(double)total_disk_space)*100.0);
 
                        if (check_critical_value==TRUE && percent_purgeable_space >= critical_value)
                                result=STATE_CRITICAL;
@@ -525,7 +536,7 @@ main(int argc, char **argv) {
                                return result;
                        total_disk_space=strtoul(recv_buffer,NULL,10);
 
-                       percent_non_purgeable_space=(int)(((double)non_purgeable_disk_space/(double)total_disk_space)*100.0);
+                       percent_non_purgeable_space=(unsigned long)(((double)non_purgeable_disk_space/(double)total_disk_space)*100.0);
 
                        if (check_critical_value==TRUE && percent_non_purgeable_space >= critical_value)
                                result=STATE_CRITICAL;
@@ -579,6 +590,9 @@ main(int argc, char **argv) {
  
                max_service_processes=atoi(recv_buffer);
  
+               close(sd);
+               my_tcp_connect (server_address, server_port, &sd);
+
                asprintf (&send_buffer,"S21\r\n");
                result=send_tcp_request(sd,send_buffer,recv_buffer,sizeof(recv_buffer));
                if (result!=STATE_OK)
@@ -643,7 +657,7 @@ main(int argc, char **argv) {
                        result=STATE_CRITICAL;
                else if (check_warning_value==TRUE && dirty_cache_buffers <= warning_value)
                        result=STATE_WARNING;
-               asprintf (&output_message,_("dirty cache buffers = %lu%% of the total"),dirty_cache_buffers);
+               asprintf (&output_message,_("Dirty cache buffers = %lu%% of the total"),dirty_cache_buffers);
 
                /* check % total cache buffers as a percentage of the original*/
        } else if (vars_to_check==TCB) {
@@ -658,7 +672,7 @@ main(int argc, char **argv) {
                        result=STATE_CRITICAL;
                else if (check_warning_value==TRUE && total_cache_buffers <= warning_value)
                        result=STATE_WARNING;
-               asprintf (&output_message,_("total cache buffers = %lu%% of the original"),total_cache_buffers);
+               asprintf (&output_message,_("Total cache buffers = %lu%% of the original"),total_cache_buffers);
                
        } else if (vars_to_check==DSVER) {
                asprintf (&send_buffer,"S13\r\n");
@@ -671,12 +685,15 @@ main(int argc, char **argv) {
                asprintf (&output_message,_("NDS Version %s"),recv_buffer);
 
        } else if (vars_to_check==UPTIME) {
+               asprintf (&send_buffer,"UPTIME\r\n");
                result=send_tcp_request(sd,send_buffer,recv_buffer,sizeof(recv_buffer));
                if (result!=STATE_OK)
                        return result;
 
-               recv_buffer[strlen(recv_buffer)-1]=0;
 
+               recv_buffer[sizeof(recv_buffer)-1]=0;
+               recv_buffer[strlen(recv_buffer)-1]=0;
+       
                asprintf (&output_message,_("Up %s"),recv_buffer);
 
        } else if (vars_to_check==NLM) {
@@ -760,9 +777,7 @@ int process_arguments(int argc, char **argv) {
                switch (c)
                        {
                        case '?': /* print short usage statement if args not parsable */
-                               printf ("%s: Unknown argument: %s\n\n", progname, optarg);
-                               print_usage();
-                               exit(STATE_UNKNOWN);
+                       usage2 (_("Unknown argument"), optarg);
                        case 'h': /* help */
                                print_help();
                                exit(STATE_OK);
@@ -779,7 +794,7 @@ int process_arguments(int argc, char **argv) {
                                if (is_intnonneg(optarg))
                                        server_port=atoi(optarg);
                                else
-                                       die(STATE_UNKNOWN,_("Server port an integer (seconds)\nType '%s -h' for additional help\n"),progname);
+                                       die(STATE_UNKNOWN,_("Server port an integer\n"));
                                break;
                        case 'v':
                                if (strlen(optarg)<3)
@@ -867,8 +882,9 @@ int process_arguments(int argc, char **argv) {
                                        vars_to_check=TSYNC;
                                else if (!strcmp(optarg,"DSVER"))
                                        vars_to_check=DSVER;
-                               else if (!strcmp(optarg,"UPTIME"))
+                               else if (!strcmp(optarg,"UPTIME")) {
                                        vars_to_check=UPTIME;
+                               }
                                else if (strncmp(optarg,"NLM:",4)==0) {
                                        vars_to_check=NLM;
                                        nlm_name=strdup (optarg+4);
@@ -908,9 +924,8 @@ void print_help(void)
        printf (COPYRIGHT, copyright, email);
 
        printf (_("\
-Usage: %s This plugin attempts to contact the MRTGEXT NLM running\n\
-on a Novell server to gather the requested system information.\n\n"),
-               progname);
+This plugin attempts to contact the MRTGEXT NLM running on a\n\
+Novell server to gather the requested system information.\n\n"));
 
        print_usage();
 
@@ -987,8 +1002,7 @@ Notes:\n\
 
 void print_usage(void)
 {
-       printf (_("\
+       printf ("\
 Usage: %s -H host [-p port] [-v variable] [-w warning] [-c critical]\n\
-  [-t timeout].\n"), progname);
-       printf (_(UT_HLP_VRS), progname, progname);
+                    [-t timeout].\n", progname);
 }