diff options
Diffstat (limited to 'plugins')
| -rw-r--r-- | plugins/check_curl.c | 48 |
1 files changed, 40 insertions, 8 deletions
diff --git a/plugins/check_curl.c b/plugins/check_curl.c index e14fb19b..064fb16b 100644 --- a/plugins/check_curl.c +++ b/plugins/check_curl.c | |||
| @@ -97,6 +97,7 @@ int days_till_exp_warn, days_till_exp_crit; | |||
| 97 | thresholds *thlds; | 97 | thresholds *thlds; |
| 98 | char user_agent[DEFAULT_BUFFER_SIZE]; | 98 | char user_agent[DEFAULT_BUFFER_SIZE]; |
| 99 | int verbose = 0; | 99 | int verbose = 0; |
| 100 | int show_extended_perfdata = FALSE; | ||
| 100 | char *http_method = NULL; | 101 | char *http_method = NULL; |
| 101 | CURL *curl; | 102 | CURL *curl; |
| 102 | struct curl_slist *header_list = NULL; | 103 | struct curl_slist *header_list = NULL; |
| @@ -108,6 +109,10 @@ struct curl_slist *http_opt_headers = NULL; | |||
| 108 | long code; | 109 | long code; |
| 109 | long socket_timeout = DEFAULT_SOCKET_TIMEOUT; | 110 | long socket_timeout = DEFAULT_SOCKET_TIMEOUT; |
| 110 | double total_time; | 111 | double total_time; |
| 112 | double time_connect; | ||
| 113 | double time_appconnect; | ||
| 114 | double time_headers; | ||
| 115 | double time_firstbyte; | ||
| 111 | char errbuf[CURL_ERROR_SIZE+1]; | 116 | char errbuf[CURL_ERROR_SIZE+1]; |
| 112 | CURLcode res; | 117 | CURLcode res; |
| 113 | char url[DEFAULT_BUFFER_SIZE]; | 118 | char url[DEFAULT_BUFFER_SIZE]; |
| @@ -136,6 +141,7 @@ void curlhelp_freebuffer (curlhelp_curlbuf*); | |||
| 136 | 141 | ||
| 137 | int curlhelp_parse_statusline (const char*, curlhelp_statusline *); | 142 | int curlhelp_parse_statusline (const char*, curlhelp_statusline *); |
| 138 | void curlhelp_free_statusline (curlhelp_statusline *); | 143 | void curlhelp_free_statusline (curlhelp_statusline *); |
| 144 | char *perfd_time_ssl (double microsec); | ||
| 139 | 145 | ||
| 140 | void remove_newlines (char *); | 146 | void remove_newlines (char *); |
| 141 | void test_file (char *); | 147 | void test_file (char *); |
| @@ -342,13 +348,30 @@ check_http (void) | |||
| 342 | * performance data to the answer always | 348 | * performance data to the answer always |
| 343 | */ | 349 | */ |
| 344 | curl_easy_getinfo (curl, CURLINFO_TOTAL_TIME, &total_time); | 350 | curl_easy_getinfo (curl, CURLINFO_TOTAL_TIME, &total_time); |
| 345 | snprintf (perfstring, DEFAULT_BUFFER_SIZE, "time=%.6gs;%.6g;%.6g;%.6g size=%dB;;;0", | 351 | if(show_extended_perfdata) { |
| 346 | total_time, | 352 | curl_easy_getinfo(curl, CURLINFO_CONNECT_TIME, &time_connect); |
| 347 | 0.0, 0.0, | 353 | curl_easy_getinfo(curl, CURLINFO_APPCONNECT_TIME, &time_appconnect); |
| 348 | ( warning_thresholds != NULL ) ? (double)thlds->warning->end : 0.0, | 354 | curl_easy_getinfo(curl, CURLINFO_PRETRANSFER_TIME, &time_headers); |
| 349 | critical_thresholds != NULL ? (double)thlds->critical->end : 0.0, | 355 | curl_easy_getinfo(curl, CURLINFO_STARTTRANSFER_TIME, &time_firstbyte); |
| 350 | 0.0, | 356 | snprintf(perfstring, DEFAULT_BUFFER_SIZE, "time=%.6gs;%.6g;%.6g;; size=%dB;;; time_connect=%.6gs;;;; %s time_headers=%.6gs;;;; time_firstbyte=%.6gs;;;; time_transfer=%.6gs;;;;", |
| 351 | (int)body_buf.buflen); | 357 | total_time, |
| 358 | warning_thresholds != NULL ? (double)thlds->warning->end : 0.0, | ||
| 359 | critical_thresholds != NULL ? (double)thlds->critical->end : 0.0, | ||
| 360 | (int)body_buf.buflen, | ||
| 361 | time_connect, | ||
| 362 | use_ssl == TRUE ? perfd_time_ssl(time_appconnect-time_connect) : "", | ||
| 363 | (time_headers - time_appconnect), | ||
| 364 | (time_firstbyte - time_headers), | ||
| 365 | (total_time-time_firstbyte) | ||
| 366 | ); | ||
| 367 | } else { | ||
| 368 | snprintf(perfstring, DEFAULT_BUFFER_SIZE, "time=%.6gs;%.6g;%.6g;; size=%dB;;;", | ||
| 369 | total_time, | ||
| 370 | warning_thresholds != NULL ? (double)thlds->warning->end : 0.0, | ||
| 371 | critical_thresholds != NULL ? (double)thlds->critical->end : 0.0, | ||
| 372 | (int)body_buf.buflen); | ||
| 373 | } | ||
| 374 | |||
| 352 | 375 | ||
| 353 | /* return a CRITICAL status if we couldn't read any data */ | 376 | /* return a CRITICAL status if we couldn't read any data */ |
| 354 | if (strlen(header_buf.buf) == 0 && strlen(body_buf.buf) == 0) | 377 | if (strlen(header_buf.buf) == 0 && strlen(body_buf.buf) == 0) |
| @@ -497,6 +520,7 @@ process_arguments (int argc, char **argv) | |||
| 497 | {"useragent", required_argument, 0, 'A'}, | 520 | {"useragent", required_argument, 0, 'A'}, |
| 498 | {"invert-regex", no_argument, NULL, INVERT_REGEX}, | 521 | {"invert-regex", no_argument, NULL, INVERT_REGEX}, |
| 499 | {"header", required_argument, 0, 'k'}, | 522 | {"header", required_argument, 0, 'k'}, |
| 523 | {"extended-perfdata", no_argument, 0, 'E'}, | ||
| 500 | {0, 0, 0, 0} | 524 | {0, 0, 0, 0} |
| 501 | }; | 525 | }; |
| 502 | 526 | ||
| @@ -504,7 +528,7 @@ process_arguments (int argc, char **argv) | |||
| 504 | return ERROR; | 528 | return ERROR; |
| 505 | 529 | ||
| 506 | while (1) { | 530 | while (1) { |
| 507 | c = getopt_long (argc, argv, "Vvht:c:w:A:k:H:j:I:a:p:s:r:u:f:C:J:K:S::", longopts, &option); | 531 | c = getopt_long (argc, argv, "Vvht:c:w:A:k:H:j:I:a:p:s:r:u:f:C:J:K:S::E", longopts, &option); |
| 508 | if (c == -1 || c == EOF || c == 1) | 532 | if (c == -1 || c == EOF || c == 1) |
| 509 | break; | 533 | break; |
| 510 | 534 | ||
| @@ -671,6 +695,9 @@ process_arguments (int argc, char **argv) | |||
| 671 | case INVERT_REGEX: | 695 | case INVERT_REGEX: |
| 672 | invert_regex = 1; | 696 | invert_regex = 1; |
| 673 | break; | 697 | break; |
| 698 | case 'E': /* show extended perfdata */ | ||
| 699 | show_extended_perfdata = TRUE; | ||
| 700 | break; | ||
| 674 | case '?': | 701 | case '?': |
| 675 | /* print short usage statement if args not parsable */ | 702 | /* print short usage statement if args not parsable */ |
| 676 | usage5 (); | 703 | usage5 (); |
| @@ -1026,3 +1053,8 @@ remove_newlines (char *s) | |||
| 1026 | if (*p == '\r' || *p == '\n') | 1053 | if (*p == '\r' || *p == '\n') |
| 1027 | *p = ' '; | 1054 | *p = ' '; |
| 1028 | } | 1055 | } |
| 1056 | |||
| 1057 | char *perfd_time_ssl (double elapsed_time_ssl) | ||
| 1058 | { | ||
| 1059 | return fperfdata ("time_ssl", elapsed_time_ssl, "s", FALSE, 0, FALSE, 0, FALSE, 0, FALSE, 0); | ||
| 1060 | } | ||
