URL_parser fixing allmetrics! (#6231)
* URL_parser fixing allmetrics! * URL_parser fixing allmetrics 2!
thiagoftsm committed
Jun 6, 2019 at 18:25 UTC
1c60c6eb8749c80acf5262253963d9d08f0d468e
1 file changed
+27
-3
web/api/exporters/allmetrics.c
+27
-3
@@ -26,13 +26,21 @@ inline int web_client_api_request_v1_allmetrics(RRDHOST *host, struct web_client
26
const char *prometheus_prefix = global_backend_prefix;
27
28
uint32_t end = w->total_params;
29
+ uint32_t i;
30
+ char sname[WEB_FIELDS_MAX];
31
+ char svalue[WEB_FIELDS_MAX];
32
if (end) {
30
- uint32_t i = 0;
33
+ i = 0;
34
do {
35
char *name = w->param_name[i].body;
36
size_t lname = w->param_name[i].length;
37
+ sname[i] = name[lname];
38
+ name[lname] = 0x00;
39
+
40
char *value = w->param_values[i].body;
41
size_t lvalue = w->param_values[i].length;
42
+ svalue[i] = value[lvalue];
43
+ value[lvalue] = 0x00;
44
45
if(!strncmp(name, "format",lname)) {
46
if(!strncmp(value, ALLMETRICS_FORMAT_SHELL,lvalue))
@@ -74,6 +82,7 @@ inline int web_client_api_request_v1_allmetrics(RRDHOST *host, struct web_client
82
buffer_flush(w->response.data);
83
buffer_no_cacheable(w->response.data);
84
85
+ int ret;
86
switch(format) {
87
case ALLMETRICS_JSON:
88
w->response.data->contenttype = CT_APPLICATION_JSON;
@@ -95,7 +104,8 @@ inline int web_client_api_request_v1_allmetrics(RRDHOST *host, struct web_client
104
, prometheus_backend_options
105
, prometheus_output_options
106
);
98
- return 200;
107
+ ret = 200;
108
+ break;
109
110
case ALLMETRICS_PROMETHEUS_ALL_HOSTS:
111
w->response.data->contenttype = CT_PROMETHEUS;
@@ -107,11 +117,25 @@ inline int web_client_api_request_v1_allmetrics(RRDHOST *host, struct web_client
117
, prometheus_backend_options
118
, prometheus_output_options
119
);
110
- return 200;
120
+ ret = 200;
121
+ break;
122
123
default:
124
w->response.data->contenttype = CT_TEXT_PLAIN;
125
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.");
126
return 400;
127
}
128
+
129
+ i = 0;
130
+ do {
131
+ char *name = w->param_name[i].body;
132
+ size_t lname = w->param_name[i].length;
133
+ name[lname] = sname[i];
134
+
135
+ char *value = w->param_values[i].body;
136
+ size_t lvalue = w->param_values[i].length;
137
+ value[lvalue] = svalue[i];
138
+ } while( ++i < end);
139
+
140
+ return ret;
141
}