diff options
-rw-r--r-- | Makefile.am | 18 | ||||
-rw-r--r-- | aclk/aclk.c | 5 | ||||
-rw-r--r-- | aclk/aclk.h | 2 | ||||
-rw-r--r-- | aclk/aclk_alarm_api.c | 37 | ||||
-rw-r--r-- | aclk/aclk_alarm_api.h | 13 | ||||
-rw-r--r-- | aclk/aclk_query.c | 2 | ||||
-rw-r--r-- | aclk/aclk_query_queue.c | 2 | ||||
-rw-r--r-- | aclk/aclk_query_queue.h | 4 | ||||
-rw-r--r-- | aclk/aclk_util.c | 6 | ||||
-rw-r--r-- | aclk/aclk_util.h | 5 | ||||
-rw-r--r-- | aclk/schema-wrappers/alarm_config.cc | 147 | ||||
-rw-r--r-- | aclk/schema-wrappers/alarm_config.h | 69 | ||||
-rw-r--r-- | aclk/schema-wrappers/alarm_stream.cc | 176 | ||||
-rw-r--r-- | aclk/schema-wrappers/alarm_stream.h | 110 | ||||
-rw-r--r-- | aclk/schema-wrappers/node_info.cc | 72 | ||||
-rw-r--r-- | aclk/schema-wrappers/schema_wrappers.h | 2 |
16 files changed, 638 insertions, 32 deletions
diff --git a/Makefile.am b/Makefile.am index f47fea1ea3..d3302fa393 100644 --- a/Makefile.am +++ b/Makefile.am @@ -578,6 +578,8 @@ ACLK_NG_FILES = \ aclk/https_client.h \ aclk/aclk_charts_api.c \ aclk/aclk_charts_api.h \ + aclk/aclk_alarm_api.c \ + aclk/aclk_alarm_api.h \ mqtt_websockets/src/mqtt_wss_client.c \ mqtt_websockets/src/include/mqtt_wss_client.h \ mqtt_websockets/src/mqtt_wss_log.c \ @@ -599,6 +601,10 @@ ACLK_NG_FILES = \ aclk/schema-wrappers/chart_stream.h \ aclk/schema-wrappers/chart_config.cc \ aclk/schema-wrappers/chart_config.h \ + aclk/schema-wrappers/alarm_stream.cc \ + aclk/schema-wrappers/alarm_stream.h \ + aclk/schema-wrappers/alarm_config.cc \ + aclk/schema-wrappers/alarm_config.h \ aclk/schema-wrappers/node_info.cc \ aclk/schema-wrappers/node_info.h \ aclk/schema-wrappers/schema_wrappers.h \ @@ -638,6 +644,10 @@ 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/alarm/v1/config.pb.cc \ + aclk/aclk-schemas/proto/alarm/v1/config.pb.h \ + aclk/aclk-schemas/proto/alarm/v1/stream.pb.cc \ + aclk/aclk-schemas/proto/alarm/v1/stream.pb.h \ aclk/aclk-schemas/proto/nodeinstance/info/v1/info.pb.cc \ aclk/aclk-schemas/proto/nodeinstance/info/v1/info.pb.h \ $(NULL) @@ -678,6 +688,14 @@ 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/alarm/v1/config.pb.cc \ +aclk/aclk-schemas/proto/alarm/v1/config.pb.h: aclk/aclk-schemas/proto/alarm/v1/config.proto + $(PROTOC) -I=aclk/aclk-schemas --cpp_out=$(builddir)/aclk/aclk-schemas $^ + +aclk/aclk-schemas/proto/alarm/v1/stream.pb.cc \ +aclk/aclk-schemas/proto/alarm/v1/stream.pb.h: aclk/aclk-schemas/proto/alarm/v1/stream.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 $^ diff --git a/aclk/aclk.c b/aclk/aclk.c index 23d77291c4..359ecaed72 100644 --- a/aclk/aclk.c +++ b/aclk/aclk.c @@ -1014,3 +1014,8 @@ void aclk_send_node_instances() } freez(list_head); } + +void aclk_send_bin_msg(char *msg, size_t msg_len, enum aclk_topics subtopic, const char *msgname) +{ + aclk_send_bin_message_subtopic_pid(mqttwss_client, msg, msg_len, subtopic, msgname); +} diff --git a/aclk/aclk.h b/aclk/aclk.h index 18cdbd248c..fb7116f2c3 100644 --- a/aclk/aclk.h +++ b/aclk/aclk.h @@ -47,4 +47,6 @@ void ng_aclk_host_state_update(RRDHOST *host, int cmd); void aclk_send_node_instances(void); +void aclk_send_bin_msg(char *msg, size_t msg_len, enum aclk_topics subtopic, const char *msgname); + #endif /* ACLK_H */ diff --git a/aclk/aclk_alarm_api.c b/aclk/aclk_alarm_api.c new file mode 100644 index 0000000000..9826fdc2ea --- /dev/null +++ b/aclk/aclk_alarm_api.c @@ -0,0 +1,37 @@ +// SPDX-License-Identifier: GPL-3.0-or-later + +#include "aclk_alarm_api.h" + +#include "aclk_query_queue.h" + +#include "aclk_util.h" + +#include "aclk.h" + +void aclk_send_alarm_log_health(struct alarm_log_health *log_health) +{ + aclk_query_t query = aclk_query_new(ALARM_LOG_HEALTH); + query->data.bin_payload.payload = generate_alarm_log_health(&query->data.bin_payload.size, log_health); + query->data.bin_payload.topic = ACLK_TOPICID_ALARM_HEALTH; + query->data.bin_payload.msg_name = "AlarmLogHealth"; + if (query->data.bin_payload.payload) + aclk_queue_query(query); +} + +void aclk_send_alarm_log_entry(struct alarm_log_entry *log_entry) +{ + size_t payload_size; + char *payload = generate_alarm_log_entry(&payload_size, log_entry); + + aclk_send_bin_msg(payload, payload_size, ACLK_TOPICID_ALARM_LOG, "AlarmLogEntry"); +} + +void aclk_send_provide_alarm_cfg(struct provide_alarm_configuration *cfg) +{ + aclk_query_t query = aclk_query_new(ALARM_PROVIDE_CFG); + query->data.bin_payload.payload = generate_provide_alarm_configuration(&query->data.bin_payload.size, cfg); + query->data.bin_payload.topic = ACLK_TOPICID_ALARM_CONFIG; + query->data.bin_payload.msg_name = "ProvideAlarmConfiguration"; + if (query->data.bin_payload.payload) + aclk_queue_query(query); +} diff --git a/aclk/aclk_alarm_api.h b/aclk/aclk_alarm_api.h new file mode 100644 index 0000000000..e99de208b5 --- /dev/null +++ b/aclk/aclk_alarm_api.h @@ -0,0 +1,13 @@ +// SPDX-License-Identifier: GPL-3.0-or-later + +#ifndef ACLK_ALARM_API_H +#define ACLK_ALARM_API_H + +#include "../daemon/common.h" +#include "schema-wrappers/schema_wrappers.h" + +void aclk_send_alarm_log_health(struct alarm_log_health *log_health); +void aclk_send_alarm_log_entry(struct alarm_log_entry *log_entry); +void aclk_send_provide_alarm_cfg(struct provide_alarm_configuration *cfg); + +#endif /* ACLK_ALARM_API_H */ diff --git a/aclk/aclk_query.c b/aclk/aclk_query.c index 12984ac661..114589ce31 100644 --- a/aclk/aclk_query.c +++ b/aclk/aclk_query.c @@ -294,6 +294,8 @@ aclk_query_handler aclk_query_handlers[] = { { .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 = ALARM_LOG_HEALTH, .name = "alarm log health", .fnc = send_bin_msg }, + { .type = ALARM_PROVIDE_CFG, .name = "provide alarm config", .fnc = send_bin_msg }, { .type = UNKNOWN, .name = NULL, .fnc = NULL } }; diff --git a/aclk/aclk_query_queue.c b/aclk/aclk_query_queue.c index c4383cf1dc..1f84dcdaf9 100644 --- a/aclk/aclk_query_queue.c +++ b/aclk/aclk_query_queue.c @@ -171,6 +171,8 @@ void aclk_query_free(aclk_query_t query) case CHART_RESET: case RETENTION_UPDATED: case UPDATE_NODE_INFO: + case ALARM_LOG_HEALTH: + case ALARM_PROVIDE_CFG: freez(query->data.bin_payload.payload); break; diff --git a/aclk/aclk_query_queue.h b/aclk/aclk_query_queue.h index 25a72dc43f..8293770d2a 100644 --- a/aclk/aclk_query_queue.h +++ b/aclk/aclk_query_queue.h @@ -23,7 +23,9 @@ typedef enum { CHART_CONFIG_UPDATED, CHART_RESET, RETENTION_UPDATED, - UPDATE_NODE_INFO + UPDATE_NODE_INFO, + ALARM_LOG_HEALTH, + ALARM_PROVIDE_CFG } aclk_query_type_t; struct aclk_query_metadata { diff --git a/aclk/aclk_util.c b/aclk/aclk_util.c index da9b0de3ff..8401ea02f5 100644 --- a/aclk/aclk_util.c +++ b/aclk/aclk_util.c @@ -125,6 +125,9 @@ struct topic_name { { .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_ALARM_LOG, .name = "alarm-log" }, + { .id = ACLK_TOPICID_ALARM_HEALTH, .name = "alarm-health" }, + { .id = ACLK_TOPICID_ALARM_CONFIG, .name = "alarm-config" }, { .id = ACLK_TOPICID_UNKNOWN, .name = NULL } }; @@ -151,6 +154,9 @@ enum aclk_topics compulsory_topics_new_cloud_arch[] = { ACLK_TOPICID_CHART_RESET, ACLK_TOPICID_RETENTION_UPDATED, ACLK_TOPICID_NODE_INFO, + ACLK_TOPICID_ALARM_LOG, + ACLK_TOPICID_ALARM_HEALTH, + ACLK_TOPICID_ALARM_CONFIG, ACLK_TOPICID_UNKNOWN }; diff --git a/aclk/aclk_util.h b/aclk/aclk_util.h index baf8e97543..3b5e7d7451 100644 --- a/aclk/aclk_util.h +++ b/aclk/aclk_util.h @@ -69,7 +69,10 @@ enum aclk_topics { ACLK_TOPICID_CHART_CONFIGS_UPDATED = 10, ACLK_TOPICID_CHART_RESET = 11, ACLK_TOPICID_RETENTION_UPDATED = 12, - ACLK_TOPICID_NODE_INFO = 13 + ACLK_TOPICID_NODE_INFO = 13, + ACLK_TOPICID_ALARM_LOG = 14, + ACLK_TOPICID_ALARM_HEALTH = 15, + ACLK_TOPICID_ALARM_CONFIG = 16 }; const char *aclk_get_topic(enum aclk_topics topic); diff --git a/aclk/schema-wrappers/alarm_config.cc b/aclk/schema-wrappers/alarm_config.cc new file mode 100644 index 0000000000..e6c9e9974e --- /dev/null +++ b/aclk/schema-wrappers/alarm_config.cc @@ -0,0 +1,147 @@ +// SPDX-License-Identifier: GPL-3.0-or-later + +#include "alarm_config.h" + +#include "proto/alarm/v1/config.pb.h" + +#include "libnetdata/libnetdata.h" + +#include "schema_wrapper_utils.h" + +using namespace alarmconfig::v1; + +void destroy_aclk_alarm_configuration(struct aclk_alarm_configuration *cfg) +{ + freez(cfg->alarm); + freez(cfg->tmpl); + freez(cfg->on_chart); + + freez(cfg->classification); + freez(cfg->type); + freez(cfg->component); + + freez(cfg->os); + freez(cfg->hosts); + freez(cfg->plugin); + freez(cfg->module); + freez(cfg->charts); + freez(cfg->families); + freez(cfg->lookup); + freez(cfg->every); + freez(cfg->units); + + freez(cfg->green); + freez(cfg->red); + + freez(cfg->calculation_expr); + freez(cfg->warning_expr); + freez(cfg->critical_expr); + + freez(cfg->recipient); + freez(cfg->exec); + freez(cfg->delay); + freez(cfg->repeat); + freez(cfg->info); + freez(cfg->options); + freez(cfg->host_labels); + + freez(cfg->p_db_lookup_dimensions); + freez(cfg->p_db_lookup_method); + freez(cfg->p_db_lookup_options); +} + +char *generate_provide_alarm_configuration(size_t *len, struct provide_alarm_configuration *data) +{ + ProvideAlarmConfiguration msg; + AlarmConfiguration *cfg = msg.mutable_config(); + + msg.set_config_hash(data->cfg_hash); + + if (data->cfg.alarm) + cfg->set_alarm(data->cfg.alarm); + if (data->cfg.tmpl) + cfg->set_template_(data->cfg.tmpl); + if(data->cfg.on_chart) + cfg->set_on_chart(data->cfg.on_chart); + + if (data->cfg.classification) + cfg->set_classification(data->cfg.classification); + if (data->cfg.type) + cfg->set_type(data->cfg.type); + if (data->cfg.component) + cfg->set_component(data->cfg.component); + + if (data->cfg.os) + cfg->set_os(data->cfg.os); + if (data->cfg.hosts) + cfg->set_hosts(data->cfg.hosts); + if (data->cfg.plugin) + cfg->set_plugin(data->cfg.plugin); + if(data->cfg.module) + cfg->set_module(data->cfg.module); + if(data->cfg.charts) + cfg->set_charts(data->cfg.charts); + if(data->cfg.families) + cfg->set_families(data->cfg.families); + if(data->cfg.lookup) + cfg->set_lookup(data->cfg.lookup); + if(data->cfg.every) + cfg->set_every(data->cfg.every); + if(data->cfg.units) + cfg->set_units(data->cfg.units); + + if (data->cfg.green) + cfg->set_green(data->cfg.green); + if (data->cfg.red) + cfg->set_red(data->cfg.red); + + if (data->cfg.calculation_expr) + cfg->set_calculation_expr(data->cfg.calculation_expr); + if (data->cfg.warning_expr) + cfg->set_warning_expr(data->cfg.warning_expr); + if (data->cfg.critical_expr) + cfg->set_critical_expr(data->cfg.critical_expr); + + if (data->cfg.recipient) + cfg->set_recipient(data->cfg.recipient); + if (data->cfg.exec) + cfg->set_exec(data->cfg.exec); + if (data->cfg.delay) + cfg->set_delay(data->cfg.delay); + if (data->cfg.repeat) + cfg->set_repeat(data->cfg.repeat); + if (data->cfg.info) + cfg->set_info(data->cfg.info); + if (data->cfg.options) + cfg->set_options(data->cfg.options); + if (data->cfg.host_labels) + cfg->set_host_labels(data->cfg.host_labels); + + cfg->set_p_db_lookup_after(data->cfg.p_db_lookup_after); + cfg->set_p_db_lookup_before(data->cfg.p_db_lookup_before); + if (data->cfg.p_db_lookup_dimensions) + cfg->set_p_db_lookup_dimensions(data->cfg.p_db_lookup_dimensions); + if (data->cfg.p_db_lookup_method) + cfg->set_p_db_lookup_method(data->cfg.p_db_lookup_method); + if (data->cfg.p_db_lookup_options) + cfg->set_p_db_lookup_options(data->cfg.p_db_lookup_options); + cfg->set_p_update_every(data->cfg.p_update_every); + + *len = PROTO_COMPAT_MSG_SIZE(msg); + char *bin = (char*)mallocz(*len); + if (!msg.SerializeToArray(bin, *len)) + return NULL; + + return bin; +} + +char *parse_send_alarm_configuration(const char *data, size_t len) +{ + SendAlarmConfiguration msg; + if (!msg.ParseFromArray(data, len)) + return NULL; + if (!msg.config_hash().c_str()) + return NULL; + return strdupz(msg.config_hash().c_str()); +} + diff --git a/aclk/schema-wrappers/alarm_config.h b/aclk/schema-wrappers/alarm_config.h new file mode 100644 index 0000000000..157fbc60f0 --- /dev/null +++ b/aclk/schema-wrappers/alarm_config.h @@ -0,0 +1,69 @@ +// SPDX-License-Identifier: GPL-3.0-or-later + +#ifndef ACLK_SCHEMA_WRAPPER_ALARM_CONFIG_H +#define ACLK_SCHEMA_WRAPPER_ALARM_CONFIG_H + +#include <stdlib.h> +#include <stdint.h> + +#ifdef __cplusplus +extern "C" { +#endif + +struct aclk_alarm_configuration { + char *alarm; + char *tmpl; + char *on_chart; + + char *classification; + char *type; + char *component; + + char *os; + char *hosts; + char *plugin; + char *module; + char *charts; + char *families; + char *lookup; + char *every; + char *units; + + char *green; + char *red; + + char *calculation_expr; + char *warning_expr; + char *critical_expr; + + char *recipient; + char *exec; + char *delay; + char *repeat; + char *info; + char *options; + char *host_labels; + + int32_t p_db_lookup_after; + int32_t p_db_lookup_before; + char *p_db_lookup_dimensions; + char *p_db_lookup_method; + char *p_db_lookup_options; + int32_t p_update_every; +}; + +void destroy_aclk_alarm_configuration(struct aclk_alarm_configuration *cfg); + +struct provide_alarm_configuration { + char *cfg_hash; + struct aclk_alarm_configuration cfg; +}; + +char *generate_provide_alarm_configuration(size_t *len, struct provide_alarm_configuration *data); +char *parse_send_alarm_configuration(const char *data, size_t len); + +#ifdef __cplusplus +} +#endif + +#endif /* ACLK_SCHEMA_WRAPPER_ALARM_CONFIG_H */ diff --git a/aclk/schema-wrappers/alarm_stream.cc b/aclk/schema-wrappers/alarm_stream.cc new file mode 100644 index 0000000000..c74e053675 --- /dev/null +++ b/aclk/schema-wrappers/alarm_stream.cc @@ -0,0 +1,176 @@ +// SPDX-License-Identifier: GPL-3.0-or-later + +#include "alarm_stream.h" + +#include "proto/alarm/v1/stream.pb.h" + +#include "libnetdata/libnetdata.h" + +#include "schema_wrapper_utils.h" + +struct start_alarm_streaming parse_start_alarm_streaming(const char *data, size_t len) +{ + struct start_alarm_streaming ret; + memset(&ret, 0, sizeof(ret)); + + alarmstream::v1::StartAlarmStreaming msg; + + if (!msg.ParseFromArray(data, len)) + return ret; + + ret.node_id = strdupz(msg.node_id().c_str()); + ret.batch_id = msg.batch_id(); + ret.start_seq_id = msg.start_sequnce_id(); + + return ret; +} + +char *parse_send_alarm_log_health(const char *data, size_t len) +{ + alarmstream::v1::SendAlarmLogHealth msg; + if (!msg.ParseFromArray(data, len)) + return NULL; + return strdupz(msg.node_id().c_str()); +} + +char *generate_alarm_log_health(size_t *len, struct alarm_log_health *data) +{ + alarmstream::v1::AlarmLogHealth msg; + alarmstream::v1::LogEntries *entries; + + msg.set_claim_id(data->claim_id); + msg.set_node_id(data->node_id); + msg.set_enabled(data->enabled); + + switch (data->status) { + case ALARM_LOG_STATUS_IDLE: + msg.set_status(alarmstream::v1::ALARM_LOG_STATUS_IDLE); + break; + case ALARM_LOG_STATUS_RUNNING: + msg.set_status(alarmstream::v1::ALARM_LOG_STATUS_RUNNING); + break; + case ALARM_LOG_STATUS_UNSPECIFIED: + msg.set_status(alarmstream::v1::ALARM_LOG_STATUS_UNSPECIFIED); + break; + default: + error("Unknown status of AlarmLogHealth LogEntry"); + return NULL; + } + + entries = msg.mutable_log_entries(); + entries->set_first_sequence_id(data->log_entries.first_seq_id); + entries->set_last_sequence_id(data->log_entries.last_seq_id); + + set_google_timestamp_from_timeval(data->log_entries.first_when, entries->mutable_first_when()); + set_google_timestamp_from_timeval(data->log_entries.last_when, entries->mutable_last_when()); + + *len = PROTO_COMPAT_MSG_SIZE(msg); + char *bin = (char*)mallocz(*len); + if (!msg.SerializeToArray(bin, *len)) + return NULL; + + return bin; +} + +static alarmstream::v1::AlarmStatus aclk_alarm_status_to_proto(enum aclk_alarm_status status) +{ + switch (status) { + case ALARM_STATUS_NULL: + return alarmstream::v1::ALARM_STATUS_NULL; + case ALARM_STATUS_UNKNOWN: + return alarmstream::v1::ALARM_STATUS_UNKNOWN; + case ALARM_STATUS_REMOVED: + return alarmstream::v1::ALARM_STATUS_REMOVED; + case ALARM_STATUS_NOT_A_NUMBER: + return alarmstream::v1::ALARM_STATUS_NOT_A_NUMBER; + case ALARM_STATUS_CLEAR: + return alarmstream::v1::ALARM_STATUS_CLEAR; + case ALARM_STATUS_WARNING: + return alarmstream::v1::ALARM_STATUS_WARNING; + case ALARM_STATUS_CRITICAL: + return alarmstream::v1::ALARM_STATUS_CRITICAL; + default: + error("Unknown alarm status"); + return alarmstream::v1::ALARM_STATUS_UNKNOWN; + } +} + +void destroy_alarm_log_entry(struct alarm_log_entry *entry) +{ + freez(entry->node_id); + freez(entry->claim_id); + + freez(entry->chart); + freez(entry->name); + freez(entry->family); + + freez(entry->config_hash); + + freez(entry->timezone); + + freez(entry->exec_path); + freez(entry->conf_source); + freez(entry->command); + + freez(entry->value_string); + freez(entry->old_value_string); + + freez(entry->rendered_info); +} + +char *generate_alarm_log_entry(size_t *len, struct alarm_log_entry *data) +{ + alarmstream::v1::AlarmLogEntry le; + + le.set_node_id(data->node_id); + le.set_claim_id(data->claim_id); + + le.set_chart(data->chart); + le.set_name(data->name); + if (data->family) + le.set_family(data->family); + + le.set_batch_id(data->batch_id); + le.set_sequence_id(data->sequence_id); + le.set_when(data->when); + + le.set_config_hash(data->config_hash); + + le.set_utc_offset(data->utc_offset); + le.set_timezone(data->timezone); + + le.set_exec_path(data->exec_path); + le.set_conf_source(data->conf_source); + le.set_command(data->command); + + le.set_duration(data->duration); + le.set_non_clear_duration(data->non_clear_duration); + + + le.set_status(aclk_alarm_status_to_proto(data->status)); + le.set_old_status(aclk_alarm_status_to_proto(data->old_status)); + le.set_delay(data->delay); + le.set_delay_up_to_timestamp(data->delay_up_to_timestamp); + + le.set_last_repeat(data->last_repeat); + le.set_silenced(data->silenced); + + if (data->value_string) + le.set_value_string(data->value_string); + if (data->old_value_string) + le.set_old_value_string(data->old_value_string); + + le.set_value(data->value); + le.set_old_value(data->old_value); + + le.set_updated(data->updated); + + le.set_rendered_info(data->rendered_info); + + *len = PROTO_COMPAT_MSG_SIZE(le); + char *bin = (char*)mallocz(*len); + if (!le.SerializeToArray(bin, *len)) + return NULL; + + return bin; +} diff --git a/aclk/schema-wrappers/alarm_stream.h b/aclk/schema-wrappers/alarm_stream.h new file mode 100644 index 0000000000..a81834149a --- /dev/null +++ b/aclk/schema-wrappers/alarm_stream.h @@ -0,0 +1,110 @@ +// SPDX-License-Identifier: GPL-3.0-or-later + +#ifndef ACLK_SCHEMA_WRAPPER_ALARM_STREAM_H +#define ACLK_SCHEMA_WRAPPER_ALARM_STREAM_H + +#include <stdlib.h> + +#include "database/rrd.h" + +#ifdef __cplusplus +extern "C" { +#endif + +enum alarm_log_status_aclk { + ALARM_LOG_STATUS_UNSPECIFIED = 0, + ALARM_LOG_STATUS_RUNNING = 1, + ALARM_LOG_STATUS_IDLE = 2 +}; + +struct alarm_log_entries { + int64_t first_seq_id; + struct timeval first_when; + + int64_t last_seq_id; + struct timeval last_when; +}; + +struct alarm_log_health { + char *claim_id; + char *node_id; + int enabled; + enum alarm_log_status_aclk status; + struct alarm_log_entries log_entries; +}; + +struct start_alarm_streaming { + char *node_id; + uint64_t batch_id; + uint64_t start_seq_id; +}; + +struct start_alarm_streaming parse_start_alarm_streaming(const char *data, size_t len); +char *parse_send_alarm_log_health(const char *data, size_t len); + +char *generate_alarm_log_health(size_t *len, struct alarm_log_health *data); + +enum aclk_alarm_status { + ALARM_STATUS_NULL = 0, + ALARM_STATUS_UNKNOWN = 1, + ALARM_STATUS_REMOVED = 2, + ALARM_STATUS_NOT_A_NUMBER = 3, + ALARM_STATUS_CLEAR = 4, + ALARM_STATUS_WARNING = 5, + ALARM_STATUS_CRITICAL = 6 +}; + +struct alarm_log_entry { + char *node_id; + char *claim_id; + + char *chart; + char *name; + char *family; + + uint64_t batch_id; + uint64_t sequence_id; + uint64_t when; + + char *config_hash; + + int32_t utc_offset; + char *timezone; + + char *exec_path; + char *conf_source; + char *command; + + uint32_t duration; + uint32_t non_clear_duration; + + enum aclk_alarm_status status; + enum aclk_alarm_status old_status; + uint64_t delay; + uint64_t delay_up_to_timestamp; + + uint64_t last_repeat; + int silenced; + + char *value_string; + char *old_value_string; + + double value; + double old_value; + + // updated alarm entry, when the status of the alarm has been updated by a later entry + int updated; + + // rendered_info + char *rendered_info; +}; + +void destroy_alarm_log_entry(struct alarm_log_entry *entry); + +char *generate_alarm_log_entry(size_t *len, struct alarm_log_entry *data); + +#ifdef __cplusplus +} +#endif + +#endif /* ACLK_SCHEMA_WRAPPER_ALARM_STREAM_H */ diff --git a/aclk/schema-wrappers/node_info.cc b/aclk/schema-wrappers/node_info.cc index 7509756c26..f6638aa5f5 100644 --- a/aclk/schema-wrappers/node_info.cc +++ b/aclk/schema-wrappers/node_info.cc @@ -9,54 +9,66 @@ static int generate_node_info(nodeinstance::info::v1::NodeInfo *info, struct acl struct label *label; google::protobuf::Map<std::string, std::string> *map; - try - { + if (data->name) info->set_name(data->name); - + + if (data->os) info->set_os(data->os); + if (data->os_name) info->set_os_name(data->os_name); + if (data->os_version) info->set_os_version(data->os_version); - + + if (data->kernel_name) info->set_kernel_name(data->kernel_name); + if (data->kernel_version) info->set_kernel_version(data->kernel_version); - + + if (data->architecture) info->set_architecture(data->architecture); - - info->set_cpus(data->cpus); - + + info->set_cpus(data->cpus); + + if (data->cpu_frequency) info->set_cpu_frequency(data->cpu_frequency); - + + if (data->memory) info->set_memory(data->memory); - + + if (data->disk_space) info->set_disk_space(data->disk_space); - + + if (data->version) info->set_version(data->version); - + + if (data->release_channel) info->set_release_channel(data->release_channel); - + + if (data->timezone) info->set_timezone(data->timezone); - + + if (data->virtualization_type) info->set_virtualization_type(data->virtualization_type); - + + if (data->container_type) info->set_container_type(data->container_type); - + + if (data->custom_info) info->set_custom_info(data->custom_info); - - for (size_t i = 0; i < data->service_count; i++) - info->add_services(data->services[i]); - + + for (size_t i = 0; i < data->service_count; i++) + info->add_services(data->services[i]); + + if (data->machine_guid) 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; + + map = info->mutable_host_labels(); + label = data->host_labels_head; + while (label) { + map->insert({label->key, label->value}); + label = label->next; } + return 0; } diff --git a/aclk/schema-wrappers/schema_wrappers.h b/aclk/schema-wrappers/schema_wrappers.h index be5311055f..a3975fca3e 100644 --- a/aclk/schema-wrappers/schema_wrappers.h +++ b/aclk/schema-wrappers/schema_wrappers.h @@ -10,6 +10,8 @@ #include "node_creation.h" #include "chart_config.h" #include "chart_stream.h" +#include "alarm_config.h" +#include "alarm_stream.h" #include "node_info.h" #endif /* SCHEMA_WRAPPERS_H */ |