@cryptotaxi247 / netdata-1 / commits / 1c60c6eb8

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 }