Discover and load all the rules as defined in the conf and args. :param dict conf: Configuration dict :param dict args: Arguments dict :return: List of rules :rtype: list
(self, conf, args=None)
| 97 | self.base_config = copy.deepcopy(conf) |
| 98 | |
| 99 | def load(self, conf, args=None): |
| 100 | """ |
| 101 | Discover and load all the rules as defined in the conf and args. |
| 102 | :param dict conf: Configuration dict |
| 103 | :param dict args: Arguments dict |
| 104 | :return: List of rules |
| 105 | :rtype: list |
| 106 | """ |
| 107 | names = [] |
| 108 | use_rule = None if args is None else args.rule |
| 109 | |
| 110 | # Load each rule configuration file |
| 111 | rules = [] |
| 112 | rule_files = self.get_names(conf, use_rule) |
| 113 | for rule_file in rule_files: |
| 114 | try: |
| 115 | rule = self.load_configuration(rule_file, conf, args) |
| 116 | # A rule failed to load, don't try to process it |
| 117 | if not rule: |
| 118 | logging.error('Invalid rule file skipped: %s' % rule_file) |
| 119 | continue |
| 120 | # By setting "is_enabled: False" in rule file, a rule is easily disabled |
| 121 | if 'is_enabled' in rule and not rule['is_enabled']: |
| 122 | continue |
| 123 | if rule['name'] in names: |
| 124 | raise EAException('Duplicate rule named %s' % (rule['name'])) |
| 125 | except EAException as e: |
| 126 | raise EAException('Error loading file %s: %s' % (rule_file, e)) |
| 127 | |
| 128 | rules.append(rule) |
| 129 | names.append(rule['name']) |
| 130 | |
| 131 | return rules |
| 132 | |
| 133 | def get_names(self, conf, use_rule=None): |
| 134 | """ |