@cryptotaxi247 / netdata-1 / commits / 29a6415a8

remove references to localhost from rrd2json - now the host is dynamic at the API calls

Costa Tsaousis (ktsaou) committed Feb 18, 2017 at 20:31 UTC 29a6415a875477fb8dcac2a06cf51f6426fbb807
3 files changed +37 -42
src/rrd2json.c
+27 -32
@@ -78,7 +78,7 @@ void rrd_stats_api_v1_chart(RRDSET *st, BUFFER *wb) {
78 rrd_stats_api_v1_chart_with_data(st, wb, NULL, NULL);
79 }
80
81 -void rrd_stats_api_v1_charts(BUFFER *wb)
81 +void rrd_stats_api_v1_charts(RRDHOST *host, BUFFER *wb)
82 {
83 size_t c, dimensions = 0, memory = 0, alarms = 0;
84 RRDSET *st;
@@ -90,15 +90,15 @@ void rrd_stats_api_v1_charts(BUFFER *wb)
90 ",\n\t\"update_every\": %d"
91 ",\n\t\"history\": %d"
92 ",\n\t\"charts\": {"
93 - , localhost->hostname
93 + , host->hostname
94 , program_version
95 , os_type
96 - , localhost->rrd_update_every
97 - , localhost->rrd_history_entries
96 + , host->rrd_update_every
97 + , host->rrd_history_entries
98 );
99
100 - pthread_rwlock_rdlock(&localhost->rrdset_root_rwlock);
101 - for(st = localhost->rrdset_root, c = 0; st ; st = st->next) {
100 + pthread_rwlock_rdlock(&host->rrdset_root_rwlock);
101 + for(st = host->rrdset_root, c = 0; st ; st = st->next) {
102 if(st->enabled && st->dimensions) {
103 if(c) buffer_strcat(wb, ",");
104 buffer_strcat(wb, "\n\t\t\"");
@@ -110,11 +110,11 @@ void rrd_stats_api_v1_charts(BUFFER *wb)
110 }
111
112 RRDCALC *rc;
113 - for(rc = localhost->alarms; rc ; rc = rc->next) {
113 + for(rc = host->alarms; rc ; rc = rc->next) {
114 if(rc->rrdset)
115 alarms++;
116 }
117 - pthread_rwlock_unlock(&localhost->rrdset_root_rwlock);
117 + pthread_rwlock_unlock(&host->rrdset_root_rwlock);
118
119 buffer_sprintf(wb, "\n\t}"
120 ",\n\t\"charts_count\": %zu"
@@ -149,16 +149,15 @@ static inline size_t prometheus_name_copy(char *d, const char *s, size_t usable)
149
150 #define PROMETHEUS_ELEMENT_MAX 256
151
152 -void rrd_stats_api_v1_charts_allmetrics_prometheus(BUFFER *wb)
153 -{
154 - pthread_rwlock_rdlock(&localhost->rrdset_root_rwlock);
152 +void rrd_stats_api_v1_charts_allmetrics_prometheus(RRDHOST *host, BUFFER *wb) {
153 + pthread_rwlock_rdlock(&host->rrdset_root_rwlock);
154
156 - char host[PROMETHEUS_ELEMENT_MAX + 1];
157 - prometheus_name_copy(host, config_get("global", "hostname", "localhost"), PROMETHEUS_ELEMENT_MAX);
155 + char hostname[PROMETHEUS_ELEMENT_MAX + 1];
156 + prometheus_name_copy(hostname, config_get("global", "hostname", "localhost"), PROMETHEUS_ELEMENT_MAX);
157
158 // for each chart
159 RRDSET *st;
161 - for(st = localhost->rrdset_root; st ; st = st->next) {
160 + for(st = host->rrdset_root; st ; st = st->next) {
161 char chart[PROMETHEUS_ELEMENT_MAX + 1];
162 prometheus_name_copy(chart, st->id, PROMETHEUS_ELEMENT_MAX);
163
@@ -191,7 +190,7 @@ void rrd_stats_api_v1_charts_allmetrics_prometheus(BUFFER *wb)
190 // (unsigned long long)((rd->last_collected_time.tv_sec * 1000) + (rd->last_collected_time.tv_usec / 1000)));
191
192 buffer_sprintf(wb, "%s_%s{instance=\"%s\"} " COLLECTED_NUMBER_FORMAT " %llu\n",
194 - chart, dimension, host, rd->last_collected_value,
193 + chart, dimension, hostname, rd->last_collected_value,
194 (unsigned long long)((rd->last_collected_time.tv_sec * 1000) + (rd->last_collected_time.tv_usec / 1000)));
195
196 }
@@ -201,7 +200,7 @@ void rrd_stats_api_v1_charts_allmetrics_prometheus(BUFFER *wb)
200 }
201 }
202
204 - pthread_rwlock_unlock(&localhost->rrdset_root_rwlock);
203 + pthread_rwlock_unlock(&host->rrdset_root_rwlock);
204 }
205
206 // ----------------------------------------------------------------------------
@@ -224,16 +223,12 @@ static inline size_t shell_name_copy(char *d, const char *s, size_t usable) {
223
224 #define SHELL_ELEMENT_MAX 100
225
227 -void rrd_stats_api_v1_charts_allmetrics_shell(BUFFER *wb)
228 -{
229 - pthread_rwlock_rdlock(&localhost->rrdset_root_rwlock);
230 -
231 - char host[SHELL_ELEMENT_MAX + 1];
232 - shell_name_copy(host, config_get("global", "hostname", "localhost"), SHELL_ELEMENT_MAX);
226 +void rrd_stats_api_v1_charts_allmetrics_shell(RRDHOST *host, BUFFER *wb) {
227 + pthread_rwlock_rdlock(&host->rrdset_root_rwlock);
228
229 // for each chart
230 RRDSET *st;
236 - for(st = localhost->rrdset_root; st ; st = st->next) {
231 + for(st = host->rrdset_root; st ; st = st->next) {
232 calculated_number total = 0.0;
233 char chart[SHELL_ELEMENT_MAX + 1];
234 shell_name_copy(chart, st->id, SHELL_ELEMENT_MAX);
@@ -271,7 +266,7 @@ void rrd_stats_api_v1_charts_allmetrics_shell(BUFFER *wb)
266 buffer_strcat(wb, "\n# NETDATA ALARMS RUNNING\n");
267
268 RRDCALC *rc;
274 - for(rc = localhost->alarms; rc ;rc = rc->next) {
269 + for(rc = host->alarms; rc ;rc = rc->next) {
270 if(!rc->rrdset) continue;
271
272 char chart[SHELL_ELEMENT_MAX + 1];
@@ -292,7 +287,7 @@ void rrd_stats_api_v1_charts_allmetrics_shell(BUFFER *wb)
287 buffer_sprintf(wb, "NETDATA_ALARM_%s_%s_STATUS=\"%s\"\n", chart, alarm, rrdcalc_status2string(rc->status));
288 }
289
295 - pthread_rwlock_unlock(&localhost->rrdset_root_rwlock);
290 + pthread_rwlock_unlock(&host->rrdset_root_rwlock);
291 }
292
293 // ----------------------------------------------------------------------------
@@ -413,7 +408,7 @@ void rrd_stats_graph_json(RRDSET *st, char *options, BUFFER *wb)
408 buffer_strcat(wb, RRD_GRAPH_JSON_FOOTER);
409 }
410
416 -void rrd_stats_all_json(BUFFER *wb)
411 +void rrd_stats_all_json(RRDHOST *host, BUFFER *wb)
412 {
413 unsigned long memory = 0;
414 long c;
@@ -421,15 +416,15 @@ void rrd_stats_all_json(BUFFER *wb)
416
417 buffer_strcat(wb, RRD_GRAPH_JSON_HEADER);
418
424 - pthread_rwlock_rdlock(&localhost->rrdset_root_rwlock);
425 - for(st = localhost->rrdset_root, c = 0; st ; st = st->next) {
419 + pthread_rwlock_rdlock(&host->rrdset_root_rwlock);
420 + for(st = host->rrdset_root, c = 0; st ; st = st->next) {
421 if(st->enabled && st->dimensions) {
422 if(c) buffer_strcat(wb, ",\n");
423 memory += rrd_stats_one_json(st, NULL, wb);
424 c++;
425 }
426 }
432 - pthread_rwlock_unlock(&localhost->rrdset_root_rwlock);
427 + pthread_rwlock_unlock(&host->rrdset_root_rwlock);
428
429 buffer_sprintf(wb, "\n\t],\n"
430 "\t\"hostname\": \"%s\",\n"
@@ -437,9 +432,9 @@ void rrd_stats_all_json(BUFFER *wb)
432 "\t\"history\": %d,\n"
433 "\t\"memory\": %lu\n"
434 "}\n"
440 - , localhost->hostname
441 - , localhost->rrd_update_every
442 - , localhost->rrd_history_entries
435 + , host->hostname
436 + , host->rrd_update_every
437 + , host->rrd_history_entries
438 , memory
439 );
440 }
src/rrd2json.h
+4 -4
@@ -59,16 +59,16 @@
59 #define RRDR_OPTION_NOT_ALIGNED 0x00001000 // do not align charts for persistant timeframes
60
61 extern void rrd_stats_api_v1_chart(RRDSET *st, BUFFER *wb);
62 -extern void rrd_stats_api_v1_charts(BUFFER *wb);
62 +extern void rrd_stats_api_v1_charts(RRDHOST *host, BUFFER *wb);
63
64 -extern void rrd_stats_api_v1_charts_allmetrics_shell(BUFFER *wb);
65 -extern void rrd_stats_api_v1_charts_allmetrics_prometheus(BUFFER *wb);
64 +extern void rrd_stats_api_v1_charts_allmetrics_shell(RRDHOST *host, BUFFER *wb);
65 +extern void rrd_stats_api_v1_charts_allmetrics_prometheus(RRDHOST *host, BUFFER *wb);
66
67 extern unsigned long rrd_stats_one_json(RRDSET *st, char *options, BUFFER *wb);
68
69 extern void rrd_stats_graph_json(RRDSET *st, char *options, BUFFER *wb);
70
71 -extern void rrd_stats_all_json(BUFFER *wb);
71 +extern void rrd_stats_all_json(RRDHOST *host, BUFFER *wb);
72
73 extern time_t rrd_stats_json(int type, RRDSET *st, BUFFER *wb, long entries_to_show, long group, int group_method, time_t after, time_t before, int only_non_zero);
74
src/web_client.c
+6 -6
@@ -760,13 +760,13 @@ int web_client_api_request_v1_alarm_variables(struct web_client *w, char *url)
760 return web_client_api_request_single_chart(w, url, health_api_v1_chart_variables2json);
761 }
762
763 -int web_client_api_request_v1_charts(struct web_client *w, char *url)
763 +int web_client_api_request_v1_charts(RRDHOST *host, struct web_client *w, char *url)
764 {
765 (void)url;
766
767 buffer_flush(w->response.data);
768 w->response.data->contenttype = CT_APPLICATION_JSON;
769 - rrd_stats_api_v1_charts(w->response.data);
769 + rrd_stats_api_v1_charts(host, w->response.data);
770 return 200;
771 }
772
@@ -798,12 +798,12 @@ int web_client_api_request_v1_allmetrics(struct web_client *w, char *url)
798 switch(format) {
799 case ALLMETRICS_SHELL:
800 w->response.data->contenttype = CT_TEXT_PLAIN;
801 - rrd_stats_api_v1_charts_allmetrics_shell(w->response.data);
801 + rrd_stats_api_v1_charts_allmetrics_shell(localhost, w->response.data);
802 return 200;
803
804 case ALLMETRICS_PROMETHEUS:
805 w->response.data->contenttype = CT_PROMETHEUS;
806 - rrd_stats_api_v1_charts_allmetrics_prometheus(w->response.data);
806 + rrd_stats_api_v1_charts_allmetrics_prometheus(localhost, w->response.data);
807 return 200;
808
809 default:
@@ -1438,7 +1438,7 @@ int web_client_api_request_v1(struct web_client *w, char *url) {
1438 return web_client_api_request_v1_chart(w, url);
1439
1440 else if(hash == hash_charts && !strcmp(tok, "charts"))
1441 - return web_client_api_request_v1_charts(w, url);
1441 + return web_client_api_request_v1_charts(localhost, w, url);
1442
1443 else if(hash == hash_registry && !strcmp(tok, "registry"))
1444 return web_client_api_request_v1_registry(w, url);
@@ -2214,7 +2214,7 @@ void web_client_process(struct web_client *w) {
2214
2215 w->response.data->contenttype = CT_APPLICATION_JSON;
2216 buffer_flush(w->response.data);
2217 - rrd_stats_all_json(w->response.data);
2217 + rrd_stats_all_json(localhost, w->response.data);
2218 }
2219 #ifdef NETDATA_INTERNAL_CHECKS
2220 else if(hash == hash_exit && strcmp(tok, "exit") == 0) {