X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=src%2Fcurl.c;h=9d2196ac2c3e57d30858eebcbf83bdb39f4d6970;hb=d404a0c4f97ef047c2add2e27f2424f01bc45ad7;hp=f927f810e874cae8aee8060f61422dfa12d225b4;hpb=ff6bda50a3efad2f32974bcbb1eb00c2303b2ee6;p=collectd.git diff --git a/src/curl.c b/src/curl.c index f927f810..9d2196ac 100644 --- a/src/curl.c +++ b/src/curl.c @@ -26,6 +26,7 @@ #include "plugin.h" #include "configfile.h" #include "utils_match.h" +#include "utils_time.h" #include @@ -324,7 +325,10 @@ static int cc_config_add_match (web_page_t *page, /* {{{ */ } /* while (status == 0) */ if (status != 0) + { + cc_web_match_free (match); return (status); + } match->match = match_create_simple (match->regex, match->exclude_regex, match->dstype); @@ -568,6 +572,7 @@ static int cc_init (void) /* {{{ */ INFO ("curl plugin: No pages have been defined."); return (-1); } + curl_global_init (CURL_GLOBAL_SSL); return (0); } /* }}} int cc_init */ @@ -585,7 +590,8 @@ static void cc_submit (const web_page_t *wp, const web_match_t *wm, /* {{{ */ sstrncpy (vl.plugin, "curl", sizeof (vl.plugin)); sstrncpy (vl.plugin_instance, wp->instance, sizeof (vl.plugin_instance)); sstrncpy (vl.type, wm->type, sizeof (vl.type)); - sstrncpy (vl.type_instance, wm->instance, sizeof (vl.type_instance)); + if (wm->instance != NULL) + sstrncpy (vl.type_instance, wm->instance, sizeof (vl.type_instance)); plugin_dispatch_values (&vl); } /* }}} void cc_submit */ @@ -607,12 +613,13 @@ static void cc_submit_response_code (const web_page_t *wp, long code) /* {{{ */ plugin_dispatch_values (&vl); } /* }}} void cc_submit_response_code */ -static void cc_submit_response_time (const web_page_t *wp, double seconds) /* {{{ */ +static void cc_submit_response_time (const web_page_t *wp, /* {{{ */ + cdtime_t response_time) { value_t values[1]; value_list_t vl = VALUE_LIST_INIT; - values[0].gauge = seconds; + values[0].gauge = CDTIME_T_TO_DOUBLE (response_time); vl.values = values; vl.values_len = 1; @@ -628,41 +635,35 @@ static int cc_read_page (web_page_t *wp) /* {{{ */ { web_match_t *wm; int status; - struct timeval start, end; + cdtime_t start = 0; if (wp->response_time) - gettimeofday (&start, NULL); + start = cdtime (); wp->buffer_fill = 0; status = curl_easy_perform (wp->curl); if (status != CURLE_OK) { - ERROR ("curl plugin: curl_easy_perform failed with staus %i: %s", + ERROR ("curl plugin: curl_easy_perform failed with status %i: %s", status, wp->curl_errbuf); return (-1); } + if (wp->response_time) + cc_submit_response_time (wp, cdtime() - start); + if(wp->response_code) { long response_code = 0; status = curl_easy_getinfo(wp->curl, CURLINFO_RESPONSE_CODE, &response_code); if(status != CURLE_OK) { - ERROR ("curl plugin: Fetching response code failed with staus %i: %s", + ERROR ("curl plugin: Fetching response code failed with status %i: %s", status, wp->curl_errbuf); } else { cc_submit_response_code(wp, response_code); } } - if (wp->response_time) - { - double secs = 0; - gettimeofday (&end, NULL); - secs += end.tv_sec - start.tv_sec; - secs += (end.tv_usec - start.tv_usec) / 1000000.0; - cc_submit_response_time (wp, secs); - } - for (wm = wp->matches; wm != NULL; wm = wm->next) { cu_match_value_t *mv; @@ -682,6 +683,7 @@ static int cc_read_page (web_page_t *wp) /* {{{ */ } cc_submit (wp, wm, mv); + match_value_reset (mv); } /* for (wm = wp->matches; wm != NULL; wm = wm->next) */ return (0);