master
c 50 lines 1.78 KB
Raw
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 }