Browse Source

Adds NodeInstanceInfo internal API (#11419)

* Adds NodeInstanceInfo internal API
Timotej S 3 years ago
parent
commit
590c5aecd5

+ 8 - 0
Makefile.am

@@ -595,6 +595,8 @@ ACLK_NG_FILES = \
     aclk/schema-wrappers/chart_stream.h \
     aclk/schema-wrappers/chart_config.cc \
     aclk/schema-wrappers/chart_config.h \
+    aclk/schema-wrappers/node_info.cc \
+    aclk/schema-wrappers/node_info.h \
     aclk/schema-wrappers/schema_wrappers.h \
     aclk/schema-wrappers/schema_wrapper_utils.cc \
     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 \
     aclk/aclk-schemas/proto/chart/v1/config.pb.h \
     aclk/aclk-schemas/proto/aclk/v1/lib.pb.cc \
     aclk/aclk-schemas/proto/aclk/v1/lib.pb.h \
+    aclk/aclk-schemas/proto/nodeinstance/info/v1/info.pb.cc \
+    aclk/aclk-schemas/proto/nodeinstance/info/v1/info.pb.h \
     $(NULL)
 
 BUILT_SOURCES += $(ACLK_NG_PROTO_BUILT_FILES)
@@ -670,6 +674,10 @@ aclk/aclk-schemas/proto/aclk/v1/lib.pb.cc \
 aclk/aclk-schemas/proto/aclk/v1/lib.pb.h: aclk/aclk-schemas/proto/aclk/v1/lib.proto
 	$(PROTOC) -I=aclk/aclk-schemas --cpp_out=$(builddir)/aclk/aclk-schemas $^
 
+aclk/aclk-schemas/proto/nodeinstance/info/v1/info.pb.cc \
+aclk/aclk-schemas/proto/nodeinstance/info/v1/info.pb.h: aclk/aclk-schemas/proto/nodeinstance/info/v1/info.proto
+	$(PROTOC) -I=aclk/aclk-schemas --cpp_out=$(builddir)/aclk/aclk-schemas $^
+
 endif #ACLK_NG
 
 if ENABLE_ACLK

+ 9 - 0
aclk/aclk_charts_api.c

@@ -61,3 +61,12 @@ void aclk_retention_updated(struct retention_updated *data)
     query->data.bin_payload.msg_name = "RetentionUpdated";
     QUEUE_IF_PAYLOAD_PRESENT(query);
 }
+
+void aclk_update_node_info(struct update_node_info *info)
+{
+    aclk_query_t query = aclk_query_new(UPDATE_NODE_INFO);
+    query->data.bin_payload.topic = ACLK_TOPICID_NODE_INFO;
+    query->data.bin_payload.payload = generate_update_node_info_message(&query->data.bin_payload.size, info);
+    query->data.bin_payload.msg_name = "UpdateNodeInfo";
+    QUEUE_IF_PAYLOAD_PRESENT(query);
+}

+ 2 - 0
aclk/aclk_charts_api.h

@@ -15,4 +15,6 @@ void aclk_chart_reset(chart_reset_t reset);
 
 void aclk_retention_updated(struct retention_updated *data);
 
+void aclk_update_node_info(struct update_node_info *info);
+
 #endif /* ACLK_CHARTS_H */

+ 1 - 0
aclk/aclk_query.c

@@ -293,6 +293,7 @@ aclk_query_handler aclk_query_handlers[] = {
     { .type = CHART_CONFIG_UPDATED, .name = "chart config updated",     .fnc = send_bin_msg             },
     { .type = CHART_RESET,          .name = "reset chart messages",     .fnc = send_bin_msg             },
     { .type = RETENTION_UPDATED,    .name = "update retention info",    .fnc = send_bin_msg             },
+    { .type = UPDATE_NODE_INFO,     .name = "update node info",         .fnc = send_bin_msg             },
     { .type = UNKNOWN,              .name = NULL,                       .fnc = NULL                     }
 };
 

+ 1 - 0
aclk/aclk_query_queue.c

@@ -170,6 +170,7 @@ void aclk_query_free(aclk_query_t query)
     case CHART_CONFIG_UPDATED:
     case CHART_RESET:
     case RETENTION_UPDATED:
+    case UPDATE_NODE_INFO:
         freez(query->data.bin_payload.payload);
         break;
 

+ 2 - 1
aclk/aclk_query_queue.h

