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

index 9dd162e..35958b3 100644 (file)
@@ -1673,6 +1673,8 @@ Examples:
 
 =item B<Post> I<Body>
 
+=item B<Timeout> I<Milliseconds>
+
 These options behave exactly equivalent to the appropriate options of the
 I<cURL plugin>. Please see there for a detailed description.
 
index c9f0651..c67d9a3 100644 (file)
@@ -81,6 +81,7 @@ struct cx_s /* {{{ */
   _Bool verify_host;
   char *cacert;
   char *post_body;
+  int timeout;
   struct curl_slist *headers;
 
   cx_namespace_t *namespaces;
@@ -884,6 +885,12 @@ static int cx_init_curl (cx_t *db) /* {{{ */
   if (db->post_body != NULL)
     curl_easy_setopt (db->curl, CURLOPT_POSTFIELDS, db->post_body);
 
+  if (db->timeout >= 0)
+    curl_easy_setopt (db->curl, CURLOPT_TIMEOUT_MS, db->timeout);
+  else
+    curl_easy_setopt (db->curl, CURLOPT_TIMEOUT_MS,
+       CDTIME_T_TO_MS(plugin_get_interval()));
+
   return (0);
 } /* }}} int cx_init_curl */
 
@@ -909,6 +916,8 @@ static int cx_config_add_url (oconfig_item_t *ci) /* {{{ */
   }
   memset (db, 0, sizeof (*db));
 
+  db->timeout = -1;
+
   if (strcasecmp ("URL", ci->key) == 0)
   {
     status = cf_util_get_string (ci, &db->url);
@@ -954,6 +963,8 @@ static int cx_config_add_url (oconfig_item_t *ci) /* {{{ */
       status = cf_util_get_string (child, &db->post_body);
     else if (strcasecmp ("Namespace", child->key) == 0)
       status = cx_config_add_namespace (db, child);
+    else if (strcasecmp ("Timeout", child->key) == 0)
+      status = cf_util_get_int (child, &db->timeout);
     else
     {
       WARNING ("curl_xml plugin: Option `%s' not allowed here.", child->key);