summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEmmanuel Vasilakis <mrzammler@mm.st>2023-10-02 09:56:01 +0300
committerGitHub <noreply@github.com>2023-10-02 09:56:01 +0300
commit8c9492a4767001459d99e232b58f63baf1e95f91 (patch)
tree197db611d871a9d608f1462d82595fe84a8b1d65
parent3c98ee23124fefc761c3c67cc343b17fde366d2e (diff)
Send alerts summary field to cloud (#16056)
* new aclk schema * transmit summary to cloud and expose in v2/alerts * missing assign
m---------aclk/aclk-schemas0
-rw-r--r--aclk/schema-wrappers/alarm_config.cc4
-rw-r--r--aclk/schema-wrappers/alarm_config.h1
-rw-r--r--aclk/schema-wrappers/alarm_stream.cc8
-rw-r--r--aclk/schema-wrappers/alarm_stream.h3
-rw-r--r--database/contexts/api_v2.c6
-rw-r--r--database/contexts/rrdcontext.h3
-rw-r--r--database/sqlite/sqlite_aclk_alert.c8
-rw-r--r--database/sqlite/sqlite_health.c6
9 files changed, 28 insertions, 11 deletions
diff --git a/aclk/aclk-schemas b/aclk/aclk-schemas
-Subproject 40703f5e0258b3f4a97d3767e0f4e6833801b7d
+Subproject 83c661c0dcddb9526814ebbd0668fbc3e281f03
diff --git a/aclk/schema-wrappers/alarm_config.cc b/aclk/schema-wrappers/alarm_config.cc
index fe0b0517cf..8047f32333 100644
--- a/aclk/schema-wrappers/alarm_config.cc
+++ b/aclk/schema-wrappers/alarm_config.cc
@@ -50,6 +50,7 @@ void destroy_aclk_alarm_configuration(struct aclk_alarm_configuration *cfg)
freez(cfg->p_db_lookup_options);
freez(cfg->chart_labels);
+ freez(cfg->summary);
}
char *generate_provide_alarm_configuration(size_t *len, struct provide_alarm_configuration *data)
@@ -132,6 +133,9 @@ char *generate_provide_alarm_configuration(size_t *len, struct provide_alarm_con
if (data->cfg.chart_labels)
cfg->set_chart_labels(data->cfg.chart_labels);
+ if (data->cfg.summary)
+ cfg->set_summary(data->cfg.summary);
+
*len = PROTO_COMPAT_MSG_SIZE(msg);
char *bin = (char*)mallocz(*len);
if (!msg.SerializeToArray(bin, *len))
diff --git a/aclk/schema-wrappers/alarm_config.h b/aclk/schema-wrappers/alarm_config.h
index 4eaa4fd708..bfe9ad71c0 100644
--- a/aclk/schema-wrappers/alarm_config.h
+++ b/aclk/schema-wrappers/alarm_config.h
@@ -52,6 +52,7 @@ struct aclk_alarm_configuration {
int32_t p_update_every;
char *chart_labels;
+ char *summary;
};
void destroy_aclk_alarm_configuration(struct aclk_alarm_configuration *cfg);
diff --git a/aclk/schema-wrappers/alarm_stream.cc b/aclk/schema-wrappers/alarm_stream.cc
index 1538bc9e09..6e38ebfa68 100644
--- a/aclk/schema-wrappers/alarm_stream.cc
+++ b/aclk/schema-wrappers/alarm_stream.cc
@@ -68,26 +68,21 @@ 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);
freez(entry->chart_context);
freez(entry->transition_id);
freez(entry->chart_name);
+ freez(entry->summary);
}
static void fill_alarm_log_entry(struct alarm_log_entry *data, AlarmLogEntry *proto)
@@ -136,6 +131,7 @@ static void fill_alarm_log_entry(struct alarm_log_entry *data, AlarmLogEntry *pr
proto->set_event_id(data->event_id);
proto->set_transition_id(data->transition_id);
proto->set_chart_name(data->chart_name);
+ proto->set_summary(data->summary);
}
char *generate_alarm_log_entry(size_t *len, struct alarm_log_entry *data)
diff --git a/aclk/schema-wrappers/alarm_stream.h b/aclk/schema-wrappers/alarm_stream.h
index 87893e0db6..3c81ff4452 100644
--- a/aclk/schema-wrappers/alarm_stream.h
+++ b/aclk/schema-wrappers/alarm_stream.h
@@ -76,7 +76,8 @@ struct alarm_log_entry {
char *chart_name;
uint64_t event_id;
- char *transition_id;
+ char *transition_id;
+ char *summary;
};
struct send_alarm_checkpoint {
diff --git a/database/contexts/api_v2.c b/database/contexts/api_v2.c
index 5f904718fa..dacf962a30 100644
--- a/database/contexts/api_v2.c
+++ b/database/contexts/api_v2.c
@@ -355,6 +355,7 @@ static void alert_instances_v2_insert_callback(const DICTIONARY_ITEM *item __may
t->status = rc->status;
t->flags = rc->run_flags;
t->info = rc->info;
+ t->summary = rc->summary;
t->value = rc->value;
t->last_updated = rc->last_updated;
t->last_status_change = rc->last_status_change;
@@ -1280,6 +1281,7 @@ static void contexts_v2_alert_config_to_json_from_sql_alert_config_data(struct s
buffer_json_member_add_string(wb, "component", t->component);
buffer_json_member_add_string(wb, "type", t->type);
buffer_json_member_add_string(wb, "info", t->info);
+ buffer_json_member_add_string(wb, "summary", t->summary);
// buffer_json_member_add_string(wb, "source", t->source); // moved to alert instance
}
@@ -1343,6 +1345,7 @@ static int contexts_v2_alert_instance_to_json_callback(const DICTIONARY_ITEM *it
buffer_json_member_add_string(wb, "units", string2str(t->units));
buffer_json_member_add_string(wb, "fami", string2str(t->family));
buffer_json_member_add_string(wb, "info", string2str(t->info));
+ buffer_json_member_add_string(wb, "sum", string2str(t->summary));
buffer_json_member_add_string(wb, "ctx", string2str(t->context));
buffer_json_member_add_string(wb, "st", rrdcalc_status2string(t->status));
buffer_json_member_add_uuid(wb, "tr_i", &t->last_transition_id);
@@ -1438,6 +1441,7 @@ struct sql_alert_transition_fixed_size {
char units[SQL_TRANSITION_DATA_SMALL_STRING];
char exec[SQL_TRANSITION_DATA_BIG_STRING];
char info[SQL_TRANSITION_DATA_BIG_STRING];
+ char summary[SQL_TRANSITION_DATA_BIG_STRING];
char classification[SQL_TRANSITION_DATA_SMALL_STRING];
char type[SQL_TRANSITION_DATA_SMALL_STRING];
char component[SQL_TRANSITION_DATA_SMALL_STRING];
@@ -1477,6 +1481,7 @@ static struct sql_alert_transition_fixed_size *contexts_v2_alert_transition_dup(
strncpyz(n->units, t->units ? t->units : "", sizeof(n->units) - 1);
strncpyz(n->exec, t->exec ? t->exec : "", sizeof(n->exec) - 1);
strncpyz(n->info, t->info ? t->info : "", sizeof(n->info) - 1);
+ strncpyz(n->summary, t->summary ? t->summary : "", sizeof(n->summary) - 1);
strncpyz(n->classification, t->classification ? t->classification : "", sizeof(n->classification) - 1);
strncpyz(n->type, t->type ? t->type : "", sizeof(n->type) - 1);
strncpyz(n->component, t->component ? t->component : "", sizeof(n->component) - 1);
@@ -1734,6 +1739,7 @@ static void contexts_v2_alert_transitions_to_json(BUFFER *wb, struct rrdcontext_
buffer_json_member_add_time_t(wb, "when", t->when_key);
buffer_json_member_add_string(wb, "info", *t->info ? t->info : "");
+ buffer_json_member_add_string(wb, "summary", *t->summary ? t->summary : "");
buffer_json_member_add_string(wb, "units", *t->units ? t->units : NULL);
buffer_json_member_add_object(wb, "new");
{
diff --git a/database/contexts/rrdcontext.h b/database/contexts/rrdcontext.h
index ffc42e79a2..9c497a5a5e 100644
--- a/database/contexts/rrdcontext.h
+++ b/database/contexts/rrdcontext.h
@@ -432,6 +432,7 @@ struct sql_alert_transition_data {
const char *units;
const char *exec;
const char *info;
+ const char *summary;
const char *classification;
const char *type;
const char *component;
@@ -472,6 +473,7 @@ struct sql_alert_config_data {
const char *classification;
const char *component;
const char *type;
+ const char *summary;
struct {
struct {
@@ -531,6 +533,7 @@ struct sql_alert_instance_v2_entry {
RRDCALC_STATUS status;
RRDCALC_FLAGS flags;
STRING *info;
+ STRING *summary;
NETDATA_DOUBLE value;
time_t last_updated;
time_t last_status_change;
diff --git a/database/sqlite/sqlite_aclk_alert.c b/database/sqlite/sqlite_aclk_alert.c
index 9960a1bf79..5b74986432 100644
--- a/database/sqlite/sqlite_aclk_alert.c
+++ b/database/sqlite/sqlite_aclk_alert.c
@@ -275,7 +275,7 @@ void aclk_push_alert_event(struct aclk_sync_host_config *wc)
" hld.duration, hld.non_clear_duration, hld.flags, hld.exec_run_timestamp, hld.delay_up_to_timestamp, hl.name, "
" hl.chart, hl.family, hl.exec, hl.recipient, ha.source, hl.units, hld.info, hld.exec_code, hld.new_status, "
" hld.old_status, hld.delay, hld.new_value, hld.old_value, hld.last_repeat, hl.chart_context, hld.transition_id, "
- "hld.alarm_event_id, hl.chart_name "
+ " hld.alarm_event_id, hl.chart_name, hld.summary "
" from health_log hl, aclk_alert_%s aa, alert_hash ha, health_log_detail hld "
" where hld.unique_id = aa.alert_unique_id and hl.config_hash_id = ha.hash_id and aa.date_submitted is null "
" and hl.host_id = @host_id and hl.health_log_id = hld.health_log_id "
@@ -388,6 +388,7 @@ void aclk_push_alert_event(struct aclk_sync_host_config *wc)
alarm_log.transition_id = sqlite3_uuid_unparse_strdupz(res, 27);
alarm_log.event_id = (time_t) sqlite3_column_int64(res, 28);
alarm_log.chart_name = sqlite3_text_strdupz_empty(res, 29);
+ alarm_log.summary = sqlite3_text_strdupz_empty(res, 30);
aclk_send_alarm_log_entry(&alarm_log);
@@ -535,7 +536,7 @@ void aclk_send_alarm_configuration(char *config_hash)
"SELECT alarm, template, on_key, class, type, component, os, hosts, plugin," \
"module, charts, families, lookup, every, units, green, red, calc, warn, crit, to_key, exec, delay, repeat, info," \
"options, host_labels, p_db_lookup_dimensions, p_db_lookup_method, p_db_lookup_options, p_db_lookup_after," \
- "p_db_lookup_before, p_update_every, chart_labels FROM alert_hash WHERE hash_id = @hash_id;"
+ "p_db_lookup_before, p_update_every, chart_labels, summary FROM alert_hash WHERE hash_id = @hash_id;"
int aclk_push_alert_config_event(char *node_id __maybe_unused, char *config_hash __maybe_unused)
{
@@ -637,6 +638,7 @@ int aclk_push_alert_config_event(char *node_id __maybe_unused, char *config_hash
alarm_config.p_update_every = sqlite3_column_int(res, 32);
alarm_config.chart_labels = SQLITE3_COLUMN_STRDUPZ_OR_NULL(res, 33);
+ alarm_config.summary = SQLITE3_COLUMN_STRDUPZ_OR_NULL(res, 34);
p_alarm_config.cfg_hash = strdupz((char *) config_hash);
p_alarm_config.cfg = alarm_config;
@@ -846,6 +848,8 @@ void health_alarm_entry2proto_nolock(struct alarm_log_entry *alarm_log, ALARM_EN
alarm_log->transition_id = strdupz((char *)transition_id);
alarm_log->event_id = (uint64_t) ae->alarm_event_id;
+ alarm_log->summary = strdupz(ae_summary(ae));
+
freez(edit_command);
}
#endif
diff --git a/database/sqlite/sqlite_health.c b/database/sqlite/sqlite_health.c
index c842103835..38a1f5dd97 100644
--- a/database/sqlite/sqlite_health.c
+++ b/database/sqlite/sqlite_health.c
@@ -1882,7 +1882,7 @@ done:
"SELECT h.host_id, h.alarm_id, h.config_hash_id, h.name, h.chart, h.chart_name, h.family, h.recipient, h.units, h.exec, " \
"h.chart_context, d.when_key, d.duration, d.non_clear_duration, d.flags, d.delay_up_to_timestamp, " \
"d.info, d.exec_code, d.new_status, d.old_status, d.delay, d.new_value, d.old_value, d.last_repeat, " \
- "d.transition_id, d.global_id, ah.class, ah.type, ah.component, d.exec_run_timestamp"
+ "d.transition_id, d.global_id, ah.class, ah.type, ah.component, d.exec_run_timestamp, d.summary"
#define SQL_SEARCH_ALERT_TRANSITION_COMMON_WHERE "h.config_hash_id = ah.hash_id AND h.health_log_id = d.health_log_id"
@@ -2054,6 +2054,7 @@ run_query:;
atd.type = (const char *) sqlite3_column_text(res, 27);
atd.component = (const char *) sqlite3_column_text(res, 28);
atd.exec_run_timestamp = sqlite3_column_int64(res, 29);
+ atd.summary = (const char *) sqlite3_column_text(res, 30);
cb(&atd, data);
}
@@ -2079,7 +2080,7 @@ done_only_drop:
"SELECT ah.hash_id, alarm, template, on_key, class, component, type, os, hosts, lookup, every, " \
" units, calc, families, plugin, module, charts, green, red, warn, crit, " \
" exec, to_key, info, delay, options, repeat, host_labels, p_db_lookup_dimensions, p_db_lookup_method, " \
- " p_db_lookup_options, p_db_lookup_after, p_db_lookup_before, p_update_every, source, chart_labels " \
+ " p_db_lookup_options, p_db_lookup_after, p_db_lookup_before, p_update_every, source, chart_labels, summary " \
" FROM alert_hash ah, c_%p t where ah.hash_id = t.hash_id"
int sql_get_alert_configuration(
@@ -2188,6 +2189,7 @@ int sql_get_alert_configuration(
acd.value.update_every = (int32_t) sqlite3_column_int(res, param++);
acd.source = (const char *) sqlite3_column_text(res, param++);
acd.selectors.chart_labels = (const char *) sqlite3_column_text(res, param++);
+ acd.summary = (const char *) sqlite3_column_text(res, param++);
cb(&acd, data);
added++;