diff options
Diffstat (limited to 'web/attachments/414810-check_http.c.patch')
-rw-r--r-- | web/attachments/414810-check_http.c.patch | 135 |
1 files changed, 135 insertions, 0 deletions
diff --git a/web/attachments/414810-check_http.c.patch b/web/attachments/414810-check_http.c.patch new file mode 100644 index 0000000..6a189b5 --- /dev/null +++ b/web/attachments/414810-check_http.c.patch | |||
@@ -0,0 +1,135 @@ | |||
1 | diff --git a/plugins/check_http.c b/plugins/check_http.c | ||
2 | index 433c28e..6a8a90a 100644 | ||
3 | --- a/plugins/check_http.c | ||
4 | +++ b/plugins/check_http.c | ||
5 | @@ -84,6 +84,7 @@ int errcode; | ||
6 | int invert_regex = 0; | ||
7 | |||
8 | struct timeval tv; | ||
9 | +struct timeval tv_temp; | ||
10 | |||
11 | #define HTTP_URL "/" | ||
12 | #define CRLF "\r\n" | ||
13 | @@ -130,6 +131,11 @@ void redir (char *pos, char *status_line); | ||
14 | int server_type_check(const char *type); | ||
15 | int server_port_check(int ssl_flag); | ||
16 | char *perfd_time (double microsec); | ||
17 | +char *perfd_time_connect (double microsec); | ||
18 | +char *perfd_time_ssl (double microsec); | ||
19 | +char *perfd_time_firstbyte (double microsec); | ||
20 | +char *perfd_time_headers (double microsec); | ||
21 | +char *perfd_time_transfer (double microsec); | ||
22 | char *perfd_size (int page_len); | ||
23 | void print_help (void); | ||
24 | void print_usage (void); | ||
25 | @@ -790,15 +796,31 @@ check_http (void) | ||
26 | char *pos; | ||
27 | long microsec; | ||
28 | double elapsed_time; | ||
29 | + long microsec_connect; | ||
30 | + double elapsed_time_connect; | ||
31 | + long microsec_ssl; | ||
32 | + double elapsed_time_ssl; | ||
33 | + long microsec_firstbyte; | ||
34 | + double elapsed_time_firstbyte; | ||
35 | + long microsec_headers; | ||
36 | + double elapsed_time_headers; | ||
37 | + long microsec_transfer; | ||
38 | + double elapsed_time_transfer; | ||
39 | int page_len = 0; | ||
40 | int result = STATE_OK; | ||
41 | |||
42 | /* try to connect to the host at the given port number */ | ||
43 | + gettimeofday (&tv_temp, NULL); | ||
44 | if (my_tcp_connect (server_address, server_port, &sd) != STATE_OK) | ||
45 | die (STATE_CRITICAL, _("HTTP CRITICAL - Unable to open TCP socket\n")); | ||
46 | + microsec_connect = deltime (tv_temp); | ||
47 | #ifdef HAVE_SSL | ||
48 | + elapsed_time_connect = (double)microsec_connect / 1.0e6; | ||
49 | if (use_ssl == TRUE) { | ||
50 | + gettimeofday (&tv_temp, NULL); | ||
51 | np_net_ssl_init_with_hostname(sd, (use_sni ? host_name : NULL)); | ||
52 | + microsec_ssl = deltime (tv_temp); | ||
53 | + elapsed_time_ssl = (double)microsec_ssl / 1.0e6; | ||
54 | if (check_cert == TRUE) { | ||
55 | result = np_net_ssl_check_cert(days_till_exp); | ||
56 | np_net_ssl_cleanup(); | ||
57 | @@ -867,11 +889,19 @@ check_http (void) | ||
58 | } | ||
59 | |||
60 | if (verbose) printf ("%s\n", buf); | ||
61 | + gettimeofday (&tv_temp, NULL); | ||
62 | my_send (buf, strlen (buf)); | ||
63 | + microsec_headers = deltime (tv_temp); | ||
64 | + elapsed_time_headers = (double)microsec_headers / 1.0e6; | ||
65 | |||
66 | /* fetch the page */ | ||
67 | full_page = strdup(""); | ||
68 | + gettimeofday (&tv_temp, NULL); | ||
69 | while ((i = my_recv (buffer, MAX_INPUT_BUFFER-1)) > 0) { | ||
70 | + if ((i >= 1) && (elapsed_time_firstbyte <= 0.000001)) { | ||
71 | + microsec_firstbyte = deltime (tv_temp); | ||
72 | + elapsed_time_firstbyte = (double)microsec_firstbyte / 1.0e6; | ||
73 | + } | ||
74 | buffer[i] = '\0'; | ||
75 | asprintf (&full_page_new, "%s%s", full_page, buffer); | ||
76 | free (full_page); | ||
77 | @@ -883,6 +913,8 @@ check_http (void) | ||
78 | break; | ||
79 | } | ||
80 | } | ||
81 | + microsec_transfer = deltime (tv_temp); | ||
82 | + elapsed_time_transfer = (double)microsec_transfer / 1.0e6; | ||
83 | |||
84 | if (i < 0 && errno != ECONNRESET) { | ||
85 | #ifdef HAVE_SSL | ||
86 | @@ -1085,10 +1117,16 @@ check_http (void) | ||
87 | |||
88 | /* check elapsed time */ | ||
89 | asprintf (&msg, | ||
90 | - _("%s - %d bytes in %.3f second response time %s|%s %s"), | ||
91 | + _("%s - %d bytes in %.3f second response time %s|%s %s %s %s %s %s %s"), | ||
92 | msg, page_len, elapsed_time, | ||
93 | (display_html ? "</A>" : ""), | ||
94 | - perfd_time (elapsed_time), perfd_size (page_len)); | ||
95 | + perfd_time (elapsed_time), | ||
96 | + perfd_size (page_len), | ||
97 | + perfd_time_connect (elapsed_time_connect), | ||
98 | + perfd_time_ssl (elapsed_time_ssl), | ||
99 | + perfd_time_headers (elapsed_time_headers), | ||
100 | + perfd_time_firstbyte (elapsed_time_firstbyte), | ||
101 | + perfd_time_transfer (elapsed_time_transfer)); | ||
102 | |||
103 | result = max_state_alt(get_status(elapsed_time, thlds), result); | ||
104 | |||
105 | @@ -1277,7 +1315,30 @@ char *perfd_time (double elapsed_time) | ||
106 | TRUE, 0, FALSE, 0); | ||
107 | } | ||
108 | |||
109 | +char *perfd_time_connect (double elapsed_time_connect) | ||
110 | +{ | ||
111 | + return fperfdata ("time_connect", elapsed_time_connect, "s", FALSE, 0, FALSE, 0, FALSE, 0, FALSE, 0); | ||
112 | +} | ||
113 | |||
114 | +char *perfd_time_ssl (double elapsed_time_ssl) | ||
115 | +{ | ||
116 | + return fperfdata ("time_ssl", elapsed_time_ssl, "s", FALSE, 0, FALSE, 0, FALSE, 0, FALSE, 0); | ||
117 | +} | ||
118 | + | ||
119 | +char *perfd_time_headers (double elapsed_time_headers) | ||
120 | +{ | ||
121 | + return fperfdata ("time_headers", elapsed_time_headers, "s", FALSE, 0, FALSE, 0, FALSE, 0, FALSE, 0); | ||
122 | +} | ||
123 | + | ||
124 | +char *perfd_time_firstbyte (double elapsed_time_firstbyte) | ||
125 | +{ | ||
126 | + return fperfdata ("time_firstbyte", elapsed_time_firstbyte, "s", FALSE, 0, FALSE, 0, FALSE, 0, FALSE, 0); | ||
127 | +} | ||
128 | + | ||
129 | +char *perfd_time_transfer (double elapsed_time_transfer) | ||
130 | +{ | ||
131 | + return fperfdata ("time_transfer", elapsed_time_transfer, "s", FALSE, 0, FALSE, 0, FALSE, 0, FALSE, 0); | ||
132 | +} | ||
133 | |||
134 | char *perfd_size (int page_len) | ||
135 | { | ||