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)