prebuilt-rules-scripts/get-rule-diff.py (57 lines of code) (raw):
import json
from pathlib import Path
# Compares the newly generated JSON file for the new release with the JSON file
# generated for the previous release. It checks if rule queries have been
# changed and updates the version history as required (changelog object).
releaseVersion = "7.11.0" # Security app release version - update as required
previousReleaseVersion = "7.10.0" # Release pf the previous release for which docs were generated
ROOT = Path(__file__).resolve().parent.parent
def sort_by_name(rule):
'''
Helper to sort rule by name'''
return rule['name']
# Path to the JSON rule file generated for this release
diff_file = ROOT.joinpath("prebuilt-rules-scripts/diff-files/gen-files/json-from-docs-" + releaseVersion + ".json")
with open(diff_file, 'r') as source:
lasted_rules_dict = json.load(source)
# Path to the final JSON rule file generated for the previous release
prev_final = ROOT.joinpath("prebuilt-rules-scripts/diff-files/final-files/final-rule-file-" +
previousReleaseVersion + ".json")
with open(prev_final, 'r') as source:
previous_rules_dict = json.load(source)
diff_dict = []
lasted_rules_dict = sorted(lasted_rules_dict, key=sort_by_name)
previous_rules_dict = sorted(previous_rules_dict, key=sort_by_name)
# oldRuleNames = []
# newRuleNames = []
oldName = None
counter = 0
ruleFound = False
for new_rule in lasted_rules_dict:
# if new_rule['name'] not in newRuleNames:
# newRuleNames.append(new_rule['name'])
for old_rule in previous_rules_dict:
# if old_rule['name'] not in oldRuleNames:
# oldRuleNames.append(old_rule['name'])
if old_rule['rule_id'] == new_rule['rule_id']:
if old_rule['name'] != new_rule['name']:
oldName = old_rule['name']
old_rule['name'] = new_rule['name']
if 'changelog' in old_rule:
new_rule['changelog'] = old_rule['changelog']
if old_rule['version'] != new_rule['version']:
new_rule['last_update'] = releaseVersion
if 'changelog' not in new_rule:
new_rule['changelog'] = {}
new_rule['changelog']['changes'] = []
if 'query' in new_rule:
if old_rule['query'] != new_rule['query']:
new_rule['changelog']['changes'].append({"version": new_rule['version'], "updated": new_rule['last_update'], "pre_query": old_rule['query'], "doc_text": "Updated query.", "pre_name": oldName})
if old_rule['query'] == new_rule['query']:
new_rule['changelog']['changes'].append({"version": new_rule['version'], "updated": new_rule['last_update'], "pre_query": old_rule['query'], "doc_text": "Formatting only", "pre_name": oldName})
if 'query' not in new_rule:
new_rule['changelog']['changes'].append({"version": new_rule['version'], "updated": new_rule['last_update'], "pre_query": "N/A", "doc_text": "Formatting only", "pre_name": oldName})
else:
new_rule['last_update'] = old_rule['last_update']
diff_dict.append(new_rule)
new_rule['added'] = old_rule['added']
oldName = None
ruleFound = True
if ruleFound == False:
new_rule['last_update'] = releaseVersion
new_rule['added'] = releaseVersion
diff_dict.append(new_rule)
counter = counter + 1
ruleFound = False
# Outputs the final JSON file from which the documentation is generated. Note
# that this file is needed for the next release to compare future changes.
final = ROOT.joinpath("prebuilt-rules-scripts/diff-files/final-files/final-rule-file-" + releaseVersion + ".json")
with open(final, "w") as fp:
json.dump(diff_dict, fp, indent=2)