@cryptotaxi247 / netdata-1 / commits / 590c5aecd

Adds NodeInstanceInfo internal API (#11419)

* Adds NodeInstanceInfo internal API

Timotej S committed Aug 17, 2021 at 14:48 UTC 590c5aecd5479d35640e7f3ed0607c80d1f30492
11 files changed +180 -2
Makefile.am
+8
@@ -595,6 +595,8 @@ ACLK_NG_FILES = \
595 aclk/schema-wrappers/chart_stream.h \
596 aclk/schema-wrappers/chart_config.cc \
597 aclk/schema-wrappers/chart_config.h \
598 + aclk/schema-wrappers/node_info.cc \
599 + aclk/schema-wrappers/node_info.h \
600 aclk/schema-wrappers/schema_wrappers.h \
601 aclk/schema-wrappers/schema_wrapper_utils.cc \
602 aclk/schema-wrappers/schema_wrapper_utils.h \
@@ -632,6 +634,8 @@ ACLK_NG_PROTO_BUILT_FILES = aclk/aclk-schemas/proto/agent/v1/connection.pb.cc \
634 aclk/aclk-schemas/proto/chart/v1/config.pb.h \
635 aclk/aclk-schemas/proto/aclk/v1/lib.pb.cc \
636 aclk/aclk-schemas/proto/aclk/v1/lib.pb.h \
637 + aclk/aclk-schemas/proto/nodeinstance/info/v1/info.pb.cc \
638 + aclk/aclk-schemas/proto/nodeinstance/info/v1/info.pb.h \
639 $(NULL)
640
641 BUILT_SOURCES += $(ACLK_NG_PROTO_BUILT_FILES)
@@ -670,6 +674,10 @@ aclk/aclk-schemas/proto/aclk/v1/lib.pb.cc \
674 aclk/aclk-schemas/proto/aclk/v1/lib.pb.h: aclk/aclk-schemas/proto/aclk/v1/lib.proto
675 $(PROTOC) -I=aclk/aclk-schemas --cpp_out=$(builddir)/aclk/aclk-schemas $^
676
677 +aclk/aclk-schemas/proto/nodeinstance/info/v1/info.pb.cc \
678 +aclk/aclk-schemas/proto/nodeinstance/info/v1/info.pb.h: aclk/aclk-schemas/proto/nodeinstance/info/v1/info.proto
679 + $(PROTOC) -I=aclk/aclk-schemas --cpp_out=$(builddir)/aclk/aclk-schemas $^
680 +
681 endif #ACLK_NG
682
683 if ENABLE_ACLK
aclk/aclk_charts_api.c
+9
@@ -61,3 +61,12 @@ void aclk_retention_updated(struct retention_updated *data)
61 query->data.bin_payload.msg_name = "RetentionUpdated";
62 QUEUE_IF_PAYLOAD_PRESENT(query);
63 }
64 +
65 +void aclk_update_node_info(struct update_node_info *info)
66 +{
67 + aclk_query_t query = aclk_query_new(UPDATE_NODE_INFO);
68 + query->data.bin_payload.topic = ACLK_TOPICID_NODE_INFO;
69 + query->data.bin_payload.payload = generate_update_node_info_message(&query->data.bin_payload.size, info);
70 + query->data.bin_payload.msg_name = "UpdateNodeInfo";
71 + QUEUE_IF_PAYLOAD_PRESENT(query);
72 +}
aclk/aclk_charts_api.h
+2
@@ -15,4 +15,6 @@ void aclk_chart_reset(chart_reset_t reset);
15
16 void aclk_retention_updated(struct retention_updated *data);
17
18 +void aclk_update_node_info(struct update_node_info *info);
19 +
20 #endif /* ACLK_CHARTS_H */
aclk/aclk_query.c
+1
@@ -293,6 +293,7 @@ aclk_query_handler aclk_query_handlers[] = {
293 { .type = CHART_CONFIG_UPDATED, .name = "chart config updated", .fnc = send_bin_msg },
294 { .type = CHART_RESET, .name = "reset chart messages", .fnc = send_bin_msg },
295 { .type = RETENTION_UPDATED, .name = "update retention info", .fnc = send_bin_msg },
296 + { .type = UPDATE_NODE_INFO, .name = "update node info", .fnc = send_bin_msg },
297 { .type = UNKNOWN, .name = NULL, .fnc = NULL }
298 };
299
aclk/aclk_query_queue.c
+1
@@ -170,6 +170,7 @@ void aclk_query_free(aclk_query_t query)
170 case CHART_CONFIG_UPDATED:
171 case CHART_RESET:
172 case RETENTION_UPDATED:
173 + case UPDATE_NODE_INFO:
174 freez(query->data.bin_payload.payload);
175 break;
176
aclk/aclk_query_queue.h
+2 -1
@@ -22,7 +22,8 @@ typedef enum {
22 CHART_DIMS_UPDATE,
23 CHART_CONFIG_UPDATED,
24 CHART_RESET,
25 - RETENTION_UPDATED
25 + RETENTION_UPDATED,
26 + UPDATE_NODE_INFO
27 } aclk_query_type_t;
28
29 struct aclk_query_metadata {
aclk/aclk_util.c
+2
@@ -124,6 +124,7 @@ struct topic_name {
124 { .id = ACLK_TOPICID_CHART_CONFIGS_UPDATED, .name = "chart-configs-updated" },
125 { .id = ACLK_TOPICID_CHART_RESET, .name = "reset-charts" },
126 { .id = ACLK_TOPICID_RETENTION_UPDATED, .name = "chart-retention-updated" },
127 + { .id = ACLK_TOPICID_NODE_INFO, .name = "node-instance-info" },
128 { .id = ACLK_TOPICID_UNKNOWN, .name = NULL }
129 };
130
@@ -149,6 +150,7 @@ enum aclk_topics compulsory_topics_new_cloud_arch[] = {
150 ACLK_TOPICID_CHART_CONFIGS_UPDATED,
151 ACLK_TOPICID_CHART_RESET,
152 ACLK_TOPICID_RETENTION_UPDATED,
153 + ACLK_TOPICID_NODE_INFO,
154 ACLK_TOPICID_UNKNOWN
155 };
156
aclk/aclk_util.h
+2 -1
@@ -68,7 +68,8 @@ enum aclk_topics {
68 ACLK_TOPICID_CHART_DIMS = 9,
69 ACLK_TOPICID_CHART_CONFIGS_UPDATED = 10,
70 ACLK_TOPICID_CHART_RESET = 11,
71 - ACLK_TOPICID_RETENTION_UPDATED = 12
71 + ACLK_TOPICID_RETENTION_UPDATED = 12,
72 + ACLK_TOPICID_NODE_INFO = 13
73 };
74
75 const char *aclk_get_topic(enum aclk_topics topic);
aclk/schema-wrappers/node_info.cc new
+83
@@ -0,0 +1,83 @@
1 +#include "node_info.h"
2 +
3 +#include "proto/nodeinstance/info/v1/info.pb.h"
4 +
5 +#include "schema_wrapper_utils.h"
6 +
7 +static int generate_node_info(nodeinstance::info::v1::NodeInfo *info, struct aclk_node_info *data)
8 +{
9 + struct label *label;
10 + google::protobuf::Map<std::string, std::string> *map;
11 +
12 + try
13 + {
14 + info->set_name(data->name);
15 +
16 + info->set_os(data->os);
17 + info->set_os_name(data->os_name);
18 + info->set_os_version(data->os_version);
19 +
20 + info->set_kernel_name(data->kernel_name);
21 + info->set_kernel_version(data->kernel_version);
22 +
23 + info->set_architecture(data->architecture);
24 +
25 + info->set_cpus(data->cpus);
26 +
27 + info->set_cpu_frequency(data->cpu_frequency);
28 +
29 + info->set_memory(data->memory);
30 +
31 + info->set_disk_space(data->disk_space);
32 +
33 + info->set_version(data->version);
34 +
35 + info->set_release_channel(data->release_channel);
36 +
37 + info->set_timezone(data->timezone);
38 +
39 + info->set_virtualization_type(data->virtualization_type);
40 +
41 + info->set_container_type(data->container_type);
42 +
43 + info->set_custom_info(data->custom_info);
44 +
45 + for (size_t i = 0; i < data->service_count; i++)
46 + info->add_services(data->services[i]);
47 +
48 + info->set_machine_guid(data->machine_guid);
49 +
50 + map = info->mutable_host_labels();
51 + label = data->host_labels_head;
52 + while (label) {
53 + map->insert({label->key, label->value});
54 + label = label->next;
55 + }
56 + }
57 + catch(...) {
58 + return 1;
59 + }
60 + return 0;
61 +}
62 +
63 +char *generate_update_node_info_message(size_t *len, struct update_node_info *info)
64 +{
65 + nodeinstance::info::v1::UpdateNodeInfo msg;
66 +
67 + msg.set_node_id(info->node_id);
68 + msg.set_claim_id(info->claim_id);
69 +
70 + if (generate_node_info(msg.mutable_data(), &info->data))
71 + return NULL;
72 +
73 + set_google_timestamp_from_timeval(info->updated_at, msg.mutable_updated_at());
74 + msg.set_machine_guid(info->machine_guid);
75 + msg.set_child(info->child);
76 +
77 + *len = PROTO_COMPAT_MSG_SIZE(msg);
78 + char *bin = (char*)malloc(*len);
79 + if (bin)
80 + msg.SerializeToArray(bin, *len);
81 +
82 + return bin;
83 +}
aclk/schema-wrappers/node_info.h new
+69
@@ -0,0 +1,69 @@
1 +// SPDX-License-Identifier: GPL-3.0-or-later
2 +
3 +#ifndef ACLK_SCHEMA_WRAPPER_NODE_INFO_H
4 +#define ACLK_SCHEMA_WRAPPER_NODE_INFO_H
5 +
6 +#include <stdlib.h>
7 +
8 +#include "database/rrd.h"
9 +
10 +#ifdef __cplusplus
11 +extern "C" {
12 +#endif
13 +
14 +struct aclk_node_info {
15 + char *name;
16 +
17 + char *os;
18 + char *os_name;
19 + char *os_version;
20 +
21 + char *kernel_name;
22 + char *kernel_version;
23 +
24 + char *architecture;
25 +
26 + uint32_t cpus;
27 +
28 + char *cpu_frequency;
29 +
30 + char *memory;
31 +
32 + char *disk_space;
33 +
34 + char *version;
35 +
36 + char *release_channel;
37 +
38 + char *timezone;
39 +
40 + char *virtualization_type;
41 +
42 + char *container_type;
43 +
44 + char *custom_info;
45 +
46 + char **services;
47 + size_t service_count;
48 +
49 + char *machine_guid;
50 +
51 + struct label *host_labels_head;
52 +};
53 +
54 +struct update_node_info {
55 + char *node_id;
56 + char *claim_id;
57 + struct aclk_node_info data;
58 + struct timeval updated_at;
59 + char *machine_guid;
60 + int child;
61 +};
62 +
63 +char *generate_update_node_info_message(size_t *len, struct update_node_info *info);
64 +
65 +#ifdef __cplusplus
66 +}
67 +#endif
68 +
69 +#endif /* ACLK_SCHEMA_WRAPPER_NODE_INFO_H */
aclk/schema-wrappers/schema_wrappers.h
+1
@@ -10,5 +10,6 @@
10 #include "node_creation.h"
11 #include "chart_config.h"
12 #include "chart_stream.h"
13 +#include "node_info.h"
14
15 #endif /* SCHEMA_WRAPPERS_H */