X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=src%2Fcurl_json.c;h=2ddaff3594d47663277deb886603e290a1363723;hb=7a6887ad7eef33e04bcb0720c213d05fd9be8a59;hp=988ed58df3442459d23ef25b20894df6f82ae21e;hpb=9b967a770f38099336c3652986d93c8b4d610a36;p=collectd.git diff --git a/src/curl_json.c b/src/curl_json.c index 988ed58d..2ddaff35 100644 --- a/src/curl_json.c +++ b/src/curl_json.c @@ -26,6 +26,7 @@ #include "plugin.h" #include "configfile.h" #include "utils_avltree.h" +#include "utils_complain.h" #include #include @@ -144,9 +145,31 @@ static int cj_get_type (cj_key_t *key) ds = plugin_get_ds (key->type); if (ds == NULL) - return -1; /* let plugin_write do the complaining */ - else - return ds->ds[0].type; /* XXX support ds->ds_len > 1 */ + { + static char type[DATA_MAX_NAME_LEN] = "!!!invalid!!!"; + + assert (key->type != NULL); + if (strcmp (type, key->type) != 0) + { + ERROR ("curl_json plugin: Unable to look up DS type \"%s\".", + key->type); + sstrncpy (type, key->type, sizeof (type)); + } + + return -1; + } + else if (ds->ds_num > 1) + { + static c_complain_t complaint = C_COMPLAIN_INIT_STATIC; + + c_complain_once (LOG_WARNING, &complaint, + "curl_json plugin: The type \"%s\" has more than one data source. " + "This is currently not supported. I will return the type of the " + "first data source, but this will likely lead to problems later on.", + key->type); + } + + return ds->ds[0].type; } /* yajl callbacks */ @@ -498,7 +521,7 @@ static int cj_init_curl (cj_t *db) /* {{{ */ return (-1); } - curl_easy_setopt (db->curl, CURLOPT_NOSIGNAL, 1); + curl_easy_setopt (db->curl, CURLOPT_NOSIGNAL, 1L); curl_easy_setopt (db->curl, CURLOPT_WRITEFUNCTION, cj_curl_callback); curl_easy_setopt (db->curl, CURLOPT_WRITEDATA, db); curl_easy_setopt (db->curl, CURLOPT_USERAGENT, @@ -526,9 +549,9 @@ static int cj_init_curl (cj_t *db) /* {{{ */ curl_easy_setopt (db->curl, CURLOPT_USERPWD, db->credentials); } - curl_easy_setopt (db->curl, CURLOPT_SSL_VERIFYPEER, (int) db->verify_peer); + curl_easy_setopt (db->curl, CURLOPT_SSL_VERIFYPEER, (long) db->verify_peer); curl_easy_setopt (db->curl, CURLOPT_SSL_VERIFYHOST, - (int) (db->verify_host ? 2 : 0)); + db->verify_host ? 2L : 0L); if (db->cacert != NULL) curl_easy_setopt (db->curl, CURLOPT_CAINFO, db->cacert); @@ -704,8 +727,13 @@ static void cj_submit (cj_t *db, cj_key_t *key, value_t *value) /* {{{ */ host = db->host; if (key->instance == NULL) - ssnprintf (vl.type_instance, sizeof (vl.type_instance), "%s-%s", - db->state[db->depth-1].name, db->state[db->depth].name); + { + if ((db->depth == 0) || (strcmp ("", db->state[db->depth-1].name) == 0)) + sstrncpy (vl.type_instance, db->state[db->depth].name, sizeof (vl.type_instance)); + else + ssnprintf (vl.type_instance, sizeof (vl.type_instance), "%s-%s", + db->state[db->depth-1].name, db->state[db->depth].name); + } else sstrncpy (vl.type_instance, key->instance, sizeof (vl.type_instance)); @@ -763,7 +791,11 @@ static int cj_curl_perform (cj_t *db, CURL *curl) /* {{{ */ return (-1); } - status = yajl_parse_complete (db->yajl); +#if HAVE_YAJL_V2 + status = yajl_complete_parse(db->yajl); +#else + status = yajl_parse_complete(db->yajl); +#endif if (status != yajl_status_ok) { unsigned char *errmsg;