From deca0b006a4b71cbb28c79d69fabb54cdd32c646 Mon Sep 17 00:00:00 2001 From: nsano-rururu Date: Fri, 15 Jan 2021 20:20:21 +0900 Subject: [PATCH] Fix is_enabled not work with reload --- elastalert/elastalert.py | 17 ++++++++++++++--- elastalert/loaders.py | 3 --- 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/elastalert/elastalert.py b/elastalert/elastalert.py index d9b1f87a..db2e2749 100755 --- a/elastalert/elastalert.py +++ b/elastalert/elastalert.py @@ -176,7 +176,10 @@ def __init__(self, args): remove = [] for rule in self.rules: - if not self.init_rule(rule): + if 'is_enabled' in rule and not rule['is_enabled']: + self.disabled_rules.append(rule) + remove.append(rule) + elif not self.init_rule(rule): remove.append(rule) list(map(self.rules.remove, remove)) @@ -974,7 +977,7 @@ def run_rule(self, rule, endtime, starttime=None): def init_rule(self, new_rule, new=True): ''' Copies some necessary non-config state from an exiting rule to a new rule. ''' - if not new: + if not new and self.scheduler.get_job(job_id=new_rule['name']): self.scheduler.remove_job(job_id=new_rule['name']) try: @@ -1094,6 +1097,15 @@ def load_rule_changes(self): elastalert_logger.info('Rule file %s is now disabled.' % (rule_file)) # Remove this rule if it's been disabled self.rules = [rule for rule in self.rules if rule['rule_file'] != rule_file] + # Stop job if is running + if self.scheduler.get_job(job_id=new_rule['name']): + self.scheduler.remove_job(job_id=new_rule['name']) + # Append to disabled_rule + for disabled_rule in self.disabled_rules: + if disabled_rule['name'] == new_rule['name']: + break + else: + self.disabled_rules.append(new_rule) continue except EAException as e: message = 'Could not load rule %s: %s' % (rule_file, e) @@ -1112,7 +1124,6 @@ def load_rule_changes(self): # Re-enable if rule had been disabled for disabled_rule in self.disabled_rules: if disabled_rule['name'] == new_rule['name']: - self.rules.append(disabled_rule) self.disabled_rules.remove(disabled_rule) break diff --git a/elastalert/loaders.py b/elastalert/loaders.py index dae799be..fc1bb483 100644 --- a/elastalert/loaders.py +++ b/elastalert/loaders.py @@ -120,9 +120,6 @@ def load(self, conf, args=None): if not rule: elastalert_logger.error('Invalid rule file skipped: %s' % rule_file) continue - # By setting "is_enabled: False" in rule file, a rule is easily disabled - if 'is_enabled' in rule and not rule['is_enabled']: - continue if rule['name'] in names: raise EAException('Duplicate rule named %s' % (rule['name'])) except EAException as e: