@cryptotaxi247 / netdata-1 / commits / 53d7d3c3f

Fixed issue with missing alarms (#9712)

Fixed the alarm configuration when dimensions switch from archived to active

Stelios Fragkakis committed Aug 11, 2020 at 18:16 UTC 53d7d3c3fa69c66a519a0889fb684be08efe71c8
1 file changed +29 -19
database/rrddim.c
+29 -19
@@ -3,6 +3,32 @@
3 #define NETDATA_RRD_INTERNALS
4 #include "rrd.h"
5
6 +static inline void calc_link_to_rrddim(RRDDIM *rd)
7 +{
8 + RRDHOST *host = rd->rrdset->rrdhost;
9 + RRDSET *st = rd->rrdset;
10 + if (host->alarms_with_foreach || host->alarms_template_with_foreach) {
11 + int count = 0;
12 + int hostlocked;
13 + for (count = 0; count < 5; count++) {
14 + hostlocked = netdata_rwlock_trywrlock(&host->rrdhost_rwlock);
15 + if (!hostlocked) {
16 + rrdcalc_link_to_rrddim(rd, st, host);
17 + rrdhost_unlock(host);
18 + break;
19 + } else if (hostlocked != EBUSY) {
20 + error("Cannot lock host to create an alarm for the dimension.");
21 + }
22 + sleep_usec(USEC_PER_MS * 200);
23 + }
24 +
25 + if (count == 5) {
26 + error(
27 + "Failed to create an alarm for dimension %s of chart %s 5 times. Skipping alarm.", rd->name, st->name);
28 + }
29 + }
30 +}
31 +
32 // ----------------------------------------------------------------------------
33 // RRDDIM index
34
@@ -212,6 +238,7 @@ RRDDIM *rrddim_add_custom(RRDSET *st, const char *id, const char *name, collecte
238 rrddimvar_create(rd, RRDVAR_TYPE_CALCULATED, NULL, NULL, &rd->last_stored_value, RRDVAR_OPTION_DEFAULT);
239 rrddimvar_create(rd, RRDVAR_TYPE_COLLECTED, NULL, "_raw", &rd->last_collected_value, RRDVAR_OPTION_DEFAULT);
240 rrddimvar_create(rd, RRDVAR_TYPE_TIME_T, NULL, "_last_collected_t", &rd->last_collected_time.tv_sec, RRDVAR_OPTION_DEFAULT);
241 + calc_link_to_rrddim(rd);
242 }
243 // DBENGINE available and activated?
244 #ifdef ENABLE_DBENGINE
@@ -425,26 +452,9 @@ RRDDIM *rrddim_add_custom(RRDSET *st, const char *id, const char *name, collecte
452 if(unlikely(rrddim_index_add(st, rd) != rd))
453 error("RRDDIM: INTERNAL ERROR: attempt to index duplicate dimension '%s' on chart '%s'", rd->id, st->id);
454
428 - if (host->alarms_with_foreach || host->alarms_template_with_foreach) {
429 - int count = 0;
430 - int hostlocked;
431 - for (count = 0 ; count < 5 ; count++) {
432 - hostlocked = netdata_rwlock_trywrlock(&host->rrdhost_rwlock);
433 - if (!hostlocked) {
434 - rrdcalc_link_to_rrddim(rd, st, host);
435 - rrdhost_unlock(host);
436 - break;
437 - } else if (hostlocked != EBUSY) {
438 - error("Cannot lock host to create an alarm for the dimension.");
439 - }
440 - usleep(200000);
441 - }
455 + if (!is_archived)
456 + calc_link_to_rrddim(rd);
457
443 - if (count == 5) {
444 - error("Failed to create an alarm for dimension %s of chart %s 5 times. Skipping alarm."
445 - , rd->name, st->name);
446 - }
447 - }
458 rrdset_unlock(st);
459 #ifdef ENABLE_ACLK
460 if (netdata_cloud_setting)