master
c 61 lines 2.56 KB
Raw
1 // SPDX-License-Identifier: GPL-3.0-or-later
2
3 #include "api_v1_calls.h"
4
5 int api_v1_contexts(RRDHOST *host, struct web_client *w, char *url) {
6 RRDCONTEXT_TO_JSON_OPTIONS options = RRDCONTEXT_OPTION_NONE;
7 time_t after = 0, before = 0;
8 const char *chart_label_key = NULL, *chart_labels_filter = NULL;
9 BUFFER *dimensions = NULL;
10
11 buffer_flush(w->response.data);
12
13 while(url) {
14 char *value = strsep_skip_consecutive_separators(&url, "&");
15 if(!value || !*value) continue;
16
17 char *name = strsep_skip_consecutive_separators(&value, "=");
18 if(!name || !*name) continue;
19 if(!value || !*value) continue;
20
21 // name and value are now the parameters
22 // they are not null and not empty
23
24 if(!strcmp(name, "after")) after = str2l(value);
25 else if(!strcmp(name, "before")) before = str2l(value);
26 else if(!strcmp(name, "options")) options = rrdcontext_to_json_parse_options(value);
27 else if(!strcmp(name, "chart_label_key")) chart_label_key = value;
28 else if(!strcmp(name, "chart_labels_filter")) chart_labels_filter = value;
29 else if(!strcmp(name, "dimension") || !strcmp(name, "dim") || !strcmp(name, "dimensions") || !strcmp(name, "dims")) {
30 if(!dimensions) dimensions = buffer_create(100, &netdata_buffers_statistics.buffers_api);
31 buffer_strcat(dimensions, "|");
32 buffer_strcat(dimensions, value);
33 }
34 }
35
36 SIMPLE_PATTERN *chart_label_key_pattern = NULL;
37 SIMPLE_PATTERN *chart_labels_filter_pattern = NULL;
38 SIMPLE_PATTERN *chart_dimensions_pattern = NULL;
39
40 if(chart_label_key)
41 chart_label_key_pattern = simple_pattern_create(chart_label_key, ",|\t\r\n\f\v", SIMPLE_PATTERN_EXACT, true);
42
43 if(chart_labels_filter)
44 chart_labels_filter_pattern = simple_pattern_create(chart_labels_filter, ",|\t\r\n\f\v", SIMPLE_PATTERN_EXACT,
45 true);
46
47 if(dimensions) {
48 chart_dimensions_pattern = simple_pattern_create(buffer_tostring(dimensions), ",|\t\r\n\f\v",
49 SIMPLE_PATTERN_EXACT, true);
50 buffer_free(dimensions);
51 }
52
53 w->response.data->content_type = CT_APPLICATION_JSON;
54 int ret = rrdcontexts_to_json(host, w->response.data, after, before, options, chart_label_key_pattern, chart_labels_filter_pattern, chart_dimensions_pattern);
55
56 simple_pattern_free(chart_label_key_pattern);
57 simple_pattern_free(chart_labels_filter_pattern);
58 simple_pattern_free(chart_dimensions_pattern);
59
60 return ret;
61 }