From: Marc Fournier Date: Wed, 25 Mar 2015 23:01:54 +0000 (+0100) Subject: write_http: adapt the behaviour of Timeout option X-Git-Tag: collectd-5.5.0~57^2~3 X-Git-Url: https://git.octo.it/?p=collectd.git;a=commitdiff_plain;h=aa434cf4f73aec28334943ce04f8e5e2e370f9c3 write_http: adapt the behaviour of Timeout option - rename PostTimeoutSec parameter to Timeout - change Timeout to take milliseconds rather than seconds, for the sake of consistency: collectd allow working at the sub-second scale if need be, so it's a shame to restrain this here. - do *not* set the default timeout to the value of Interval. Rationale: what matters here is that each POST request completes before the send buffer fills up again. How fast the send buffer fills up completely depends on how much data is collected. Interval is unrelated to this, and unlike read plugins, I don't think it makes a good value to use as the default timeout. --- diff --git a/src/collectd.conf.pod b/src/collectd.conf.pod index a0d6f892..092f0b5c 100644 --- a/src/collectd.conf.pod +++ b/src/collectd.conf.pod @@ -7149,10 +7149,18 @@ and aborted. Sets bytes per second value for B to make a decission if connection is too slow. Default value is C<100>. -=item B I +=item B I + +Sets the maximum time in milliseconds given for HTTP POST operations to +complete. When this limit is reached, the POST operation will be aborted, and +all the data in the current send buffer will probably be lost. Defaults to 0, +which means the connection never times out. -If defined, provided positive integer value will be used to set maximum time -in seconds that you allow for transfer(http post) operation to take. +The C plugin regularly submits the collected values to the HTTP +server. How frequently this happens depends on how much data you are collecting +and the size of B. The optimal value to set B to is +slightly below this interval, which you can estimate by monitoring the network +traffic between collectd and the HTTP server. =back diff --git a/src/write_http.c b/src/write_http.c index 0e1bc734..2c59d64b 100644 --- a/src/write_http.c +++ b/src/write_http.c @@ -63,7 +63,7 @@ struct wh_callback_s _Bool abort_on_slow; int low_limit_bytes; time_t interval; - int post_timeout; + int timeout; #define WH_FORMAT_COMMAND 0 #define WH_FORMAT_JSON 1 @@ -133,8 +133,8 @@ static int wh_callback_init (wh_callback_t *cb) /* {{{ */ curl_easy_setopt (cb->curl, CURLOPT_LOW_SPEED_TIME, cb->interval); } - if (cb->post_timeout > 0) - curl_easy_setopt (cb->curl, CURLOPT_TIMEOUT, cb->post_timeout); + if (cb->timeout > 0) + curl_easy_setopt (cb->curl, CURLOPT_TIMEOUT_MS, cb->timeout); curl_easy_setopt (cb->curl, CURLOPT_NOSIGNAL, 1L); curl_easy_setopt (cb->curl, CURLOPT_USERAGENT, COLLECTD_USERAGENT); @@ -539,7 +539,7 @@ static int wh_config_node (oconfig_item_t *ci) /* {{{ */ cb->format = WH_FORMAT_COMMAND; cb->sslversion = CURL_SSLVERSION_DEFAULT; cb->low_limit_bytes = WH_DEFAULT_LOW_LIMIT_BYTES_PER_SEC; - cb->post_timeout = 0; + cb->timeout = 0; pthread_mutex_init (&cb->send_lock, /* attr = */ NULL); @@ -611,8 +611,8 @@ static int wh_config_node (oconfig_item_t *ci) /* {{{ */ cf_util_get_boolean (child,&cb->abort_on_slow); else if (strcasecmp ("LowLimitBytesPerSec", child->key) == 0) cf_util_get_int (child, &cb->low_limit_bytes); - else if (strcasecmp ("PostTimeoutSec", child->key) == 0) - cf_util_get_int (child, &cb->post_timeout); + else if (strcasecmp ("Timeout", child->key) == 0) + cf_util_get_int (child, &cb->timeout); else { ERROR ("write_http plugin: Invalid configuration " @@ -631,10 +631,6 @@ static int wh_config_node (oconfig_item_t *ci) /* {{{ */ if (cb->abort_on_slow) cb->interval = CDTIME_T_TO_TIME_T(plugin_get_interval()); - if (cb->post_timeout == 0) - //setting default timeout to plugin interval. - cb->post_timeout = CDTIME_T_TO_TIME_T(plugin_get_interval()); - /* Determine send_buffer_size. */ cb->send_buffer_size = WRITE_HTTP_DEFAULT_BUFFER_SIZE; if (buffer_size >= 1024)