Browse Source

Adds Alert Related API for new protocol (#11424)

* adds alarm related message generators, parsers and API for the new protocol
Timotej S 3 years ago
parent
commit
96cac58ec8
10 changed files with 92 additions and 2 deletions
  1. 18 0
      Makefile.am
  2. 5 0
      aclk/aclk.c
  3. 2 0
      aclk/aclk.h
  4. 37 0
      aclk/aclk_alarm_api.c
  5. 13 0
      aclk/aclk_alarm_api.h
  6. 2 0
      aclk/aclk_query.c
  7. 2 0
      aclk/aclk_query_queue.c
  8. 3 1
      aclk/aclk_query_queue.h
  9. 6 0
      aclk/aclk_util.c
  10. 4 1
      aclk/aclk_util.h

+ 18 - 0
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 $^

+ 5 - 0
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);
+}

+ 2 - 0
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 */

+ 37 - 0
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);
+}

+ 13 - 0
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 */

+ 2 - 0
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                     }
 };
 

+ 2 - 0
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;
 

+ 3 - 1
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 {

+ 6 - 0
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
 };
 

+ 4 - 1
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);

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