From: Ruben Kerkhof Date: Fri, 7 Jul 2017 16:40:55 +0000 (+0200) Subject: Merge branch 'collectd-5.6' into collectd-5.7 X-Git-Tag: collectd-5.8.0~1^2~19 X-Git-Url: https://git.octo.it/?p=collectd.git;a=commitdiff_plain;h=f374b72032a227a75b6bc9ae574cd28abbc16f24;hp=-c Merge branch 'collectd-5.6' into collectd-5.7 --- f374b72032a227a75b6bc9ae574cd28abbc16f24 diff --combined src/apache.c index eaef61b1,50784e5f..29c36cc0 --- a/src/apache.c +++ b/src/apache.c @@@ -217,19 -217,19 +217,19 @@@ static int config_add(oconfig_item_t *c } if (status == 0) { - user_data_t ud = {.data = st, .free_func = apache_free}; - char callback_name[3 * DATA_MAX_NAME_LEN]; ssnprintf(callback_name, sizeof(callback_name), "apache/%s/%s", (st->host != NULL) ? st->host : hostname_g, (st->name != NULL) ? st->name : "default"); - status = plugin_register_complex_read(/* group = */ NULL, - /* name = */ callback_name, - /* callback = */ apache_read_host, - /* interval = */ 0, - /* user_data = */ &ud); + status = plugin_register_complex_read( + /* group = */ NULL, + /* name = */ callback_name, + /* callback = */ apache_read_host, + /* interval = */ 0, &(user_data_t){ + .data = st, .free_func = apache_free, + }); } if (status != 0) { @@@ -328,7 -328,6 +328,6 @@@ static int init_host(apache_t *st) /* { #endif } - curl_easy_setopt(st->curl, CURLOPT_URL, st->url); curl_easy_setopt(st->curl, CURLOPT_FOLLOWLOCATION, 1L); curl_easy_setopt(st->curl, CURLOPT_MAXREDIRS, 50L); @@@ -357,8 -356,8 +356,8 @@@ static void submit_value(const char *ty vl.values = &value; vl.values_len = 1; - sstrncpy(vl.host, (st->host != NULL) ? st->host : hostname_g, - sizeof(vl.host)); + if (st->host != NULL) + sstrncpy(vl.host, st->host, sizeof(vl.host)); sstrncpy(vl.plugin, "apache", sizeof(vl.plugin)); if (st->name != NULL) @@@ -372,13 -371,17 +371,13 @@@ } /* void submit_value */ static void submit_derive(const char *type, const char *type_instance, - derive_t c, apache_t *st) { - value_t v; - v.derive = c; - submit_value(type, type_instance, v, st); + derive_t d, apache_t *st) { + submit_value(type, type_instance, (value_t){.derive = d}, st); } /* void submit_derive */ static void submit_gauge(const char *type, const char *type_instance, gauge_t g, apache_t *st) { - value_t v; - v.gauge = g; - submit_value(type, type_instance, v, st); + submit_value(type, type_instance, (value_t){.gauge = g}, st); } /* void submit_gauge */ static void submit_scoreboard(char *buf, apache_t *st) { @@@ -510,6 -513,9 +509,9 @@@ static int apache_read_host(user_data_ assert(st->curl != NULL); st->apache_buffer_fill = 0; + + curl_easy_setopt(st->curl, CURLOPT_URL, st->url); + if (curl_easy_perform(st->curl) != CURLE_OK) { ERROR("apache: curl_easy_perform failed: %s", st->apache_curl_error); return (-1); diff --combined src/ascent.c index 840fe8b8,c41c896f..74cef333 --- a/src/ascent.c +++ b/src/ascent.c @@@ -110,10 -110,14 +110,10 @@@ static int config_keys_num = STATIC_ARR static int ascent_submit_gauge(const char *plugin_instance, /* {{{ */ const char *type, const char *type_instance, gauge_t value) { - value_t values[1]; value_list_t vl = VALUE_LIST_INIT; - values[0].gauge = value; - - vl.values = values; + vl.values = &(value_t){.gauge = value}; vl.values_len = 1; - sstrncpy(vl.host, hostname_g, sizeof(vl.host)); sstrncpy(vl.plugin, "ascent", sizeof(vl.plugin)); if (plugin_instance != NULL) @@@ -511,7 -515,6 +511,6 @@@ static int ascent_init(void) /* {{{ * #endif } - curl_easy_setopt(curl, CURLOPT_URL, url); curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L); curl_easy_setopt(curl, CURLOPT_MAXREDIRS, 50L); @@@ -554,6 -557,9 +553,9 @@@ static int ascent_read(void) /* {{{ * } ascent_buffer_fill = 0; + + curl_easy_setopt(curl, CURLOPT_URL, url); + if (curl_easy_perform(curl) != CURLE_OK) { ERROR("ascent plugin: curl_easy_perform failed: %s", ascent_curl_error); return (-1); diff --combined src/bind.c index 2e7c49dc,fc1fd92f..8a3148cc --- a/src/bind.c +++ b/src/bind.c @@@ -138,7 -138,7 +138,7 @@@ static const translation_info_t nsstats {"ReqBadSIG", "dns_request", "BadSIG"}, {"ReqTCP", "dns_request", "TCP"}, /* Rejects */ - {"AuthQryRej", "dns_reject", "authorative"}, + {"AuthQryRej", "dns_reject", "authoritative"}, {"RecQryRej", "dns_reject", "recursive"}, {"XfrRej", "dns_reject", "transfer"}, {"UpdateRej", "dns_reject", "update"}, @@@ -149,11 -149,11 +149,11 @@@ {"RespTSIG", "dns_response", "TSIG"}, {"RespSIG0", "dns_response", "SIG0"}, /* Queries */ - {"QryAuthAns", "dns_query", "authorative"}, + {"QryAuthAns", "dns_query", "authoritative"}, {"QryNoauthAns", "dns_query", "nonauth"}, {"QryReferral", "dns_query", "referral"}, {"QryRecursion", "dns_query", "recursion"}, - {"QryDuplicate", "dns_query", "dupliate"}, + {"QryDuplicate", "dns_query", "duplicate"}, {"QryDropped", "dns_query", "dropped"}, {"QryFailure", "dns_query", "failure"}, /* Response codes */ @@@ -163,13 -163,13 +163,13 @@@ {"QryFORMERR", "dns_rcode", "tx-FORMERR"}, {"QryNXDOMAIN", "dns_rcode", "tx-NXDOMAIN"} #if 0 - { "XfrReqDone", "type", "type_instance" }, - { "UpdateReqFwd", "type", "type_instance" }, - { "UpdateRespFwd", "type", "type_instance" }, - { "UpdateFwdFail", "type", "type_instance" }, - { "UpdateDone", "type", "type_instance" }, - { "UpdateFail", "type", "type_instance" }, - { "UpdateBadPrereq", "type", "type_instance" }, + { "XfrReqDone", "type", "type_instance" }, + { "UpdateReqFwd", "type", "type_instance" }, + { "UpdateRespFwd", "type", "type_instance" }, + { "UpdateFwdFail", "type", "type_instance" }, + { "UpdateDone", "type", "type_instance" }, + { "UpdateFail", "type", "type_instance" }, + { "UpdateBadPrereq", "type", "type_instance" }, #endif }; static int nsstats_translation_table_length = @@@ -246,12 -246,16 +246,12 @@@ static int memsummary_translation_table static void submit(time_t ts, const char *plugin_instance, /* {{{ */ const char *type, const char *type_instance, value_t value) { - value_t values[1]; value_list_t vl = VALUE_LIST_INIT; - values[0] = value; - - vl.values = values; + vl.values = &value; vl.values_len = 1; if (config_parse_time) vl.time = TIME_T_TO_CDTIME_T(ts); - sstrncpy(vl.host, hostname_g, sizeof(vl.host)); sstrncpy(vl.plugin, "bind", sizeof(vl.plugin)); if (plugin_instance) { sstrncpy(vl.plugin_instance, plugin_instance, sizeof(vl.plugin_instance)); @@@ -1598,7 -1602,6 +1598,6 @@@ static int bind_init(void) /* {{{ * curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, bind_curl_callback); curl_easy_setopt(curl, CURLOPT_USERAGENT, COLLECTD_USERAGENT); curl_easy_setopt(curl, CURLOPT_ERRORBUFFER, bind_curl_error); - curl_easy_setopt(curl, CURLOPT_URL, (url != NULL) ? url : BIND_DEFAULT_URL); curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L); curl_easy_setopt(curl, CURLOPT_MAXREDIRS, 50L); #ifdef HAVE_CURLOPT_TIMEOUT_MS @@@ -1620,6 -1623,9 +1619,9 @@@ static int bind_read(void) /* {{{ * } bind_buffer_fill = 0; + + curl_easy_setopt(curl, CURLOPT_URL, (url != NULL) ? url : BIND_DEFAULT_URL); + if (curl_easy_perform(curl) != CURLE_OK) { ERROR("bind plugin: curl_easy_perform failed: %s", bind_curl_error); return (-1); diff --combined src/curl.c index c6f0b607,fc3af6db..26ca7e7a --- a/src/curl.c +++ b/src/curl.c @@@ -347,7 -347,6 +347,6 @@@ static int cc_page_init_curl(web_page_ curl_easy_setopt(wp->curl, CURLOPT_WRITEDATA, wp); curl_easy_setopt(wp->curl, CURLOPT_USERAGENT, COLLECTD_USERAGENT); curl_easy_setopt(wp->curl, CURLOPT_ERRORBUFFER, wp->curl_errbuf); - curl_easy_setopt(wp->curl, CURLOPT_URL, wp->url); curl_easy_setopt(wp->curl, CURLOPT_FOLLOWLOCATION, 1L); curl_easy_setopt(wp->curl, CURLOPT_MAXREDIRS, 50L); @@@ -562,11 -561,15 +561,11 @@@ static int cc_init(void) /* {{{ * } /* }}} int cc_init */ static void cc_submit(const web_page_t *wp, const web_match_t *wm, /* {{{ */ - const cu_match_value_t *mv) { - value_t values[1]; + value_t value) { value_list_t vl = VALUE_LIST_INIT; - values[0] = mv->value; - - vl.values = values; + vl.values = &value; vl.values_len = 1; - sstrncpy(vl.host, hostname_g, sizeof(vl.host)); 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)); @@@ -578,10 -581,14 +577,10 @@@ static void cc_submit_response_code(const web_page_t *wp, long code) /* {{{ */ { - value_t values[1]; value_list_t vl = VALUE_LIST_INIT; - values[0].gauge = code; - - vl.values = values; + vl.values = &(value_t){.gauge = (gauge_t)code}; vl.values_len = 1; - sstrncpy(vl.host, hostname_g, sizeof(vl.host)); sstrncpy(vl.plugin, "curl", sizeof(vl.plugin)); sstrncpy(vl.plugin_instance, wp->instance, sizeof(vl.plugin_instance)); sstrncpy(vl.type, "response_code", sizeof(vl.type)); @@@ -590,11 -597,15 +589,11 @@@ } /* }}} void cc_submit_response_code */ static void cc_submit_response_time(const web_page_t *wp, /* {{{ */ - cdtime_t response_time) { - value_t values[1]; + gauge_t response_time) { value_list_t vl = VALUE_LIST_INIT; - values[0].gauge = CDTIME_T_TO_DOUBLE(response_time); - - vl.values = values; + vl.values = &(value_t){.gauge = response_time}; vl.values_len = 1; - sstrncpy(vl.host, hostname_g, sizeof(vl.host)); sstrncpy(vl.plugin, "curl", sizeof(vl.plugin)); sstrncpy(vl.plugin_instance, wp->instance, sizeof(vl.plugin_instance)); sstrncpy(vl.type, "response_time", sizeof(vl.type)); @@@ -611,6 -622,9 +610,9 @@@ static int cc_read_page(web_page_t *wp start = cdtime(); wp->buffer_fill = 0; + + curl_easy_setopt(wp->curl, CURLOPT_URL, wp->url); + status = curl_easy_perform(wp->curl); if (status != CURLE_OK) { ERROR("curl plugin: curl_easy_perform failed with status %i: %s", status, @@@ -619,7 -633,7 +621,7 @@@ } if (wp->response_time) - cc_submit_response_time(wp, cdtime() - start); + cc_submit_response_time(wp, CDTIME_T_TO_DOUBLE(cdtime() - start)); if (wp->stats != NULL) curl_stats_dispatch(wp->stats, wp->curl, hostname_g, "curl", wp->instance); @@@ -650,7 -664,7 +652,7 @@@ continue; } - cc_submit(wp, wm, mv); + cc_submit(wp, wm, mv->value); match_value_reset(mv); } /* for (wm = wp->matches; wm != NULL; wm = wm->next) */ diff --combined src/curl_json.c index 6f31145c,c0f93465..8f6382b8 --- a/src/curl_json.c +++ b/src/curl_json.c @@@ -562,7 -562,6 +562,6 @@@ static int cj_init_curl(cj_t *db) /* {{ curl_easy_setopt(db->curl, CURLOPT_WRITEDATA, db); curl_easy_setopt(db->curl, CURLOPT_USERAGENT, COLLECTD_USERAGENT); curl_easy_setopt(db->curl, CURLOPT_ERRORBUFFER, db->curl_errbuf); - curl_easy_setopt(db->curl, CURLOPT_URL, db->url); curl_easy_setopt(db->curl, CURLOPT_FOLLOWLOCATION, 1L); curl_easy_setopt(db->curl, CURLOPT_MAXREDIRS, 50L); @@@ -716,11 -715,10 +715,11 @@@ static int cj_config_add_url(oconfig_it cb_name = ssnprintf_alloc("curl_json-%s-%s", db->instance, db->url ? db->url : db->sock); - user_data_t ud = {.data = db, .free_func = cj_free}; - plugin_register_complex_read(/* group = */ NULL, cb_name, cj_read, - /* interval = */ db->interval, &ud); + /* interval = */ db->interval, + &(user_data_t){ + .data = db, .free_func = cj_free, + }); sfree(cb_name); } else { cj_free(db); @@@ -841,12 -839,13 +840,13 @@@ static int cj_curl_perform(cj_t *db) / int status; long rc; char *url; - url = db->url; + + curl_easy_setopt(db->curl, CURLOPT_URL, db->url); status = curl_easy_perform(db->curl); if (status != CURLE_OK) { ERROR("curl_json plugin: curl_easy_perform failed with status %i: %s (%s)", - status, db->curl_errbuf, url); + status, db->curl_errbuf, db->url); return (-1); } if (db->stats != NULL) diff --combined src/curl_xml.c index 4e4c6f99,23aa8555..7c422c71 --- a/src/curl_xml.c +++ b/src/curl_xml.c @@@ -602,13 -602,15 +602,15 @@@ static int cx_curl_perform(cx_t *db, CU long rc; char *ptr; char *url; - url = db->url; db->buffer_fill = 0; + + curl_easy_setopt(db->curl, CURLOPT_URL, db->url); + status = curl_easy_perform(curl); if (status != CURLE_OK) { ERROR("curl_xml plugin: curl_easy_perform failed with status %i: %s (%s)", - status, db->curl_errbuf, url); + status, db->curl_errbuf, db->url); return (-1); } if (db->stats != NULL) @@@ -817,7 -819,6 +819,6 @@@ static int cx_init_curl(cx_t *db) /* {{ curl_easy_setopt(db->curl, CURLOPT_WRITEDATA, db); curl_easy_setopt(db->curl, CURLOPT_USERAGENT, COLLECTD_USERAGENT); curl_easy_setopt(db->curl, CURLOPT_ERRORBUFFER, db->curl_errbuf); - curl_easy_setopt(db->curl, CURLOPT_URL, db->url); curl_easy_setopt(db->curl, CURLOPT_FOLLOWLOCATION, 1L); curl_easy_setopt(db->curl, CURLOPT_MAXREDIRS, 50L); @@@ -966,11 -967,10 +967,11 @@@ static int cx_config_add_url(oconfig_it cb_name = ssnprintf_alloc("curl_xml-%s-%s", db->instance, db->url); - user_data_t ud = {.data = db, .free_func = cx_free}; - plugin_register_complex_read(/* group = */ "curl_xml", cb_name, cx_read, - /* interval = */ 0, &ud); + /* interval = */ 0, + &(user_data_t){ + .data = db, .free_func = cx_free, + }); sfree(cb_name); } else { cx_free(db); diff --combined src/nginx.c index ffc545c4,e320ea71..060eae23 --- a/src/nginx.c +++ b/src/nginx.c @@@ -133,10 -133,6 +133,6 @@@ static int init(void) #endif } - if (url != NULL) { - curl_easy_setopt(curl, CURLOPT_URL, url); - } - curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L); curl_easy_setopt(curl, CURLOPT_MAXREDIRS, 50L); @@@ -182,8 -178,10 +178,8 @@@ static void submit(const char *type, co return; vl.values = values; - vl.values_len = 1; - sstrncpy(vl.host, hostname_g, sizeof(vl.host)); + vl.values_len = STATIC_ARRAY_SIZE(values); sstrncpy(vl.plugin, "nginx", sizeof(vl.plugin)); - sstrncpy(vl.plugin_instance, "", sizeof(vl.plugin_instance)); sstrncpy(vl.type, type, sizeof(vl.type)); if (inst != NULL) @@@ -207,6 -205,9 +203,9 @@@ static int nginx_read(void) return (-1); nginx_buffer_len = 0; + + curl_easy_setopt(curl, CURLOPT_URL, url); + if (curl_easy_perform(curl) != CURLE_OK) { WARNING("nginx plugin: curl_easy_perform failed: %s", nginx_curl_error); return (-1); @@@ -225,7 -226,7 +224,7 @@@ /* * Active connections: 291 * server accepts handled requests - * 16630948 16630948 31070465 + * 101059015 100422216 347910649 * Reading: 6 Writing: 179 Waiting: 106 */ for (int i = 0; i < lines_num; i++) { @@@ -239,11 -240,7 +238,11 @@@ } else if ((atoll(fields[0]) != 0) && (atoll(fields[1]) != 0) && (atoll(fields[2]) != 0)) { submit("connections", "accepted", atoll(fields[0])); + /* TODO: The legacy metric "handled", which is the sum of "accepted" and + * "failed", is reported for backwards compatibility only. Remove in the + * next major version. */ submit("connections", "handled", atoll(fields[1])); + submit("connections", "failed", (atoll(fields[0]) - atoll(fields[1]))); submit("nginx_requests", NULL, atoll(fields[2])); } } else if (fields_num == 6) { diff --combined src/write_http.c index c1b3f0b0,4a92ac75..46889280 --- a/src/write_http.c +++ b/src/write_http.c @@@ -114,6 -114,7 +114,7 @@@ static int wh_post_nolock(wh_callback_ { int status = 0; + curl_easy_setopt(cb->curl, CURLOPT_URL, cb->location); curl_easy_setopt(cb->curl, CURLOPT_POSTFIELDS, data); status = curl_easy_perform(cb->curl); @@@ -163,7 -164,6 +164,6 @@@ static int wh_callback_init(wh_callback curl_easy_setopt(cb->curl, CURLOPT_HTTPHEADER, cb->headers); curl_easy_setopt(cb->curl, CURLOPT_ERRORBUFFER, cb->curl_errbuf); - curl_easy_setopt(cb->curl, CURLOPT_URL, cb->location); curl_easy_setopt(cb->curl, CURLOPT_FOLLOWLOCATION, 1L); curl_easy_setopt(cb->curl, CURLOPT_MAXREDIRS, 50L); @@@ -390,9 -390,6 +390,9 @@@ static int wh_write_command(const data_ } assert(command_len < cb->send_buffer_free); + /* Make scan-build happy. */ + assert(cb->send_buffer != NULL); + /* `command_len + 1' because `command_len' does not include the * trailing null byte. Neither does `send_buffer_fill'. */ memcpy(cb->send_buffer + cb->send_buffer_fill, command, command_len + 1);