| """ Tool for collecting usage statistic on a build tree. | |
| The filter can be used to gather usage on specific build variants. | |
| """ | |
| import argparse | |
| import re | |
| import json | |
| import os | |
| def main(): | |
| parser = argparse.ArgumentParser( | |
| description="Walks tree and gathers usage from block_usage files." | |
| ) | |
| parser.add_argument( | |
| '--root_dir', | |
| required=True, | |
| help="Root directory to scan for block_usage.json files." | |
| ) | |
| parser.add_argument( | |
| '--filter', | |
| required=True, | |
| help= # noqa: E251 | |
| "Python regular expression used to filter the complete path to block_usage.json files." | |
| ) | |
| args = parser.parse_args() | |
| filt = re.compile(args.filter) | |
| usage_logs = {} | |
| for root, dirs, files in os.walk(args.root_dir): | |
| if 'block_usage.json' not in files: | |
| continue | |
| block_usage_json = os.path.join(root, 'block_usage.json') | |
| if not filt.search(block_usage_json): | |
| continue | |
| with open(block_usage_json): | |
| block_usage = json.loads(block_usage_json) | |
| parent_dir, _ = os.path.split(block_usage_json) | |
| pparent_dir, device_tuple = os.path.split(parent_dir) | |
| _, target = os.path.split(pparent_dir) | |
| usage_logs[target] = { | |
| 'path': parent_dir, | |
| 'device_tuple': device_tuple, | |
| 'usage': block_usage['blocks'], | |
| } | |
| print(json.dumps(usage_logs, indent=2)) | |
| if __name__ == "__main__": | |
| main() |