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
}