Преглед на файлове

millisecond timing

git-svn-id: https://nagiosplug.svn.sourceforge.net/svnroot/nagiosplug/nagiosplug/trunk@139 f882894a-f735-0410-b71e-b25c423dba1c
Karl DeBisschop преди 23 години
родител
ревизия
b8554503be
променени са 1 файла, в които са добавени 17 реда и са изтрити 15 реда
  1. 17 15
      plugins/check_tcp.c

+ 17 - 15
plugins/check_tcp.c

@@ -83,10 +83,11 @@ int warn_codes_count = 0;
 char **crit_codes = NULL;
 int crit_codes_count = 0;
 int delay = 0;
-int warning_time = 0;
+double warning_time = 0;
 int check_warning_time = FALSE;
-int critical_time = 0;
+double critical_time = 0;
 int check_critical_time = FALSE;
+double elapsed_time = 0;
 int verbose = FALSE;
 int use_ssl = FALSE;
 int sd;
@@ -100,6 +101,7 @@ main (int argc, char **argv)
 	char *status = NULL;
 	char *output = NULL;
 	char *ptr = NULL;
+	struct timeval tv;
 
 	if (strstr (argv[0], "check_udp")) {
 		PROGNAME = strscpy (PROGNAME, "check_udp");
@@ -205,7 +207,7 @@ main (int argc, char **argv)
 	alarm (socket_timeout);
 
 	/* try to connect to the host at the given port number */
-	time (&start_time);
+	gettimeofday (&tv, NULL);
 #ifdef HAVE_SSL
 	if (use_ssl)
 		result = connect_SSL ();
@@ -233,7 +235,7 @@ main (int argc, char **argv)
 	}
 
 	if (delay > 0) {
-		start_time = start_time + delay;
+		tv.tv_sec += delay;
 		sleep (delay);
 	}
 
@@ -287,25 +289,25 @@ main (int argc, char **argv)
 	/* close the connection */
 	close (sd);
 
-	time (&end_time);
+	elapsed_time = delta_time (tv);
 
-	if (check_critical_time == TRUE && (end_time - start_time) > critical_time)
+	if (check_critical_time == TRUE && elapsed_time > critical_time)
 		result = STATE_CRITICAL;
-	else if (check_warning_time == TRUE
-					 && (end_time - start_time) > warning_time) result = STATE_WARNING;
+	else if (check_warning_time == TRUE && elapsed_time > warning_time)
+		result = STATE_WARNING;
 
 	/* reset the alarm */
 	alarm (0);
 
 	printf
-		("%s %s - %d second response time on port %d",
+		("%s %s - %7.3f second response time on port %d",
 		 SERVICE,
-		 state_text (result), (int) (end_time - start_time), server_port);
+		 state_text (result), elapsed_time, server_port);
 
 	if (status)
 		printf (" [%s]", status);
 
-	printf ("|time=%d\n", (int) (end_time - start_time));
+	printf ("|time=%7.3f\n", elapsed_time);
 
 	return result;
 }
@@ -398,13 +400,13 @@ process_arguments (int argc, char **argv)
 		case 'c':                 /* critical */
 			if (!is_intnonneg (optarg))
 				usage ("Critical threshold must be a nonnegative integer\n");
-			critical_time = atoi (optarg);
+			critical_time = strtod (optarg, NULL);
 			check_critical_time = TRUE;
 			break;
 		case 'w':                 /* warning */
 			if (!is_intnonneg (optarg))
 				usage ("Warning threshold must be a nonnegative integer\n");
-			warning_time = atoi (optarg);
+			warning_time = strtod (optarg, NULL);
 			check_warning_time = TRUE;
 			break;
 		case 'C':
@@ -499,9 +501,9 @@ print_help (void)
 		 "    String to expect in server response"
 		 " -W, --wait=INTEGER\n"
 		 "    Seconds to wait between sending string and polling for response\n"
-		 " -w, --warning=INTEGER\n"
+		 " -w, --warning=DOUBLE\n"
 		 "    Response time to result in warning status (seconds)\n"
-		 " -c, --critical=INTEGER\n"
+		 " -c, --critical=DOUBLE\n"
 		 "    Response time to result in critical status (seconds)\n"
 		 " -t, --timeout=INTEGER\n"
 		 "    Seconds before connection times out (default: %d)\n"