apache: Add support for specifying a connection timeout
authorMarc Fournier <marc.fournier@camptocamp.com>
Sat, 4 Apr 2015 20:26:34 +0000 (22:26 +0200)
committerMarc Fournier <marc.fournier@camptocamp.com>
Sat, 4 Apr 2015 20:26:34 +0000 (22:26 +0200)
src/apache.c
src/collectd.conf.pod

index 1099248..9e91b80 100644 (file)
@@ -53,6 +53,7 @@ struct apache_s
        char apache_curl_error[CURL_ERROR_SIZE];
        size_t apache_buffer_size;
        size_t apache_buffer_fill;
+       int timeout;
        CURL *curl;
 }; /* apache_s */
 
@@ -179,6 +180,8 @@ static int config_add (oconfig_item_t *ci)
        }
        memset (st, 0, sizeof (*st));
 
+       st->timeout = -1;
+
        status = cf_util_get_string (ci, &st->name);
        if (status != 0)
        {
@@ -207,6 +210,8 @@ static int config_add (oconfig_item_t *ci)
                        status = cf_util_get_string (child, &st->cacert);
                else if (strcasecmp ("Server", child->key) == 0)
                        status = cf_util_get_string (child, &st->server);
+               else if (strcasecmp ("Timeout", child->key) == 0)
+                       status = cf_util_get_int (child, &st->timeout);
                else
                {
                        WARNING ("apache plugin: Option `%s' not allowed here.",
@@ -367,6 +372,12 @@ static int init_host (apache_t *st) /* {{{ */
        if (st->cacert != NULL)
                curl_easy_setopt (st->curl, CURLOPT_CAINFO, st->cacert);
 
+       if (st->timeout >= 0)
+               curl_easy_setopt (st->curl, CURLOPT_TIMEOUT_MS, st->timeout);
+       else
+               curl_easy_setopt (st->curl, CURLOPT_TIMEOUT_MS,
+                               CDTIME_T_TO_MS(plugin_get_interval()));
+
        return (0);
 } /* }}} int init_host */
 
index 35958b3..07ef54f 100644 (file)
@@ -775,6 +775,12 @@ File that holds one or more SSL certificates. If you want to use HTTPS you will
 possibly need this option. What CA certificates come bundled with C<libcurl>
 and are checked by default depends on the distribution you use.
 
+=item B<Timeout> I<Milliseconds>
+
+The B<Timeout> option sets the overall timeout for HTTP requests, in
+milliseconds. By default, the configured B<Interval> is used to set the
+timeout.
+
 =back
 
 =head2 Plugin C<apcups>