def create_tree_from_schema(cls, schema_config: Dict[str, Any]) -> BICompiledRule: rule_id = schema_config["id"] nodes = [cls._create_node(x) for x in schema_config["nodes"]] required_hosts = [(x["site_id"], x["host_name"]) for x in schema_config["required_hosts"]] properties = BIRuleProperties(schema_config["properties"]) aggregation_function = bi_aggregation_function_registry.instantiate( schema_config["aggregation_function"]) node_visualization = schema_config["node_visualization"] return BICompiledRule( rule_id, nodes, required_hosts, properties, aggregation_function, node_visualization, )
def __init__(self, rule_config: Optional[Dict[str, Any]] = None, pack_id: str = ""): super().__init__() if rule_config is None: rule_config = get_schema_default_config(self.schema()) self.id = rule_config["id"] self.pack_id = pack_id self._params = BIParams(rule_config["params"]) # The raw configuration is kept. It is re-used by the generated BI Branches self._properties_config = rule_config["properties"] self.aggregation_function = bi_aggregation_function_registry.instantiate( rule_config["aggregation_function"]) self.computation_options = BIRuleComputationOptions(rule_config["computation_options"]) self.node_visualization = rule_config["node_visualization"] self._properties = BIRuleProperties(rule_config["properties"]) self.nodes = [BINodeGenerator(x) for x in rule_config["nodes"]] bi_rule_id_registry.register(self)