Code

Fix to parsing of uptime (Ronald Tin - 1254656)
[nagiosplug.git] / plugins / check_ping.c
index bd7911d7c2b4c7b1b8ffe49ed3520e3c9ece8795..6b566608961059c90c8206a8ee94fdcdca347cf9 100644 (file)
@@ -53,7 +53,7 @@ char **addresses = NULL;
 int n_addresses;
 int max_addr = 1;
 int max_packets = -1;
-int verbose = FALSE;
+int verbose = 0;
 
 float rta = UNKNOWN_TRIP_TIME;
 int pl = UNKNOWN_PACKET_LOSS;
@@ -72,6 +72,7 @@ main (int argc, char **argv)
        int i;
 
        setlocale (LC_ALL, "");
+       setlocale (LC_NUMERIC, "C");
        bindtextdomain (PACKAGE, LOCALEDIR);
        textdomain (PACKAGE);
 
@@ -111,8 +112,8 @@ main (int argc, char **argv)
                asprintf (&cmd, rawcmd, addresses[i], max_packets);
 #endif
 
-               if (verbose)
-                       printf ("%s ==> ", cmd);
+               if (verbose >= 2)
+                       printf ("CMD: %s\n", cmd);
 
                /* run the command */
                this_result = run_ping (cmd, addresses[i]);
@@ -145,7 +146,7 @@ main (int argc, char **argv)
                        printf ("</A>");
                printf ("\n");
 
-               if (verbose)
+               if (verbose >= 2)
                        printf ("%f:%d%% %f:%d%%\n", wrta, wpl, crta, cpl);
 
                result = max_state (result, this_result);
@@ -207,7 +208,7 @@ process_arguments (int argc, char **argv)
                        timeout_interval = atoi (optarg);
                        break;
                case 'v':       /* verbose mode */
-                       verbose = TRUE;
+                       verbose++;
                        break;
                case '4':       /* IPv4 only */
                        address_family = AF_INET;
@@ -411,15 +412,22 @@ run_ping (const char *cmd, const char *addr)
 
        while (fgets (buf, MAX_INPUT_BUFFER - 1, child_process)) {
 
+               if (verbose >= 3)
+                       printf("Output: %s", buf);
+
                result = max_state (result, error_scan (buf, addr));
 
                /* get the percent loss statistics */
                if(sscanf(buf,"%*d packets transmitted, %*d packets received, +%*d errors, %d%% packet loss",&pl)==1 ||
-                        sscanf(buf,"%*d packets transmitted, %*d packets received, %d%% packet loss",&pl)==1   ||
+                        sscanf(buf,"%*d packets transmitted, %*d packets received, +%*d duplicates, %d%% packet loss", &pl) == 1 ||
+                        sscanf(buf,"%*d packets transmitted, %*d received, +%*d duplicates, %d%% packet loss", &pl) == 1 ||
+                        sscanf(buf,"%*d packets transmitted, %*d packets received, %d%% packet loss",&pl)==1 ||
                         sscanf(buf,"%*d packets transmitted, %*d packets received, %d%% loss, time",&pl)==1 ||
                         sscanf(buf,"%*d packets transmitted, %*d received, %d%% loss, time", &pl)==1 ||
                         sscanf(buf,"%*d packets transmitted, %*d received, %d%% packet loss, time", &pl)==1 ||
-                  sscanf(buf,"%*d packets transmitted, %*d received, +%*d errors, %d%% packet loss", &pl) == 1)
+                        sscanf(buf,"%*d packets transmitted, %*d received, +%*d errors, %d%% packet loss", &pl) == 1 ||
+                        sscanf(buf,"%*d packets transmitted %*d received, +%*d errors, %d%% packet loss", &pl) == 1
+                        )
                        continue;
 
                /* get the round trip average */