@cryptotaxi247 / netdata-1 / commits / 6526a34f8

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");