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) {