| 1 | // SPDX-License-Identifier: GPL-3.0-or-later |
| 2 | |
| 3 | #include "jsonwrap.h" |
| 4 | #include "jsonwrap-internal.h" |
| 5 | |
| 6 | void query_target_summary_alerts_v2(BUFFER *wb, QUERY_TARGET *qt, const char *key) { |
| 7 | buffer_json_member_add_array(wb, key); |
| 8 | QUERY_ALERTS_COUNTS *z; |
| 9 | |
| 10 | DICTIONARY *dict = dictionary_create(DICT_OPTION_SINGLE_THREADED | DICT_OPTION_DONT_OVERWRITE_VALUE); |
| 11 | for (long c = 0; c < (long) qt->instances.used; c++) { |
| 12 | QUERY_INSTANCE *qi = query_instance(qt, c); |
| 13 | RRDSET *st = rrdinstance_acquired_rrdset(qi->ria); |
| 14 | if (st) { |
| 15 | rw_spinlock_read_lock(&st->alerts.spinlock); |
| 16 | if (st->alerts.base) { |
| 17 | for (RRDCALC *rc = st->alerts.base; rc; rc = rc->next) { |
| 18 | z = dictionary_set(dict, string2str(rc->config.name), NULL, sizeof(*z)); |
| 19 | |
| 20 | switch(rc->status) { |
| 21 | case RRDCALC_STATUS_CLEAR: |
| 22 | z->clear++; |
| 23 | break; |
| 24 | |
| 25 | case RRDCALC_STATUS_WARNING: |
| 26 | z->warning++; |
| 27 | break; |
| 28 | |
| 29 | case RRDCALC_STATUS_CRITICAL: |
| 30 | z->critical++; |
| 31 | break; |
| 32 | |
| 33 | default: |
| 34 | case RRDCALC_STATUS_UNINITIALIZED: |
| 35 | case RRDCALC_STATUS_UNDEFINED: |
| 36 | case RRDCALC_STATUS_REMOVED: |
| 37 | z->other++; |
| 38 | break; |
| 39 | } |
| 40 | } |
| 41 | } |
| 42 | rw_spinlock_read_unlock(&st->alerts.spinlock); |
| 43 | } |
| 44 | } |
| 45 | dfe_start_read(dict, z) |
| 46 | query_target_alerts_counts(wb, z, z_dfe.name, true); |
| 47 | dfe_done(z); |
| 48 | dictionary_destroy(dict); |
| 49 | buffer_json_array_close(wb); // alerts |
| 50 | } |