master
c 156 lines 6.05 KB
Raw
1 // SPDX-License-Identifier: GPL-3.0-or-later
2
3 #include "functions_fields.h"
4
5 // Define mapping tables for the enums using the template macros
6
7 // RRDF_FIELD_TYPE mapping
8 ENUM_STR_MAP_DEFINE(RRDF_FIELD_TYPE) = {
9 {RRDF_FIELD_TYPE_NONE, "none"},
10 {RRDF_FIELD_TYPE_INTEGER, "integer"},
11 {RRDF_FIELD_TYPE_BOOLEAN, "boolean"},
12 {RRDF_FIELD_TYPE_STRING, "string"},
13 {RRDF_FIELD_TYPE_DETAIL_STRING, "detail-string"},
14 {RRDF_FIELD_TYPE_BAR_WITH_INTEGER, "bar-with-integer"},
15 {RRDF_FIELD_TYPE_DURATION, "duration"},
16 {RRDF_FIELD_TYPE_TIMESTAMP, "timestamp"},
17 {RRDF_FIELD_TYPE_ARRAY, "array"},
18 {0, NULL}
19 };
20
21 // Define the conversion functions
22 ENUM_STR_DEFINE_FUNCTIONS(RRDF_FIELD_TYPE, RRDF_FIELD_TYPE_NONE, "none")
23
24 // Convert an RRDF_FIELD_TYPE to a simplified JSON scalar type
25 const char *field_type_to_json_scalar_type(RRDF_FIELD_TYPE type) {
26 switch (type) {
27 case RRDF_FIELD_TYPE_INTEGER:
28 case RRDF_FIELD_TYPE_BAR_WITH_INTEGER:
29 case RRDF_FIELD_TYPE_DURATION:
30 case RRDF_FIELD_TYPE_TIMESTAMP:
31 return "number";
32
33 case RRDF_FIELD_TYPE_BOOLEAN:
34 return "boolean";
35
36 case RRDF_FIELD_TYPE_STRING:
37 case RRDF_FIELD_TYPE_DETAIL_STRING:
38 return "string";
39
40 case RRDF_FIELD_TYPE_ARRAY:
41 return "array";
42
43 case RRDF_FIELD_TYPE_NONE:
44 default:
45 return "unknown";
46 }
47 }
48
49 // RRDF_FIELD_VISUAL mapping
50 ENUM_STR_MAP_DEFINE(RRDF_FIELD_VISUAL) = {
51 {RRDF_FIELD_VISUAL_VALUE, "value"},
52 {RRDF_FIELD_VISUAL_BAR, "bar"},
53 {RRDF_FIELD_VISUAL_PILL, "pill"},
54 {RRDF_FIELD_VISUAL_RICH, "richValue"},
55 {RRDR_FIELD_VISUAL_ROW_OPTIONS, "rowOptions"},
56 {0, NULL}
57 };
58
59 // Define the conversion functions
60 ENUM_STR_DEFINE_FUNCTIONS(RRDF_FIELD_VISUAL, RRDF_FIELD_VISUAL_VALUE, "value")
61
62 // RRDF_FIELD_TRANSFORM mapping
63 ENUM_STR_MAP_DEFINE(RRDF_FIELD_TRANSFORM) = {
64 {RRDF_FIELD_TRANSFORM_NONE, "none"},
65 {RRDF_FIELD_TRANSFORM_NUMBER, "number"},
66 {RRDF_FIELD_TRANSFORM_DURATION_S, "duration"},
67 {RRDF_FIELD_TRANSFORM_DATETIME_MS, "datetime"},
68 {RRDF_FIELD_TRANSFORM_DATETIME_USEC, "datetime_usec"},
69 {RRDF_FIELD_TRANSFORM_XML, "xml"},
70 {0, NULL}
71 };
72
73 // Define the conversion functions
74 ENUM_STR_DEFINE_FUNCTIONS(RRDF_FIELD_TRANSFORM, RRDF_FIELD_TRANSFORM_NONE, "none")
75
76 // RRDF_FIELD_SORT mapping
77 ENUM_STR_MAP_DEFINE(RRDF_FIELD_SORT) = {
78 {RRDF_FIELD_SORT_ASCENDING, "ascending"},
79 {RRDF_FIELD_SORT_DESCENDING, "descending"},
80 {0, NULL}
81 };
82
83 // Define the conversion functions
84 ENUM_STR_DEFINE_FUNCTIONS(RRDF_FIELD_SORT, RRDF_FIELD_SORT_ASCENDING, "ascending")
85
86 // RRDF_FIELD_SUMMARY mapping
87 ENUM_STR_MAP_DEFINE(RRDF_FIELD_SUMMARY) = {
88 {RRDF_FIELD_SUMMARY_COUNT, "count"},
89 {RRDF_FIELD_SUMMARY_UNIQUECOUNT, "uniqueCount"},
90 {RRDF_FIELD_SUMMARY_SUM, "sum"},
91 {RRDF_FIELD_SUMMARY_MIN, "min"},
92 {RRDF_FIELD_SUMMARY_MAX, "max"},
93 {RRDF_FIELD_SUMMARY_MEAN, "mean"},
94 {RRDF_FIELD_SUMMARY_MEDIAN, "median"},
95 {0, NULL}
96 };
97
98 // Define the conversion functions
99 ENUM_STR_DEFINE_FUNCTIONS(RRDF_FIELD_SUMMARY, RRDF_FIELD_SUMMARY_COUNT, "count")
100
101 // RRDF_FIELD_FILTER mapping
102 ENUM_STR_MAP_DEFINE(RRDF_FIELD_FILTER) = {
103 {RRDF_FIELD_FILTER_NONE, "none"},
104 {RRDF_FIELD_FILTER_RANGE, "range"},
105 {RRDF_FIELD_FILTER_MULTISELECT, "multiselect"},
106 {RRDF_FIELD_FILTER_FACET, "facet"},
107 {0, NULL}
108 };
109
110 // Define the conversion functions
111 ENUM_STR_DEFINE_FUNCTIONS(RRDF_FIELD_FILTER, RRDF_FIELD_FILTER_NONE, "none")
112
113 void buffer_rrdf_table_add_field(BUFFER *wb, size_t field_id, const char *key, const char *name, RRDF_FIELD_TYPE type,
114 RRDF_FIELD_VISUAL visual, RRDF_FIELD_TRANSFORM transform, size_t decimal_points,
115 const char *units, NETDATA_DOUBLE max, RRDF_FIELD_SORT sort, const char *pointer_to,
116 RRDF_FIELD_SUMMARY summary, RRDF_FIELD_FILTER filter, RRDF_FIELD_OPTIONS options,
117 const char *default_value) {
118
119 buffer_json_member_add_object(wb, key);
120 {
121 buffer_json_member_add_uint64(wb, "index", field_id);
122 buffer_json_member_add_boolean(wb, "unique_key", options & RRDF_FIELD_OPTS_UNIQUE_KEY);
123 buffer_json_member_add_string(wb, "name", name);
124 buffer_json_member_add_boolean(wb, "visible", options & RRDF_FIELD_OPTS_VISIBLE);
125 buffer_json_member_add_string(wb, "type", RRDF_FIELD_TYPE_2str(type));
126 buffer_json_member_add_string_or_omit(wb, "units", units);
127 buffer_json_member_add_string(wb, "visualization", RRDF_FIELD_VISUAL_2str(visual));
128
129 buffer_json_member_add_object(wb, "value_options");
130 {
131 buffer_json_member_add_string_or_omit(wb, "units", units);
132 buffer_json_member_add_string(wb, "transform", RRDF_FIELD_TRANSFORM_2str(transform));
133 buffer_json_member_add_uint64(wb, "decimal_points", decimal_points);
134 buffer_json_member_add_string(wb, "default_value", default_value);
135 }
136 buffer_json_object_close(wb);
137
138 if (!isnan((NETDATA_DOUBLE) (max)))
139 buffer_json_member_add_double(wb, "max", (NETDATA_DOUBLE) (max));
140
141 buffer_json_member_add_string_or_omit(wb, "pointer_to", pointer_to);
142 buffer_json_member_add_string(wb, "sort", RRDF_FIELD_SORT_2str(sort));
143 buffer_json_member_add_boolean(wb, "sortable", !(sort & RRDF_FIELD_SORT_FIXED));
144 buffer_json_member_add_boolean(wb, "sticky", options & RRDF_FIELD_OPTS_STICKY);
145 buffer_json_member_add_string(wb, "summary", RRDF_FIELD_SUMMARY_2str(summary));
146 buffer_json_member_add_string(wb, "filter", RRDF_FIELD_FILTER_2str(filter));
147
148 buffer_json_member_add_boolean(wb, "full_width", options & RRDF_FIELD_OPTS_FULL_WIDTH);
149 buffer_json_member_add_boolean(wb, "wrap", options & RRDF_FIELD_OPTS_WRAP);
150 buffer_json_member_add_boolean(wb, "default_expanded_filter", options & RRDF_FIELD_OPTS_EXPANDED_FILTER);
151
152 if(options & RRDF_FIELD_OPTS_DUMMY)
153 buffer_json_member_add_boolean(wb, "dummy", true);
154 }
155 buffer_json_object_close(wb);
156 }