curl_json: Add support for specifying a connection timeout
authorJan Kundrát <jan.kundrat@cesnet.cz>
Wed, 25 Mar 2015 17:06:50 +0000 (18:06 +0100)
committerJan Kundrát <jan.kundrat@cesnet.cz>
Wed, 1 Apr 2015 17:49:01 +0000 (19:49 +0200)
There's apparently no need to init the config values in the `db` struct;
memset() is used earlier in the process. This patch doesn't change this
convention.

src/collectd.conf.pod
src/curl_json.c

index 788ffd4..6b76c91 100644 (file)
@@ -1562,6 +1562,7 @@ URL. By default the global B<Interval> setting will be used.
 =item B<Header> I<Header>
 
 =item B<Post> I<Body>
+=item B<Timeout> I<Timeout in miliseconds>
 
 These options behave exactly equivalent to the appropriate options of the
 I<cURL> plugin. Please see there for a detailed description.
index 09db786..4cd4aec 100644 (file)
@@ -78,6 +78,7 @@ struct cj_s /* {{{ */
   struct curl_slist *headers;
   char *post_body;
   cdtime_t interval;
+  int timeout;
 
   CURL *curl;
   char curl_errbuf[CURL_ERROR_SIZE];
@@ -649,6 +650,10 @@ static int cj_init_curl (cj_t *db) /* {{{ */
     curl_easy_setopt (db->curl, CURLOPT_HTTPHEADER, db->headers);
   if (db->post_body != NULL)
     curl_easy_setopt (db->curl, CURLOPT_POSTFIELDS, db->post_body);
+  curl_easy_setopt (db->curl, CURLOPT_TIMEOUT_MS,
+      db->timeout > 0 ?
+      db->timeout :
+      ( db->interval > 0 ? db->interval : cf_get_default_interval () ));
 
   return (0);
 } /* }}} int cj_init_curl */
@@ -720,6 +725,8 @@ static int cj_config_add_url (oconfig_item_t *ci) /* {{{ */
       status = cj_config_add_key (db, child);
     else if (strcasecmp ("Interval", child->key) == 0)
       status = cf_util_get_cdtime(child, &db->interval);
+    else if (strcasecmp ("Timeout", child->key) == 0)
+      status = cf_util_get_int (child, &db->timeout);
     else
     {
       WARNING ("curl_json plugin: Option `%s' not allowed here.", child->key);