X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=src%2Fcurl_json.c;h=2dac7479308df41485226c947d03739d2c394d4f;hb=3fae5596643f1e361eb18c3d65448f8bc02fdd80;hp=b19730b855a47706be9313740dc685cd4e1ac133;hpb=38909dcf1dcb596c5f525c6bb25cf89c046013b5;p=collectd.git diff --git a/src/curl_json.c b/src/curl_json.c index b19730b8..2dac7479 100644 --- a/src/curl_json.c +++ b/src/curl_json.c @@ -27,6 +27,7 @@ #include "configfile.h" #include "utils_avltree.h" #include "utils_complain.h" +#include "utils_curl_stats.h" #include #include @@ -78,6 +79,7 @@ struct cj_s /* {{{ */ char *post_body; cdtime_t interval; int timeout; + curl_stats_t *stats; CURL *curl; char curl_errbuf[CURL_ERROR_SIZE]; @@ -432,6 +434,7 @@ static void cj_free (void *arg) /* {{{ */ sfree (db->cacert); sfree (db->post_body); curl_slist_free_all (db->headers); + curl_stats_destroy (db->stats); sfree (db); } /* }}} void cj_free */ @@ -726,6 +729,12 @@ static int cj_config_add_url (oconfig_item_t *ci) /* {{{ */ status = cf_util_get_cdtime(child, &db->interval); else if (strcasecmp ("Timeout", child->key) == 0) status = cf_util_get_int (child, &db->timeout); + else if (strcasecmp ("Statistics", child->key) == 0) + { + db->stats = curl_stats_from_config (child); + if (db->stats == NULL) + status = -1; + } else { WARNING ("curl_json plugin: Option `%s' not allowed here.", child->key); @@ -751,7 +760,7 @@ static int cj_config_add_url (oconfig_item_t *ci) /* {{{ */ /* If all went well, register this database for reading */ if (status == 0) { - user_data_t ud; + user_data_t ud = { 0 }; char *cb_name; if (db->instance == NULL) @@ -760,7 +769,6 @@ static int cj_config_add_url (oconfig_item_t *ci) /* {{{ */ DEBUG ("curl_json plugin: Registering new read callback: %s", db->instance); - memset (&ud, 0, sizeof (ud)); ud.data = (void *) db; ud.free_func = cj_free; @@ -823,21 +831,22 @@ static int cj_config (oconfig_item_t *ci) /* {{{ */ /* }}} End of configuration handling functions */ +static const char *cj_host (cj_t *db) /* {{{ */ +{ + if ((db->host == NULL) + || (strcmp ("", db->host) == 0) + || (strcmp (CJ_DEFAULT_HOST, db->host) == 0)) + return hostname_g; + return db->host; +} /* }}} cj_host */ + static void cj_submit (cj_t *db, cj_key_t *key, value_t *value) /* {{{ */ { value_list_t vl = VALUE_LIST_INIT; - char *host; vl.values = value; vl.values_len = 1; - if ((db->host == NULL) - || (strcmp ("", db->host) == 0) - || (strcmp (CJ_DEFAULT_HOST, db->host) == 0)) - host = hostname_g; - else - host = db->host; - if (key->instance == NULL) { int i, len = 0; @@ -848,7 +857,7 @@ static void cj_submit (cj_t *db, cj_key_t *key, value_t *value) /* {{{ */ else sstrncpy (vl.type_instance, key->instance, sizeof (vl.type_instance)); - sstrncpy (vl.host, host, sizeof (vl.host)); + sstrncpy (vl.host, cj_host (db), sizeof (vl.host)); sstrncpy (vl.plugin, "curl_json", sizeof (vl.plugin)); sstrncpy (vl.plugin_instance, db->instance, sizeof (vl.plugin_instance)); sstrncpy (vl.type, key->type, sizeof (vl.type)); @@ -911,6 +920,8 @@ static int cj_curl_perform(cj_t *db) /* {{{ */ status, db->curl_errbuf, url); return (-1); } + if (db->stats != NULL) + curl_stats_dispatch (db->stats, db->curl, cj_host (db), "curl_json", db->instance); curl_easy_getinfo(db->curl, CURLINFO_EFFECTIVE_URL, &url); curl_easy_getinfo(db->curl, CURLINFO_RESPONSE_CODE, &rc); @@ -956,9 +967,9 @@ static int cj_perform (cj_t *db) /* {{{ */ } #if HAVE_YAJL_V2 - status = yajl_complete_parse(db->yajl); + status = yajl_complete_parse(db->yajl); #else - status = yajl_parse_complete(db->yajl); + status = yajl_parse_complete(db->yajl); #endif if (status != yajl_status_ok) {