@cryptotaxi247 / netdata-1 / commits / 752553d6e

add system-info columns to streaming function (#19482)

* add system-info columns to streaming function * add group by to streaming for system info fields

Costa Tsaousis committed Jan 24, 2025 at 20:58 UTC 752553d6ecd14c3607089148f36f525d0fcb61fb
3 files changed +318 -84
src/database/rrdhost-system-info.c
+61
@@ -498,3 +498,64 @@ void rrdhost_system_info_to_node_info(struct rrdhost_system_info *system_info, s
498 node_info->data.ml_info.ml_capable = system_info->ml_capable;
499 node_info->data.ml_info.ml_enabled = system_info->ml_enabled;
500 }
501 +
502 +void rrdhost_system_info_to_streaming_function_array(BUFFER *wb, struct rrdhost_system_info *system_info) {
503 + if(system_info) {
504 + buffer_json_add_array_item_string(wb, system_info->host_os_name ? system_info->host_os_name : "");
505 + buffer_json_add_array_item_string(wb, system_info->host_os_id ? system_info->host_os_id : "");
506 + buffer_json_add_array_item_string(wb, system_info->host_os_id_like ? system_info->host_os_id_like : "");
507 + buffer_json_add_array_item_string(wb, system_info->host_os_version ? system_info->host_os_version : "");
508 + buffer_json_add_array_item_string(wb, system_info->host_os_version_id ? system_info->host_os_version_id : "");
509 + buffer_json_add_array_item_string(wb, system_info->host_os_detection ? system_info->host_os_detection : "");
510 + buffer_json_add_array_item_string(wb, system_info->host_cores ? system_info->host_cores : "");
511 + buffer_json_add_array_item_string(wb, system_info->host_disk_space ? system_info->host_disk_space : "");
512 + buffer_json_add_array_item_string(wb, system_info->host_cpu_freq ? system_info->host_cpu_freq : "");
513 + buffer_json_add_array_item_string(wb, system_info->host_ram_total ? system_info->host_ram_total : "");
514 + buffer_json_add_array_item_string(wb, system_info->container_os_name ? system_info->container_os_name : "");
515 + buffer_json_add_array_item_string(wb, system_info->container_os_id ? system_info->container_os_id : "");
516 + buffer_json_add_array_item_string(wb, system_info->container_os_id_like ? system_info->container_os_id_like : "");
517 + buffer_json_add_array_item_string(wb, system_info->container_os_version ? system_info->container_os_version : "");
518 + buffer_json_add_array_item_string(wb, system_info->container_os_version_id ? system_info->container_os_version_id : "");
519 + buffer_json_add_array_item_string(wb, system_info->container_os_detection ? system_info->container_os_detection : "");
520 + buffer_json_add_array_item_string(wb, system_info->is_k8s_node ? system_info->is_k8s_node : "");
521 + buffer_json_add_array_item_string(wb, system_info->kernel_name ? system_info->kernel_name : "");
522 + buffer_json_add_array_item_string(wb, system_info->kernel_version ? system_info->kernel_version : "");
523 + buffer_json_add_array_item_string(wb, system_info->architecture ? system_info->architecture : "");
524 + buffer_json_add_array_item_string(wb, system_info->virtualization ? system_info->virtualization : "");
525 + buffer_json_add_array_item_string(wb, system_info->virt_detection ? system_info->virt_detection : "");
526 + buffer_json_add_array_item_string(wb, system_info->container ? system_info->container : "");
527 + buffer_json_add_array_item_string(wb, system_info->container_detection ? system_info->container_detection : "");
528 + buffer_json_add_array_item_string(wb, system_info->cloud_provider_type ? system_info->cloud_provider_type : "");
529 + buffer_json_add_array_item_string(wb, system_info->cloud_instance_type ? system_info->cloud_instance_type : "");
530 + buffer_json_add_array_item_string(wb, system_info->cloud_instance_region ? system_info->cloud_instance_region : "");
531 + }
532 + else {
533 + buffer_json_add_array_item_string(wb, "");
534 + buffer_json_add_array_item_string(wb, "");
535 + buffer_json_add_array_item_string(wb, "");
536 + buffer_json_add_array_item_string(wb, "");
537 + buffer_json_add_array_item_string(wb, "");
538 + buffer_json_add_array_item_string(wb, "");
539 + buffer_json_add_array_item_string(wb, "");
540 + buffer_json_add_array_item_string(wb, "");
541 + buffer_json_add_array_item_string(wb, "");
542 + buffer_json_add_array_item_string(wb, "");
543 + buffer_json_add_array_item_string(wb, "");
544 + buffer_json_add_array_item_string(wb, "");
545 + buffer_json_add_array_item_string(wb, "");
546 + buffer_json_add_array_item_string(wb, "");
547 + buffer_json_add_array_item_string(wb, "");
548 + buffer_json_add_array_item_string(wb, "");
549 + buffer_json_add_array_item_string(wb, "");
550 + buffer_json_add_array_item_string(wb, "");
551 + buffer_json_add_array_item_string(wb, "");
552 + buffer_json_add_array_item_string(wb, "");
553 + buffer_json_add_array_item_string(wb, "");
554 + buffer_json_add_array_item_string(wb, "");
555 + buffer_json_add_array_item_string(wb, "");
556 + buffer_json_add_array_item_string(wb, "");
557 + buffer_json_add_array_item_string(wb, "");
558 + buffer_json_add_array_item_string(wb, "");
559 + buffer_json_add_array_item_string(wb, "");
560 + }
561 +}
\ No newline at end of file
src/database/rrdhost-system-info.h
+2
@@ -96,4 +96,6 @@ int rrdhost_system_info_foreach(struct rrdhost_system_info *system_info, add_hos
96 struct update_node_info;
97 void rrdhost_system_info_to_node_info(struct rrdhost_system_info *system_info, struct update_node_info *node_info);
98
99 +void rrdhost_system_info_to_streaming_function_array(BUFFER *wb, struct rrdhost_system_info *system_info);
100 +
101 #endif //NETDATA_RRDHOST_SYSTEM_INFO_H
src/web/api/functions/function-streaming.c
+255 -84
@@ -2,6 +2,19 @@
2
3 #include "function-streaming.h"
4
5 +#define GROUP_BY_COLUMN(name, descr) \
6 + buffer_json_member_add_object(wb, name);\
7 + {\
8 + buffer_json_member_add_string(wb, "name", descr);\
9 + buffer_json_member_add_array(wb, "columns");\
10 + {\
11 + buffer_json_add_array_item_string(wb, name);\
12 + }\
13 + buffer_json_array_close(wb);\
14 + }\
15 + buffer_json_object_close(wb);
16 +
17 +
18 int function_streaming(BUFFER *wb, const char *function __maybe_unused, BUFFER *payload __maybe_unused, const char *source __maybe_unused) {
19
20 time_t now = now_realtime_sec();
@@ -24,27 +37,27 @@ int function_streaming(BUFFER *wb, const char *function __maybe_unused, BUFFER *
37 size_t max_ml_anomalous = 0, max_ml_normal = 0, max_ml_trained = 0, max_ml_pending = 0, max_ml_silenced = 0;
38
39 time_t
27 - max_db_duration,
28 - max_db_from,
29 - max_db_to,
30 - max_in_age,
31 - max_out_age,
32 - max_out_attempt_age;
40 + max_db_duration = 0,
41 + max_db_from = 0,
42 + max_db_to = 0,
43 + max_in_age = 0,
44 + max_out_age = 0,
45 + max_out_attempt_age = 0;
46
47 uint64_t
35 - max_in_since,
36 - max_out_since,
37 - max_out_attempt_since;
48 + max_in_since = 0,
49 + max_out_since = 0,
50 + max_out_attempt_since = 0;
51
52 int16_t
40 - max_in_hops,
41 - max_out_hops;
53 + max_in_hops = -1,
54 + max_out_hops = -1;
55
56 int
44 - max_in_local_port,
45 - max_in_remote_port,
46 - max_out_local_port,
47 - max_out_remote_port;
57 + max_in_local_port = 0,
58 + max_in_remote_port = 0,
59 + max_out_local_port = 0,
60 + max_out_remote_port = 0;
61
62 {
63 RRDHOST *host;
@@ -75,9 +88,13 @@ int function_streaming(BUFFER *wb, const char *function __maybe_unused, BUFFER *
88 s.stream.sent_bytes_on_this_connection_per_type[i];
89 }
90
78 - // retention
79 - buffer_json_add_array_item_string(wb, rrdhost_hostname(s.host)); // Node
91 + // Node
92 + buffer_json_add_array_item_string(wb, rrdhost_hostname(s.host));
93
94 + // System Info
95 + rrdhost_system_info_to_streaming_function_array(wb, s.host->system_info);
96 +
97 + // retention
98 buffer_json_add_array_item_uint64(wb, s.db.first_time_s * MSEC_PER_SEC); // dbFrom
99 if(s.db.first_time_s > max_db_from) max_db_from = s.db.first_time_s;
100
@@ -122,7 +139,7 @@ int function_streaming(BUFFER *wb, const char *function __maybe_unused, BUFFER *
139
140 buffer_json_add_array_item_double(wb, s.ingest.replication.completion); // InReplCompletion
141 buffer_json_add_array_item_uint64(wb, s.ingest.replication.instances); // InReplInstances
125 - buffer_json_add_array_item_string(wb, s.ingest.peers.local.ip); // InLocalIP
142 + buffer_json_add_array_item_string(wb, s.ingest.type == RRDHOST_INGEST_TYPE_LOCALHOST || s.ingest.type == RRDHOST_INGEST_TYPE_VIRTUAL ? "localhost" : s.ingest.peers.local.ip); // InLocalIP
143
144 buffer_json_add_array_item_uint64(wb, s.ingest.peers.local.port); // InLocalPort
145 if(s.ingest.peers.local.port > max_in_local_port) max_in_local_port = s.ingest.peers.local.port;
@@ -154,7 +171,7 @@ int function_streaming(BUFFER *wb, const char *function __maybe_unused, BUFFER *
171 }
172 buffer_json_add_array_item_string(wb, stream_handshake_error_to_string(s.stream.reason)); // OutReason
173
157 - buffer_json_add_array_item_uint64(wb, s.stream.hops); // OutHops
174 + buffer_json_add_array_item_int64(wb, s.stream.hops); // OutHops
175 if(s.stream.hops > max_out_hops) max_out_hops = s.stream.hops;
176
177 buffer_json_add_array_item_double(wb, s.stream.replication.completion); // OutReplCompletion
@@ -243,6 +260,195 @@ int function_streaming(BUFFER *wb, const char *function __maybe_unused, BUFFER *
260 RRDF_FIELD_OPTS_VISIBLE | RRDF_FIELD_OPTS_UNIQUE_KEY | RRDF_FIELD_OPTS_STICKY,
261 NULL);
262
263 + buffer_rrdf_table_add_field(wb, field_id++, "OSName", "The name of the host's operating system",
264 + RRDF_FIELD_TYPE_STRING, RRDF_FIELD_VISUAL_VALUE, RRDF_FIELD_TRANSFORM_NONE,
265 + 0, NULL, NAN, RRDF_FIELD_SORT_ASCENDING, NULL,
266 + RRDF_FIELD_SUMMARY_COUNT, RRDF_FIELD_FILTER_MULTISELECT,
267 + RRDF_FIELD_OPTS_NONE,
268 + NULL);
269 +
270 + buffer_rrdf_table_add_field(wb, field_id++, "OSId", "The identifier of the host's operating system",
271 + RRDF_FIELD_TYPE_STRING, RRDF_FIELD_VISUAL_VALUE, RRDF_FIELD_TRANSFORM_NONE,
272 + 0, NULL, NAN, RRDF_FIELD_SORT_ASCENDING, NULL,
273 + RRDF_FIELD_SUMMARY_COUNT, RRDF_FIELD_FILTER_MULTISELECT,
274 + RRDF_FIELD_OPTS_NONE,
275 + NULL);
276 +
277 + buffer_rrdf_table_add_field(wb, field_id++, "OSIdLike", "The ID-like string for the host's OS",
278 + RRDF_FIELD_TYPE_STRING, RRDF_FIELD_VISUAL_VALUE, RRDF_FIELD_TRANSFORM_NONE,
279 + 0, NULL, NAN, RRDF_FIELD_SORT_ASCENDING, NULL,
280 + RRDF_FIELD_SUMMARY_COUNT, RRDF_FIELD_FILTER_MULTISELECT,
281 + RRDF_FIELD_OPTS_NONE,
282 + NULL);
283 +
284 + buffer_rrdf_table_add_field(wb, field_id++, "OSVersion", "The version of the host's operating system",
285 + RRDF_FIELD_TYPE_STRING, RRDF_FIELD_VISUAL_VALUE, RRDF_FIELD_TRANSFORM_NONE,
286 + 0, NULL, NAN, RRDF_FIELD_SORT_ASCENDING, NULL,
287 + RRDF_FIELD_SUMMARY_COUNT, RRDF_FIELD_FILTER_MULTISELECT,
288 + RRDF_FIELD_OPTS_NONE,
289 + NULL);
290 +
291 + buffer_rrdf_table_add_field(wb, field_id++, "OSVersionId", "The version identifier of the host's OS",
292 + RRDF_FIELD_TYPE_STRING, RRDF_FIELD_VISUAL_VALUE, RRDF_FIELD_TRANSFORM_NONE,
293 + 0, NULL, NAN, RRDF_FIELD_SORT_ASCENDING, NULL,
294 + RRDF_FIELD_SUMMARY_COUNT, RRDF_FIELD_FILTER_MULTISELECT,
295 + RRDF_FIELD_OPTS_NONE,
296 + NULL);
297 +
298 + buffer_rrdf_table_add_field(wb, field_id++, "OSDetection", "Details about host OS detection",
299 + RRDF_FIELD_TYPE_STRING, RRDF_FIELD_VISUAL_VALUE, RRDF_FIELD_TRANSFORM_NONE,
300 + 0, NULL, NAN, RRDF_FIELD_SORT_ASCENDING, NULL,
301 + RRDF_FIELD_SUMMARY_COUNT, RRDF_FIELD_FILTER_MULTISELECT,
302 + RRDF_FIELD_OPTS_NONE,
303 + NULL);
304 +
305 + buffer_rrdf_table_add_field(wb, field_id++, "CPUCores", "The number of CPU cores in the host",
306 + RRDF_FIELD_TYPE_STRING, RRDF_FIELD_VISUAL_VALUE, RRDF_FIELD_TRANSFORM_NONE,
307 + 0, NULL, NAN, RRDF_FIELD_SORT_ASCENDING, NULL,
308 + RRDF_FIELD_SUMMARY_COUNT, RRDF_FIELD_FILTER_MULTISELECT,
309 + RRDF_FIELD_OPTS_NONE,
310 + NULL);
311 +
312 + buffer_rrdf_table_add_field(wb, field_id++, "DiskSpace", "The total disk space available on the host",
313 + RRDF_FIELD_TYPE_STRING, RRDF_FIELD_VISUAL_VALUE, RRDF_FIELD_TRANSFORM_NONE,
314 + 0, NULL, NAN, RRDF_FIELD_SORT_ASCENDING, NULL,
315 + RRDF_FIELD_SUMMARY_COUNT, RRDF_FIELD_FILTER_NONE,
316 + RRDF_FIELD_OPTS_NONE,
317 + NULL);
318 +
319 + buffer_rrdf_table_add_field(wb, field_id++, "CPUFreq", "The CPU frequency of the host",
320 + RRDF_FIELD_TYPE_STRING, RRDF_FIELD_VISUAL_VALUE, RRDF_FIELD_TRANSFORM_NONE,
321 + 0, NULL, NAN, RRDF_FIELD_SORT_ASCENDING, NULL,
322 + RRDF_FIELD_SUMMARY_COUNT, RRDF_FIELD_FILTER_NONE,
323 + RRDF_FIELD_OPTS_NONE,
324 + NULL);
325 +
326 + buffer_rrdf_table_add_field(wb, field_id++, "RAMTotal", "The total RAM available on the host",
327 + RRDF_FIELD_TYPE_STRING, RRDF_FIELD_VISUAL_VALUE, RRDF_FIELD_TRANSFORM_NONE,
328 + 0, NULL, NAN, RRDF_FIELD_SORT_ASCENDING, NULL,
329 + RRDF_FIELD_SUMMARY_COUNT, RRDF_FIELD_FILTER_NONE,
330 + RRDF_FIELD_OPTS_NONE,
331 + NULL);
332 +
333 + buffer_rrdf_table_add_field(wb, field_id++, "ContainerOSName", "The name of the container's operating system",
334 + RRDF_FIELD_TYPE_STRING, RRDF_FIELD_VISUAL_VALUE, RRDF_FIELD_TRANSFORM_NONE,
335 + 0, NULL, NAN, RRDF_FIELD_SORT_ASCENDING, NULL,
336 + RRDF_FIELD_SUMMARY_COUNT, RRDF_FIELD_FILTER_MULTISELECT,
337 + RRDF_FIELD_OPTS_NONE,
338 + NULL);
339 +
340 + buffer_rrdf_table_add_field(wb, field_id++, "ContainerOSId", "The identifier of the container's operating system",
341 + RRDF_FIELD_TYPE_STRING, RRDF_FIELD_VISUAL_VALUE, RRDF_FIELD_TRANSFORM_NONE,
342 + 0, NULL, NAN, RRDF_FIELD_SORT_ASCENDING, NULL,
343 + RRDF_FIELD_SUMMARY_COUNT, RRDF_FIELD_FILTER_MULTISELECT,
344 + RRDF_FIELD_OPTS_NONE,
345 + NULL);
346 +
347 + buffer_rrdf_table_add_field(wb, field_id++, "ContainerOSIdLike", "The ID-like string for the container's OS",
348 + RRDF_FIELD_TYPE_STRING, RRDF_FIELD_VISUAL_VALUE, RRDF_FIELD_TRANSFORM_NONE,
349 + 0, NULL, NAN, RRDF_FIELD_SORT_ASCENDING, NULL,
350 + RRDF_FIELD_SUMMARY_COUNT, RRDF_FIELD_FILTER_MULTISELECT,
351 + RRDF_FIELD_OPTS_NONE,
352 + NULL);
353 +
354 + buffer_rrdf_table_add_field(wb, field_id++, "ContainerOSVersion", "The version of the container's OS",
355 + RRDF_FIELD_TYPE_STRING, RRDF_FIELD_VISUAL_VALUE, RRDF_FIELD_TRANSFORM_NONE,
356 + 0, NULL, NAN, RRDF_FIELD_SORT_ASCENDING, NULL,
357 + RRDF_FIELD_SUMMARY_COUNT, RRDF_FIELD_FILTER_MULTISELECT,
358 + RRDF_FIELD_OPTS_NONE,
359 + NULL);
360 +
361 + buffer_rrdf_table_add_field(wb, field_id++, "ContainerOSVersionId", "The version identifier of the container's OS",
362 + RRDF_FIELD_TYPE_STRING, RRDF_FIELD_VISUAL_VALUE, RRDF_FIELD_TRANSFORM_NONE,
363 + 0, NULL, NAN, RRDF_FIELD_SORT_ASCENDING, NULL,
364 + RRDF_FIELD_SUMMARY_COUNT, RRDF_FIELD_FILTER_MULTISELECT,
365 + RRDF_FIELD_OPTS_NONE,
366 + NULL);
367 +
368 + buffer_rrdf_table_add_field(wb, field_id++, "ContainerOSDetection", "Details about container OS detection",
369 + RRDF_FIELD_TYPE_STRING, RRDF_FIELD_VISUAL_VALUE, RRDF_FIELD_TRANSFORM_NONE,
370 + 0, NULL, NAN, RRDF_FIELD_SORT_ASCENDING, NULL,
371 + RRDF_FIELD_SUMMARY_COUNT, RRDF_FIELD_FILTER_MULTISELECT,
372 + RRDF_FIELD_OPTS_NONE,
373 + NULL);
374 +
375 + buffer_rrdf_table_add_field(wb, field_id++, "IsK8sNode", "Whether this node is part of a Kubernetes cluster",
376 + RRDF_FIELD_TYPE_STRING, RRDF_FIELD_VISUAL_VALUE, RRDF_FIELD_TRANSFORM_NONE,
377 + 0, NULL, NAN, RRDF_FIELD_SORT_ASCENDING, NULL,
378 + RRDF_FIELD_SUMMARY_COUNT, RRDF_FIELD_FILTER_MULTISELECT,
379 + RRDF_FIELD_OPTS_NONE,
380 + NULL);
381 +
382 + buffer_rrdf_table_add_field(wb, field_id++, "KernelName", "The kernel name",
383 + RRDF_FIELD_TYPE_STRING, RRDF_FIELD_VISUAL_VALUE, RRDF_FIELD_TRANSFORM_NONE,
384 + 0, NULL, NAN, RRDF_FIELD_SORT_ASCENDING, NULL,
385 + RRDF_FIELD_SUMMARY_COUNT, RRDF_FIELD_FILTER_MULTISELECT,
386 + RRDF_FIELD_OPTS_NONE,
387 + NULL);
388 +
389 + buffer_rrdf_table_add_field(wb, field_id++, "KernelVersion", "The kernel version",
390 + RRDF_FIELD_TYPE_STRING, RRDF_FIELD_VISUAL_VALUE, RRDF_FIELD_TRANSFORM_NONE,
391 + 0, NULL, NAN, RRDF_FIELD_SORT_ASCENDING, NULL,
392 + RRDF_FIELD_SUMMARY_COUNT, RRDF_FIELD_FILTER_MULTISELECT,
393 + RRDF_FIELD_OPTS_NONE,
394 + NULL);
395 +
396 + buffer_rrdf_table_add_field(wb, field_id++, "Architecture", "The system architecture",
397 + RRDF_FIELD_TYPE_STRING, RRDF_FIELD_VISUAL_VALUE, RRDF_FIELD_TRANSFORM_NONE,
398 + 0, NULL, NAN, RRDF_FIELD_SORT_ASCENDING, NULL,
399 + RRDF_FIELD_SUMMARY_COUNT, RRDF_FIELD_FILTER_MULTISELECT,
400 + RRDF_FIELD_OPTS_NONE,
401 + NULL);
402 +
403 + buffer_rrdf_table_add_field(wb, field_id++, "Virtualization", "The virtualization technology in use",
404 + RRDF_FIELD_TYPE_STRING, RRDF_FIELD_VISUAL_VALUE, RRDF_FIELD_TRANSFORM_NONE,
405 + 0, NULL, NAN, RRDF_FIELD_SORT_ASCENDING, NULL,
406 + RRDF_FIELD_SUMMARY_COUNT, RRDF_FIELD_FILTER_MULTISELECT,
407 + RRDF_FIELD_OPTS_NONE,
408 + NULL);
409 +
410 + buffer_rrdf_table_add_field(wb, field_id++, "VirtDetection", "Details about virtualization detection",
411 + RRDF_FIELD_TYPE_STRING, RRDF_FIELD_VISUAL_VALUE, RRDF_FIELD_TRANSFORM_NONE,
412 + 0, NULL, NAN, RRDF_FIELD_SORT_ASCENDING, NULL,
413 + RRDF_FIELD_SUMMARY_COUNT, RRDF_FIELD_FILTER_MULTISELECT,
414 + RRDF_FIELD_OPTS_NONE,
415 + NULL);
416 +
417 + buffer_rrdf_table_add_field(wb, field_id++, "Container", "Container type information",
418 + RRDF_FIELD_TYPE_STRING, RRDF_FIELD_VISUAL_VALUE, RRDF_FIELD_TRANSFORM_NONE,
419 + 0, NULL, NAN, RRDF_FIELD_SORT_ASCENDING, NULL,
420 + RRDF_FIELD_SUMMARY_COUNT, RRDF_FIELD_FILTER_MULTISELECT,
421 + RRDF_FIELD_OPTS_NONE,
422 + NULL);
423 +
424 + buffer_rrdf_table_add_field(wb, field_id++, "ContainerDetection", "Details about container detection",
425 + RRDF_FIELD_TYPE_STRING, RRDF_FIELD_VISUAL_VALUE, RRDF_FIELD_TRANSFORM_NONE,
426 + 0, NULL, NAN, RRDF_FIELD_SORT_ASCENDING, NULL,
427 + RRDF_FIELD_SUMMARY_COUNT, RRDF_FIELD_FILTER_MULTISELECT,
428 + RRDF_FIELD_OPTS_NONE,
429 + NULL);
430 +
431 + buffer_rrdf_table_add_field(wb, field_id++, "CloudProviderType", "The type of cloud provider",
432 + RRDF_FIELD_TYPE_STRING, RRDF_FIELD_VISUAL_VALUE, RRDF_FIELD_TRANSFORM_NONE,
433 + 0, NULL, NAN, RRDF_FIELD_SORT_ASCENDING, NULL,
434 + RRDF_FIELD_SUMMARY_COUNT, RRDF_FIELD_FILTER_MULTISELECT,
435 + RRDF_FIELD_OPTS_NONE,
436 + NULL);
437 +
438 + buffer_rrdf_table_add_field(wb, field_id++, "CloudInstanceType", "The type of cloud instance",
439 + RRDF_FIELD_TYPE_STRING, RRDF_FIELD_VISUAL_VALUE, RRDF_FIELD_TRANSFORM_NONE,
440 + 0, NULL, NAN, RRDF_FIELD_SORT_ASCENDING, NULL,
441 + RRDF_FIELD_SUMMARY_COUNT, RRDF_FIELD_FILTER_MULTISELECT,
442 + RRDF_FIELD_OPTS_NONE,
443 + NULL);
444 +
445 + buffer_rrdf_table_add_field(wb, field_id++, "CloudInstanceRegion", "The region of the cloud instance",
446 + RRDF_FIELD_TYPE_STRING, RRDF_FIELD_VISUAL_VALUE, RRDF_FIELD_TRANSFORM_NONE,
447 + 0, NULL, NAN, RRDF_FIELD_SORT_ASCENDING, NULL,
448 + RRDF_FIELD_SUMMARY_COUNT, RRDF_FIELD_FILTER_MULTISELECT,
449 + RRDF_FIELD_OPTS_NONE,
450 + NULL);
451 +
452 buffer_rrdf_table_add_field(wb, field_id++, "dbFrom", "DB Data Retention From",
453 RRDF_FIELD_TYPE_TIMESTAMP, RRDF_FIELD_VISUAL_VALUE, RRDF_FIELD_TRANSFORM_DATETIME_MS,
454 0, NULL, (double)max_db_from * MSEC_PER_SEC, RRDF_FIELD_SORT_ASCENDING, NULL,
@@ -629,71 +835,36 @@ int function_streaming(BUFFER *wb, const char *function __maybe_unused, BUFFER *
835
836 buffer_json_member_add_object(wb, "group_by");
837 {
632 - buffer_json_member_add_object(wb, "Node");
633 - {
634 - buffer_json_member_add_string(wb, "name", "Node");
635 - buffer_json_member_add_array(wb, "columns");
636 - {
637 - buffer_json_add_array_item_string(wb, "Node");
638 - }
639 - buffer_json_array_close(wb);
640 - }
641 - buffer_json_object_close(wb);
642 -
643 - buffer_json_member_add_object(wb, "InStatus");
644 - {
645 - buffer_json_member_add_string(wb, "name", "Nodes by Collection Status");
646 - buffer_json_member_add_array(wb, "columns");
647 - {
648 - buffer_json_add_array_item_string(wb, "InStatus");
649 - }
650 - buffer_json_array_close(wb);
651 - }
652 - buffer_json_object_close(wb);
653 -
654 - buffer_json_member_add_object(wb, "OutStatus");
655 - {
656 - buffer_json_member_add_string(wb, "name", "Nodes by Streaming Status");
657 - buffer_json_member_add_array(wb, "columns");
658 - {
659 - buffer_json_add_array_item_string(wb, "OutStatus");
660 - }
661 - buffer_json_array_close(wb);
662 - }
663 - buffer_json_object_close(wb);
664 -
665 - buffer_json_member_add_object(wb, "MlStatus");
666 - {
667 - buffer_json_member_add_string(wb, "name", "Nodes by ML Status");
668 - buffer_json_member_add_array(wb, "columns");
669 - {
670 - buffer_json_add_array_item_string(wb, "MlStatus");
671 - }
672 - buffer_json_array_close(wb);
673 - }
674 - buffer_json_object_close(wb);
675 -
676 - buffer_json_member_add_object(wb, "InRemoteIP");
677 - {
678 - buffer_json_member_add_string(wb, "name", "Nodes by Inbound IP");
679 - buffer_json_member_add_array(wb, "columns");
680 - {
681 - buffer_json_add_array_item_string(wb, "InRemoteIP");
682 - }
683 - buffer_json_array_close(wb);
684 - }
685 - buffer_json_object_close(wb);
686 -
687 - buffer_json_member_add_object(wb, "OutRemoteIP");
688 - {
689 - buffer_json_member_add_string(wb, "name", "Nodes by Outbound IP");
690 - buffer_json_member_add_array(wb, "columns");
691 - {
692 - buffer_json_add_array_item_string(wb, "OutRemoteIP");
693 - }
694 - buffer_json_array_close(wb);
695 - }
696 - buffer_json_object_close(wb);
838 + GROUP_BY_COLUMN("OSName", "O/S Name");
839 + GROUP_BY_COLUMN("OSId", "O/S ID");
840 + GROUP_BY_COLUMN("OSIdLike", "O/S ID Like");
841 + GROUP_BY_COLUMN("OSVersion", "O/S Version");
842 + GROUP_BY_COLUMN("OSVersionId", "O/S Version ID");
843 + GROUP_BY_COLUMN("OSDetection", "O/S Detection");
844 + GROUP_BY_COLUMN("CPUCores", "CPU Cores");
845 + GROUP_BY_COLUMN("ContainerOSName", "Container O/S Name");
846 + GROUP_BY_COLUMN("ContainerOSId", "Container O/S ID");
847 + GROUP_BY_COLUMN("ContainerOSIdLike", "Container O/S ID Like");
848 + GROUP_BY_COLUMN("ContainerOSVersion", "Container O/S Version");
849 + GROUP_BY_COLUMN("ContainerOSVersionId", "Container O/S Version ID");
850 + GROUP_BY_COLUMN("ContainerOSDetection", "Container O/S Detection");
851 + GROUP_BY_COLUMN("IsK8sNode", "Kubernetes Nodes");
852 + GROUP_BY_COLUMN("KernelName", "Kernel Name");
853 + GROUP_BY_COLUMN("KernelVersion", "Kernel Version");
854 + GROUP_BY_COLUMN("Architecture", "Architecture");
855 + GROUP_BY_COLUMN("Virtualization", "Virtualization Technology");
856 + GROUP_BY_COLUMN("VirtDetection", "Virtualization Detection");
857 + GROUP_BY_COLUMN("Container", "Container");
858 + GROUP_BY_COLUMN("ContainerDetection", "Container Detection");
859 + GROUP_BY_COLUMN("CloudProviderType", "Cloud Provider Type");
860 + GROUP_BY_COLUMN("CloudInstanceType", "Cloud Instance Type");
861 + GROUP_BY_COLUMN("CloudInstanceRegion", "Cloud Instance Region");
862 +
863 + GROUP_BY_COLUMN("InStatus", "Collection Status");
864 + GROUP_BY_COLUMN("OutStatus", "Streaming Status");
865 + GROUP_BY_COLUMN("MlStatus", "ML Status");
866 + GROUP_BY_COLUMN("InRemoteIP", "Inbound IP");
867 + GROUP_BY_COLUMN("OutRemoteIP", "Outbound IP");
868 }
869 buffer_json_object_close(wb); // group_by
870