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 */