Skip to content

Commit 590c5ae

Browse files
authored
Adds NodeInstanceInfo internal API (netdata#11419)
* Adds NodeInstanceInfo internal API
1 parent 1610975 commit 590c5ae

11 files changed

+180
-2
lines changed

Makefile.am

+8
Original file line numberDiff line numberDiff line change
@@ -595,6 +595,8 @@ ACLK_NG_FILES = \
595595
aclk/schema-wrappers/chart_stream.h \
596596
aclk/schema-wrappers/chart_config.cc \
597597
aclk/schema-wrappers/chart_config.h \
598+
aclk/schema-wrappers/node_info.cc \
599+
aclk/schema-wrappers/node_info.h \
598600
aclk/schema-wrappers/schema_wrappers.h \
599601
aclk/schema-wrappers/schema_wrapper_utils.cc \
600602
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 \
632634
aclk/aclk-schemas/proto/chart/v1/config.pb.h \
633635
aclk/aclk-schemas/proto/aclk/v1/lib.pb.cc \
634636
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 \
635639
$(NULL)
636640

637641
BUILT_SOURCES += $(ACLK_NG_PROTO_BUILT_FILES)
@@ -670,6 +674,10 @@ aclk/aclk-schemas/proto/aclk/v1/lib.pb.cc \
670674
aclk/aclk-schemas/proto/aclk/v1/lib.pb.h: aclk/aclk-schemas/proto/aclk/v1/lib.proto
671675
$(PROTOC) -I=aclk/aclk-schemas --cpp_out=$(builddir)/aclk/aclk-schemas $^
672676

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+
673681
endif #ACLK_NG
674682

675683
if ENABLE_ACLK

aclk/aclk_charts_api.c

+9
Original file line numberDiff line numberDiff line change
@@ -61,3 +61,12 @@ void aclk_retention_updated(struct retention_updated *data)
6161
query->data.bin_payload.msg_name = "RetentionUpdated";
6262
QUEUE_IF_PAYLOAD_PRESENT(query);
6363
}
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
Original file line numberDiff line numberDiff line change
@@ -15,4 +15,6 @@ void aclk_chart_reset(chart_reset_t reset);
1515

1616
void aclk_retention_updated(struct retention_updated *data);
1717

18+
void aclk_update_node_info(struct update_node_info *info);
19+
1820
#endif /* ACLK_CHARTS_H */

aclk/aclk_query.c

+1
Original file line numberDiff line numberDiff line change
@@ -293,6 +293,7 @@ aclk_query_handler aclk_query_handlers[] = {
293293
{ .type = CHART_CONFIG_UPDATED, .name = "chart config updated", .fnc = send_bin_msg },
294294
{ .type = CHART_RESET, .name = "reset chart messages", .fnc = send_bin_msg },
295295
{ .type = RETENTION_UPDATED, .name = "update retention info", .fnc = send_bin_msg },
296+
{ .type = UPDATE_NODE_INFO, .name = "update node info", .fnc = send_bin_msg },
296297
{ .type = UNKNOWN, .name = NULL, .fnc = NULL }
297298
};
298299

aclk/aclk_query_queue.c

+1
Original file line numberDiff line numberDiff line change
@@ -170,6 +170,7 @@ void aclk_query_free(aclk_query_t query)
170170
case CHART_CONFIG_UPDATED:
171171
case CHART_RESET:
172172
case RETENTION_UPDATED:
173+
case UPDATE_NODE_INFO:
173174
freez(query->data.bin_payload.payload);
174175
break;
175176

aclk/aclk_query_queue.h

+2-1
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,8 @@ typedef enum {
2222
CHART_DIMS_UPDATE,
2323
CHART_CONFIG_UPDATED,
2424
CHART_RESET,
25-
RETENTION_UPDATED
25+
RETENTION_UPDATED,
26+
UPDATE_NODE_INFO
2627
} aclk_query_type_t;
2728

2829
struct aclk_query_metadata {

aclk/aclk_util.c

+2
Original file line numberDiff line numberDiff line change
@@ -124,6 +124,7 @@ struct topic_name {
124124
{ .id = ACLK_TOPICID_CHART_CONFIGS_UPDATED, .name = "chart-configs-updated" },
125125
{ .id = ACLK_TOPICID_CHART_RESET, .name = "reset-charts" },
126126
{ .id = ACLK_TOPICID_RETENTION_UPDATED, .name = "chart-retention-updated" },
127+
{ .id = ACLK_TOPICID_NODE_INFO, .name = "node-instance-info" },
127128
{ .id = ACLK_TOPICID_UNKNOWN, .name = NULL }
128129
};
129130

@@ -149,6 +150,7 @@ enum aclk_topics compulsory_topics_new_cloud_arch[] = {
149150
ACLK_TOPICID_CHART_CONFIGS_UPDATED,
150151
ACLK_TOPICID_CHART_RESET,
151152
ACLK_TOPICID_RETENTION_UPDATED,
153+
ACLK_TOPICID_NODE_INFO,
152154
ACLK_TOPICID_UNKNOWN
153155
};
154156

aclk/aclk_util.h

+2-1
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,8 @@ enum aclk_topics {
6868
ACLK_TOPICID_CHART_DIMS = 9,
6969
ACLK_TOPICID_CHART_CONFIGS_UPDATED = 10,
7070
ACLK_TOPICID_CHART_RESET = 11,
71-
ACLK_TOPICID_RETENTION_UPDATED = 12
71+
ACLK_TOPICID_RETENTION_UPDATED = 12,
72+
ACLK_TOPICID_NODE_INFO = 13
7273
};
7374

7475
const char *aclk_get_topic(enum aclk_topics topic);

aclk/schema-wrappers/node_info.cc

+83
Original file line numberDiff line numberDiff line change
@@ -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

+69
Original file line numberDiff line numberDiff line change
@@ -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
Original file line numberDiff line numberDiff line change
@@ -10,5 +10,6 @@
1010
#include "node_creation.h"
1111
#include "chart_config.h"
1212
#include "chart_stream.h"
13+
#include "node_info.h"
1314

1415
#endif /* SCHEMA_WRAPPERS_H */

0 commit comments

Comments
 (0)