0
0
Fork 0
mirror of https://github.com/netdata/netdata.git synced 2025-04-17 11:12:42 +00:00
netdata_netdata/database/rrdcalctemplate.c
thiagoftsm dd73f3e0cd
Repeating alarm notifications ()
* Alarm_repeat mergin the original!

* Alarm_repeat binary tree!

* Alarm_repeat binary tree finished!

* Alarm_repeat move function and format string

* Alarms bringing a new Binary tree

* Alarms fixing the last two

* Alarm_repeat useless var!

* Alarm fix format and repeat alarm!

* Alarm_backend steps!

* Alarm_repeat stopping to test cloud!

* Alarm_repeat stopping to test cloud 2!

* Alarm_repeat fixing when restart!
2019-07-01 11:55:16 +00:00

71 lines
2.1 KiB
C

// SPDX-License-Identifier: GPL-3.0-or-later
#define NETDATA_HEALTH_INTERNALS
#include "rrd.h"
// ----------------------------------------------------------------------------
// RRDCALCTEMPLATE management
void rrdcalctemplate_link_matching(RRDSET *st) {
RRDHOST *host = st->rrdhost;
RRDCALCTEMPLATE *rt;
for(rt = host->templates; rt ; rt = rt->next) {
if(rt->hash_context == st->hash_context && !strcmp(rt->context, st->context)
&& (!rt->family_pattern || simple_pattern_matches(rt->family_pattern, st->family))) {
RRDCALC *rc = rrdcalc_create_from_template(host, rt, st->id);
if(unlikely(!rc))
info("Health tried to create alarm from template '%s' on chart '%s' of host '%s', but it failed", rt->name, st->id, host->hostname);
#ifdef NETDATA_INTERNAL_CHECKS
else if(rc->rrdset != st)
error("Health alarm '%s.%s' should be linked to chart '%s', but it is not", rc->chart?rc->chart:"NOCHART", rc->name, st->id);
#endif
}
}
}
inline void rrdcalctemplate_free(RRDCALCTEMPLATE *rt) {
if(unlikely(!rt)) return;
expression_free(rt->calculation);
expression_free(rt->warning);
expression_free(rt->critical);
freez(rt->family_match);
simple_pattern_free(rt->family_pattern);
freez(rt->name);
freez(rt->exec);
freez(rt->recipient);
freez(rt->context);
freez(rt->source);
freez(rt->units);
freez(rt->info);
freez(rt->dimensions);
freez(rt);
}
inline void rrdcalctemplate_unlink_and_free(RRDHOST *host, RRDCALCTEMPLATE *rt) {
if(unlikely(!rt)) return;
debug(D_HEALTH, "Health removing template '%s' of host '%s'", rt->name, host->hostname);
if(host->templates == rt) {
host->templates = rt->next;
}
else {
RRDCALCTEMPLATE *t;
for (t = host->templates; t && t->next != rt; t = t->next ) ;
if(t) {
t->next = rt->next;
rt->next = NULL;
}
else
error("Cannot find RRDCALCTEMPLATE '%s' linked in host '%s'", rt->name, host->hostname);
}
rrdcalctemplate_free(rt);
}