fix alerts transitions sorting (#15315)
Costa Tsaousis committed
Jul 6, 2023 at 14:43 UTC
6526a34f86e646610eed4a26215f5b40dfe718ab
2 files changed
+16
-6
database/contexts/api_v2.c
+14
-6
@@ -1431,25 +1431,27 @@ static inline void contexts_v2_alert_transition_keep(struct alert_transitions_ca
1431
}
1432
1433
struct sql_alert_transition_data *last = d->last_added;
1434
- while(last != d->base && last->prev->global_id > t->global_id) {
1434
+ while(last->prev != d->base->prev && t->global_id > last->prev->global_id) {
1435
last = last->prev;
1436
d->stats.backwards++;
1437
}
1438
1439
- while(last->next && last->next->global_id < t->global_id) {
1439
+ while(last->next && t->global_id < last->next->global_id) {
1440
last = last->next;
1441
d->stats.forwards++;
1442
}
1443
1444
- if(d->items >= d->limit && last == d->base->prev && last->global_id < t->global_id) {
1445
- d->stats.skips_after++;
1446
- return;
1444
+ if(d->items >= d->limit) {
1445
+ if(last == d->base->prev && t->global_id < last->global_id) {
1446
+ d->stats.skips_after++;
1447
+ return;
1448
+ }
1449
}
1450
1451
d->items++;
1452
d->last_added = contexts_v2_alert_transition_dup(t, machine_guid);
1453
1452
- if(last->global_id > t->global_id) {
1454
+ if(t->global_id > last->global_id) {
1455
DOUBLE_LINKED_LIST_PREPEND_ITEM_UNSAFE(d->base, d->last_added, prev, next);
1456
d->stats.prepend++;
1457
}
@@ -1606,10 +1608,16 @@ static void contexts_v2_alert_transitions_to_json(BUFFER *wb, struct rrdcontext_
1608
for(struct sql_alert_transition_data *t = data.base; t ; t = t->next) {
1609
buffer_json_add_array_item_object(wb);
1610
{
1611
+ RRDHOST *host = rrdhost_find_by_guid(t->machine_guid);
1612
+
1613
buffer_json_member_add_uint64(wb, "gi", t->global_id);
1614
buffer_json_member_add_uuid(wb, "transition_id", t->transition_id);
1615
buffer_json_member_add_uuid(wb, "config_hash_id", t->config_hash_id);
1616
buffer_json_member_add_string(wb, "machine_guid", t->machine_guid);
1617
+
1618
+ if(host && host->node_id)
1619
+ buffer_json_member_add_uuid(wb, "node_id", host->node_id);
1620
+
1621
buffer_json_member_add_string(wb, "alert", t->alert_name);
1622
buffer_json_member_add_string(wb, "instance", t->chart);
1623
buffer_json_member_add_string(wb, "context", t->chart_context);
database/sqlite/sqlite_health.c
+2
@@ -1846,6 +1846,8 @@ void sql_alert_transitions(
1846
if (alert_name)
1847
buffer_sprintf(command, " AND h.name = @alert_name");
1848
1849
+ buffer_strcat(command, " ORDER BY d.global_id DESC");
1850
+
1851
rc = sqlite3_prepare_v2(db_meta, buffer_tostring(command), -1, &res, 0);
1852
if (unlikely(rc != SQLITE_OK)) {
1853
error_report("Failed to prepare statement sql_alert_transitions");