X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=src%2Fwrite_http.c;h=0a13444b3283d51ece36041d527cf6e395f54a12;hb=799ef5daf3d87e11efe18922fec943af5e0e6ee2;hp=a7aafec888037589dd0218203e1677784553d50a;hpb=80440c3c336e528063a6690317987fec5cbfda80;p=collectd.git diff --git a/src/write_http.c b/src/write_http.c index a7aafec8..0a13444b 100644 --- a/src/write_http.c +++ b/src/write_http.c @@ -88,7 +88,7 @@ static int wh_send_buffer (wh_callback_t *cb) /* {{{ */ curl_easy_setopt (cb->curl, CURLOPT_POSTFIELDS, cb->send_buffer); status = curl_easy_perform (cb->curl); - if (status != 0) + if (status != CURLE_OK) { ERROR ("write_http plugin: curl_easy_perform failed with " "status %i: %s", @@ -111,6 +111,7 @@ static int wh_callback_init (wh_callback_t *cb) /* {{{ */ return (-1); } + curl_easy_setopt (cb->curl, CURLOPT_NOSIGNAL, 1L); curl_easy_setopt (cb->curl, CURLOPT_USERAGENT, PACKAGE_NAME"/"PACKAGE_VERSION); headers = NULL; @@ -146,9 +147,9 @@ static int wh_callback_init (wh_callback_t *cb) /* {{{ */ curl_easy_setopt (cb->curl, CURLOPT_HTTPAUTH, CURLAUTH_ANY); } - curl_easy_setopt (cb->curl, CURLOPT_SSL_VERIFYPEER, cb->verify_peer); + curl_easy_setopt (cb->curl, CURLOPT_SSL_VERIFYPEER, (long) cb->verify_peer); curl_easy_setopt (cb->curl, CURLOPT_SSL_VERIFYHOST, - cb->verify_host ? 2 : 0); + cb->verify_host ? 2L : 0L); if (cb->cacert != NULL) curl_easy_setopt (cb->curl, CURLOPT_CAINFO, cb->cacert); @@ -278,7 +279,7 @@ static int wh_value_list_to_string (char *buffer, /* {{{ */ size_t offset = 0; int status; int i; - gauge_t *rates = NULL; + gauge_t *rates = NULL; assert (0 == strcmp (ds->type, vl->type)); @@ -304,42 +305,40 @@ static int wh_value_list_to_string (char *buffer, /* {{{ */ BUFFER_ADD ("%lu", (unsigned long) vl->time); for (i = 0; i < ds->ds_num; i++) -{ - if (ds->ds[i].type == DS_TYPE_GAUGE) - BUFFER_ADD (":%f", vl->values[i].gauge); - else if (ds->ds[i].type == DS_TYPE_COUNTER) { - if (cb->store_rates != 0) + if (ds->ds[i].type == DS_TYPE_GAUGE) + BUFFER_ADD (":%f", vl->values[i].gauge); + else if (cb->store_rates) { - if (rates == NULL) - rates = uc_get_rate (ds, vl); - if (rates == NULL) - { - WARNING ("write_http plugin: " - "uc_get_rate failed."); - return (-1); - } - BUFFER_ADD (":%lf", rates[i]); + if (rates == NULL) + rates = uc_get_rate (ds, vl); + if (rates == NULL) + { + WARNING ("write_http plugin: " + "uc_get_rate failed."); + return (-1); + } + BUFFER_ADD (":%g", rates[i]); } - else + else if (ds->ds[i].type == DS_TYPE_COUNTER) BUFFER_ADD (":%llu", vl->values[i].counter); - } - else if (ds->ds[i].type == DS_TYPE_DERIVE) - BUFFER_ADD (":%"PRIi64, vl->values[i].derive); - else if (ds->ds[i].type == DS_TYPE_ABSOLUTE) - BUFFER_ADD (":%"PRIu64, vl->values[i].absolute); - else - { - ERROR ("write_http plugin: Unknown data source type: %i", - ds->ds[i].type); - return (-1); - } -} /* for ds->ds_num */ + else if (ds->ds[i].type == DS_TYPE_DERIVE) + BUFFER_ADD (":%"PRIi64, vl->values[i].derive); + else if (ds->ds[i].type == DS_TYPE_ABSOLUTE) + BUFFER_ADD (":%"PRIu64, vl->values[i].absolute); + else + { + ERROR ("write_http plugin: Unknown data source type: %i", + ds->ds[i].type); + sfree (rates); + return (-1); + } + } /* for ds->ds_num */ #undef BUFFER_ADD -sfree (rates); -return (0); + sfree (rates); + return (0); } /* }}} int wh_value_list_to_string */ static int wh_write_command (const data_set_t *ds, const value_list_t *vl, /* {{{ */ @@ -448,7 +447,7 @@ static int wh_write_json (const data_set_t *ds, const value_list_t *vl, /* {{{ * status = format_json_value_list (cb->send_buffer, &cb->send_buffer_fill, &cb->send_buffer_free, - ds, vl); + ds, vl, cb->store_rates); if (status == (-ENOMEM)) { status = wh_flush_nolock (/* timeout = */ -1, cb); @@ -462,7 +461,7 @@ static int wh_write_json (const data_set_t *ds, const value_list_t *vl, /* {{{ * status = format_json_value_list (cb->send_buffer, &cb->send_buffer_fill, &cb->send_buffer_free, - ds, vl); + ds, vl, cb->store_rates); } if (status != 0) { @@ -657,9 +656,18 @@ static int wh_config (oconfig_item_t *ci) /* {{{ */ return (0); } /* }}} int wh_config */ +static int wh_init (void) /* {{{ */ +{ + /* Call this while collectd is still single-threaded to avoid + * initialization issues in libgcrypt. */ + curl_global_init (CURL_GLOBAL_SSL); + return (0); +} /* }}} int wh_init */ + void module_register (void) /* {{{ */ { plugin_register_complex_config ("write_http", wh_config); + plugin_register_init ("write_http", wh_init); } /* }}} void module_register */ /* vim: set fdm=marker sw=8 ts=8 tw=78 et : */