@cryptotaxi247 / netdata-1 / commits / 38f16349c

added API method to returns metrics from all hosts for prometheus; fixes #2076

Costa Tsaousis (ktsaou) committed Apr 11, 2017 at 23:32 UTC 38f16349cf3b321922f204087f3b7a569b3b48cd
3 files changed +31 -11
src/rrd2json.c
+9
@@ -239,6 +239,15 @@ void rrd_stats_api_v1_charts_allmetrics_prometheus(RRDHOST *host, BUFFER *wb) {
239 rrdhost_unlock(host);
240 }
241
242 +void rrd_stats_api_v1_charts_allmetrics_prometheus_all_hosts(BUFFER *wb) {
243 + RRDHOST *host;
244 + rrd_rdlock();
245 + rrdhost_foreach_read(host) {
246 + rrd_stats_api_v1_charts_allmetrics_prometheus(host, wb);
247 + }
248 + rrd_unlock();
249 +}
250 +
251 // ----------------------------------------------------------------------------
252 // BASH
253 // /api/v1/allmetrics?format=bash
src/rrd2json.h
+14 -10
@@ -31,13 +31,15 @@
31 #define DATASOURCE_FORMAT_SSV_COMMA "ssvcomma"
32 #define DATASOURCE_FORMAT_CSV_JSON_ARRAY "csvjsonarray"
33
34 -#define ALLMETRICS_FORMAT_SHELL "shell"
35 -#define ALLMETRICS_FORMAT_PROMETHEUS "prometheus"
36 -#define ALLMETRICS_FORMAT_JSON "json"
34 +#define ALLMETRICS_FORMAT_SHELL "shell"
35 +#define ALLMETRICS_FORMAT_PROMETHEUS "prometheus"
36 +#define ALLMETRICS_FORMAT_PROMETHEUS_ALL_HOSTS "prometheus_all_hosts"
37 +#define ALLMETRICS_FORMAT_JSON "json"
38
38 -#define ALLMETRICS_SHELL 1
39 -#define ALLMETRICS_PROMETHEUS 2
40 -#define ALLMETRICS_JSON 3
39 +#define ALLMETRICS_SHELL 1
40 +#define ALLMETRICS_PROMETHEUS 2
41 +#define ALLMETRICS_JSON 3
42 +#define ALLMETRICS_PROMETHEUS_ALL_HOSTS 4
43
44 #define GROUP_UNDEFINED 0
45 #define GROUP_AVERAGE 1
@@ -66,12 +68,14 @@ extern void rrd_stats_api_v1_charts(RRDHOST *host, BUFFER *wb);
68 extern void rrd_stats_api_v1_charts_allmetrics_json(RRDHOST *host, BUFFER *wb);
69 extern void rrd_stats_api_v1_charts_allmetrics_shell(RRDHOST *host, BUFFER *wb);
70 extern void rrd_stats_api_v1_charts_allmetrics_prometheus(RRDHOST *host, BUFFER *wb);
71 +extern void rrd_stats_api_v1_charts_allmetrics_prometheus_all_hosts(BUFFER *wb);
72
73 extern int rrdset2anything_api_v1(RRDSET *st, BUFFER *out, BUFFER *dimensions, uint32_t format, long points
71 - , long long after, long long before, int group_method, uint32_t options
72 - , time_t *latest_timestamp);
74 + , long long after, long long before, int group_method, uint32_t options
75 + , time_t *latest_timestamp);
76 +
77 extern int rrdset2value_api_v1(RRDSET *st, BUFFER *wb, calculated_number *n, const char *dimensions, long points
74 - , long long after, long long before, int group_method, uint32_t options
75 - , time_t *db_before, time_t *db_after, int *value_is_null);
78 + , long long after, long long before, int group_method, uint32_t options
79 + , time_t *db_before, time_t *db_after, int *value_is_null);
80
81 #endif /* NETDATA_RRD2JSON_H */
src/web_api_v1.c
+8 -1
@@ -222,6 +222,8 @@ inline int web_client_api_request_v1_allmetrics(RRDHOST *host, struct web_client
222 format = ALLMETRICS_SHELL;
223 else if(!strcmp(value, ALLMETRICS_FORMAT_PROMETHEUS))
224 format = ALLMETRICS_PROMETHEUS;
225 + else if(!strcmp(value, ALLMETRICS_FORMAT_PROMETHEUS_ALL_HOSTS))
226 + format = ALLMETRICS_PROMETHEUS_ALL_HOSTS;
227 else if(!strcmp(value, ALLMETRICS_FORMAT_JSON))
228 format = ALLMETRICS_JSON;
229 else
@@ -248,9 +250,14 @@ inline int web_client_api_request_v1_allmetrics(RRDHOST *host, struct web_client
250 rrd_stats_api_v1_charts_allmetrics_prometheus(host, w->response.data);
251 return 200;
252
253 + case ALLMETRICS_PROMETHEUS_ALL_HOSTS:
254 + w->response.data->contenttype = CT_PROMETHEUS;
255 + rrd_stats_api_v1_charts_allmetrics_prometheus_all_hosts(w->response.data);
256 + return 200;
257 +
258 default:
259 w->response.data->contenttype = CT_TEXT_PLAIN;
253 - buffer_strcat(w->response.data, "Which format? '" ALLMETRICS_FORMAT_SHELL "', '" ALLMETRICS_FORMAT_PROMETHEUS "' and '" ALLMETRICS_FORMAT_JSON "' are currently supported.");
260 + buffer_strcat(w->response.data, "Which format? '" ALLMETRICS_FORMAT_SHELL "', '" ALLMETRICS_FORMAT_PROMETHEUS "', '" ALLMETRICS_FORMAT_PROMETHEUS_ALL_HOSTS "' and '" ALLMETRICS_FORMAT_JSON "' are currently supported.");
261 return 400;
262 }
263 }