-
Notifications
You must be signed in to change notification settings - Fork 18
feat(importer): update removed rulebases in db #3894
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: importer-rework
Are you sure you want to change the base?
Changes from 1 commit
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change | ||
|---|---|---|---|---|
|
|
@@ -73,6 +73,7 @@ def updateRulebaseDiffs(self, prevConfig: FwConfigNormalized): | |||
| ruleUidsInBoth: dict[str, list[str]] = {} | ||||
| previous_rulebase_uids: list[str] = [] | ||||
| current_rulebase_uids: list[str] = [] | ||||
| removed_rulebase_uids: list[str] = [] | ||||
| new_hit_information = [] | ||||
|
|
||||
| rule_order_diffs: dict[str, dict[str, list[str]]] = self.rule_order_service.update_rule_order_diffs(self.import_details.DebugLevel) | ||||
|
|
@@ -88,13 +89,12 @@ def updateRulebaseDiffs(self, prevConfig: FwConfigNormalized): | |||
| for rulebase_uid in previous_rulebase_uids: | ||||
| current_rulebase = self.normalized_config.get_rulebase(rulebase_uid) | ||||
| if current_rulebase is None: | ||||
| removed_rulebase_uids.append(rulebase_uid) | ||||
| continue # rulebase has been deleted | ||||
| if rulebase_uid in current_rulebase_uids: | ||||
| # deal with policies contained both in this and previous config | ||||
| previous_rulebase = prevConfig.get_rulebase(rulebase_uid) | ||||
| ruleUidsInBoth.update({ rulebase_uid: list(current_rulebase.rules.keys() & previous_rulebase.rules.keys()) }) # type: ignore | ||||
| else: | ||||
| logger.info(f"previous rulebase has been deleted: {current_rulebase.name} (id:{rulebase_uid})") | ||||
|
|
||||
| # find changed rules | ||||
| for rulebase_uid in ruleUidsInBoth: | ||||
|
|
@@ -128,6 +128,7 @@ def updateRulebaseDiffs(self, prevConfig: FwConfigNormalized): | |||
| num_new_refs = self.add_new_refs(prevConfig) | ||||
|
|
||||
| num_deleted_rules, removed_rule_ids = self.mark_rules_removed(rule_order_diffs["deleted_rule_uids"]) | ||||
| num_removed_rulebases = self.mark_rulebases_removed(removed_rulebase_uids) | ||||
| num_removed_refs = self.remove_outdated_refs(prevConfig) | ||||
|
|
||||
| _, num_moved_rules, _ = self.verify_rules_moved(changedRuleUids) | ||||
|
|
@@ -355,6 +356,7 @@ def get_outdated_refs_to_remove(self, prev_rule: RuleNormalized, rule: RuleNorma | |||
| return refs_to_remove | ||||
|
|
||||
| def remove_outdated_refs(self, prev_config: FwConfigNormalized): | ||||
| """Remove all outdated nwobj/svc/(user) references, including resolved ones, for changed and removed rules.""" | ||||
| all_refs_to_remove = {ref_type: [] for ref_type in RefType} | ||||
| for prev_rulebase in prev_config.rulebases: | ||||
| rules = next((rb.rules for rb in self.normalized_config.rulebases if rb.uid == prev_rulebase.uid), {}) | ||||
|
|
@@ -788,6 +790,31 @@ def mark_rules_removed(self, removedRuleUids: dict[str, list[str]]) -> tuple[int | |||
|
|
||||
| return changes, collectedRemovedRuleIds | ||||
|
|
||||
| def mark_rulebases_removed(self, removedRulebaseUids: list[str]) -> int: | ||||
| logger = getFwoLogger() | ||||
|
||||
| changes = 0 | ||||
|
|
||||
| if len(removedRulebaseUids) == 0: | ||||
| return 0 | ||||
|
|
||||
|
||||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The variable
num_removed_rulebasesis assigned but never used. Consider adding it to the statistics tracking (similar to hownum_deleted_rulesis added toRuleDeleteCounton line 140) or logging the count of removed rulebases for visibility.