@@ -22,7 +22,8 @@ typedef enum {
     CHART_DIMS_UPDATE,
     CHART_CONFIG_UPDATED,
     CHART_RESET,
-    RETENTION_UPDATED
+    RETENTION_UPDATED,
+    UPDATE_NODE_INFO
 } aclk_query_type_t;
 
 struct aclk_query_metadata {

+ 2 - 0
aclk/aclk_util.c

@@ -124,6 +124,7 @@ struct topic_name {
     { .id = ACLK_TOPICID_CHART_CONFIGS_UPDATED, .name = "chart-configs-updated"    },
     { .id = ACLK_TOPICID_CHART_RESET,           .name = "reset-charts"             },
     { .id = ACLK_TOPICID_RETENTION_UPDATED,     .name = "chart-retention-updated"  },
+    { .id = ACLK_TOPICID_NODE_INFO,             .name = "node-instance-info"       },
     { .id = ACLK_TOPICID_UNKNOWN,               .name = NULL                       }
 };
 
@@ -149,6 +150,7 @@ enum aclk_topics compulsory_topics_new_cloud_arch[] = {
     ACLK_TOPICID_CHART_CONFIGS_UPDATED,
     ACLK_TOPICID_CHART_RESET,
     ACLK_TOPICID_RETENTION_UPDATED,
+    ACLK_TOPICID_NODE_INFO,
     ACLK_TOPICID_UNKNOWN
 };
 

+ 2 - 1
aclk/aclk_util.h

@@ -68,7 +68,8 @@ enum aclk_topics {
     ACLK_TOPICID_CHART_DIMS            = 9,
     ACLK_TOPICID_CHART_CONFIGS_UPDATED = 10,
     ACLK_TOPICID_CHART_RESET           = 11,
-    ACLK_TOPICID_RETENTION_UPDATED     = 12
+    ACLK_TOPICID_RETENTION_UPDATED     = 12,
+    ACLK_TOPICID_NODE_INFO             = 13
 };
 
 const char *aclk_get_topic(enum aclk_topics topic);

+ 83 - 0
aclk/schema-wrappers/node_info.cc

@@ -0,0 +1,83 @@
+#include "node_info.h"
+
+#include "proto/nodeinstance/info/v1/info.pb.h"
+
+#include "schema_wrapper_utils.h"
+
+static int generate_node_info(nodeinstance::info::v1::NodeInfo *info, struct aclk_node_info *data)
+{
+    struct label *label;
+    google::protobuf::Map<std::string, std::string> *map;
+
+    try
+    {
+        info->set_name(data->name);
+    
+        info->set_os(data->os);
+        info->set_os_name(data->os_name);
+        info->set_os_version(data->os_version);
+    
+        info->set_kernel_name(data->kernel_name);
+        info->set_kernel_version(data->kernel_version);
+    
+        info->set_architecture(data->architecture);
+    
+        info->set_cpus(data->cpus);
+    
+        info->set_cpu_frequency(data->cpu_frequency);
+    
+        info->set_memory(data->memory);
+    
+        info->set_disk_space(data->disk_space);
+    
+        info->set_version(data->version);
+    
+        info->set_release_channel(data->release_channel);
+    
+        info->set_timezone(data->timezone);
+    
+        info->set_virtualization_type(data->virtualization_type);
+    
+        info->set_container_type(data->container_type);
+    
+        info->set_custom_info(data->custom_info);
+    
+        for (size_t i = 0; i < data->service_count; i++)
+            info->add_services(data->services[i]);
+    
+        info->set_machine_guid(data->machine_guid);
+    
+        map = info->mutable_host_labels();
+        label = data->host_labels_head;
+        while (label) {
+            map->insert({label->key, label->value});
+            label = label->next;
+        }
+    }
+    catch(...) {
+        return 1;
+    }
+    return 0;
+}
+
+char *generate_update_node_info_message(size_t *len, struct update_node_info *info)
+{
+    nodeinstance::info::v1::UpdateNodeInfo msg;
+
+    msg.set_node_id(info->node_id);
+    msg.set_claim_id(info->claim_id);
+
+    if (generate_node_info(msg.mutable_data(), &info->data))
+        return NULL;
+
+    set_google_timestamp_from_timeval(info->updated_at, msg.mutable_updated_at());
+    msg.set_machine_guid(info->machine_guid);
+    msg.set_child(info->child);
+
+    *len = PROTO_COMPAT_MSG_SIZE(msg);
+    char *bin = (char*)malloc(*len);
+    if (bin)
+        msg.SerializeToArray(bin, *len);
+
+    return bin;
+}

+ 69 - 0
aclk/schema-wrappers/node_info.h

@@ -0,0 +1,69 @@
+// SPDX-License-Identifier: GPL-3.0-or-later
+
+#ifndef ACLK_SCHEMA_WRAPPER_NODE_INFO_H
+#define ACLK_SCHEMA_WRAPPER_NODE_INFO_H
+
+#include <stdlib.h>
+
+#include "database/rrd.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+struct aclk_node_info {
+    char *name;
+
+    char *os;
+    char *os_name;
+    char *os_version;
+
+    char *kernel_name;
+    char *kernel_version;
+
+    char *architecture;
+
+    uint32_t cpus;
+
+    char *cpu_frequency;
+
+    char *memory;
+
+    char *disk_space;
+
+    char *version;
+
+    char *release_channel;
+
+    char *timezone;
+
+    char *virtualization_type;
+
+    char *container_type;
+
+    char *custom_info;
+
+    char **services;
+    size_t service_count;
+
+    char *machine_guid;
+
+    struct label *host_labels_head;
+};
+
+struct update_node_info {
+    char *node_id;
+    char *claim_id;
+    struct aclk_node_info data;
+    struct timeval updated_at;
+    char *machine_guid;
+    int child;
+};
+
+char *generate_update_node_info_message(size_t *len, struct update_node_info *info);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* ACLK_SCHEMA_WRAPPER_NODE_INFO_H */

Some files were not shown because too many files changed in this diff