From 903b0e9a002e0839943c5d734f3728114272ebc1 Mon Sep 17 00:00:00 2001 From: Sebastien Douheret Date: Tue, 9 Jul 2019 00:17:39 +0200 Subject: Rework how to build dest DB URL Change-Id: I5a351d6e2f5750dcb39bd9feff71abe930c052bb Signed-off-by: Sebastien Douheret --- src/plugins/influxdb-reader.c | 2 +- src/plugins/influxdb-writer.c | 2 +- src/plugins/influxdb.c | 51 +++++++++++++++++++++++++++++++++++-------- src/plugins/influxdb.h | 4 +++- 4 files changed, 47 insertions(+), 12 deletions(-) diff --git a/src/plugins/influxdb-reader.c b/src/plugins/influxdb-reader.c index 98e5198..b6c9c25 100644 --- a/src/plugins/influxdb-reader.c +++ b/src/plugins/influxdb-reader.c @@ -225,7 +225,7 @@ static int influxdb_read(sd_event_source *s, uint64_t usec, void *userdata) char url[URL_MAXIMUM_LENGTH]; /* Safe limit for most popular web browser */ - make_url(url, sizeof(url), r_args->host, r_args->port, "query"); + make_url_db(url, sizeof(url), r_args->host, r_args->port, "query", DEFAULT_DB); curl = make_curl_query_get(source->api, url); curl_wrap_do(curl, influxdb_read_curl_cb, (void*)source->api); diff --git a/src/plugins/influxdb-writer.c b/src/plugins/influxdb-writer.c index ddf8fc6..c114ab5 100644 --- a/src/plugins/influxdb-writer.c +++ b/src/plugins/influxdb-writer.c @@ -152,7 +152,7 @@ CURL* make_curl_write_post(afb_api_t apiHandle, const char* url, json_object* me CURL* influxdb_write(afb_api_t apiHandle, const char* host, const char* port, json_object* metricJ) { char url[URL_MAXIMUM_LENGTH]; /* Safe limit for most popular web browser */ - make_url(url, sizeof(url), host, port, "write"); + make_url_db(url, sizeof(url), host, port, "write", DEFAULT_DB); return make_curl_write_post(apiHandle, url, metricJ); } diff --git a/src/plugins/influxdb.c b/src/plugins/influxdb.c index 5cc09b0..a3b61c7 100644 --- a/src/plugins/influxdb.c +++ b/src/plugins/influxdb.c @@ -32,7 +32,7 @@ CTLP_ONLOAD(plugin, ret) int err = 0; char* result; size_t result_size; - CURL* request = curl_wrap_prepare_get(DEFAULT_DBHOST ":" DEFAULT_DBPORT "/ping", NULL, NULL); + CURL* request = curl_wrap_prepare_get(get_url(NULL, NULL, "/ping"), NULL, NULL); struct reader_args r_args = { NULL, NULL, 1000000 }; plugin->context = (void*)&r_args; @@ -40,7 +40,7 @@ CTLP_ONLOAD(plugin, ret) curl_wrap_perform(request, &result, &result_size); if (curl_wrap_response_code_get(request) != 204) { - AFB_API_ERROR(plugin->api, "InfluxDB not reachable, please start it"); + AFB_API_ERROR(plugin->api, "InfluxDB not reachable on '%s', please start it", get_url(NULL, NULL, "/ping")); err = ERROR; } @@ -54,7 +54,7 @@ CTLP_CAPI(influxdb_ping, source, argsJ, eventJ) char* result; size_t result_size; - CURL* curl_req = curl_wrap_prepare_get(DEFAULT_DBHOST ":" DEFAULT_DBPORT "/ping", NULL, NULL); + CURL* curl_req = curl_wrap_prepare_get(get_url(NULL, NULL, "/ping"), NULL, NULL); curl_wrap_perform(curl_req, &result, &result_size); @@ -78,16 +78,49 @@ size_t make_url(char* url, size_t l_url, const char* host, const char* port, con host = host ? host : DEFAULT_DBHOST; port = port ? port : DEFAULT_DBPORT; - strncat(url, host, strlen(host)); + strncat(url, host, l_url - strlen(url) - 1); strcat(url, ":"); - strncat(url, port, strlen(port)); - strcat(url, "/"); - strncat(url, endpoint, strlen(endpoint)); - strcat(url, "?db=" DEFAULT_DB); + strncat(url, port, l_url - strlen(url) - 1); + if (endpoint[0] != '/') { + strncat(url, "/", l_url - strlen(url) - 1); + } + strncat(url, endpoint, l_url - strlen(url) - 1); return strlen(url); } +size_t make_url_db(char* url, size_t l_url, const char* host, const char* port, const char* endpoint, const char* db) +{ + size_t sz = make_url(url, l_url, host, port, endpoint); + + strncat(url, "?db=", l_url - strlen(url) - 1); + strncat(url, db ? db : DEFAULT_DB, l_url - strlen(url) - 1); + + return sz + strlen(db); +} + +char* get_url(const char* host, const char* port, const char* endpoint) +{ + static char* url = NULL; + static size_t urlSz = 0; + + host = host ? host : DEFAULT_DBHOST; + port = port ? port : DEFAULT_DBPORT; + + size_t newSz = strlen(host) + 1 + strlen(port) + 1 + strlen(endpoint) + 1; + if (urlSz < newSz) { + url = (char*)realloc(url, newSz); + if (!url) { + return "ERROR, cannot realloc url in get_url"; + } + urlSz = newSz; + } + + make_url(url, urlSz, host, port, endpoint); + + return url; +} + int create_database(afb_req_t request) { int ret = 0; @@ -99,7 +132,7 @@ int create_database(afb_req_t request) post_data[0] = "q=CREATE DATABASE \"" DEFAULT_DB "\""; post_data[1] = NULL; - CURL* curl_req = curl_wrap_prepare_post_unescaped(DEFAULT_DBHOST ":" DEFAULT_DBPORT "/query", NULL, " ", post_data); + CURL* curl_req = curl_wrap_prepare_post_unescaped(get_url(NULL, NULL, "/query"), NULL, " ", post_data); curl_wrap_perform(curl_req, &result, &result_size); if (curl_wrap_response_code_get(request) != 200) { diff --git a/src/plugins/influxdb.h b/src/plugins/influxdb.h index 781ab29..33eb0a2 100644 --- a/src/plugins/influxdb.h +++ b/src/plugins/influxdb.h @@ -127,6 +127,8 @@ static inline void concatenate_str(char* dest, const char* source, const char* s strncat(dest, "\"", 1); } -size_t make_url(char* url, size_t l_url, const char* host, const char* port, const char* endpoint); +extern size_t make_url_db(char* url, size_t l_url, const char* host, const char* port, const char* endpoint, const char *db); +extern size_t make_url(char* url, size_t l_url, const char* host, const char* port, const char* endpoint); +extern char* get_url(const char* host, const char* port, const char* endpoint); #endif -- cgit 1.2.3-korg