| """Tool for generating a comparision CSV between multiple usage.json files. |
| |
| utils/gather_usage.py should be used to generate usage.json in various |
| configurations for comparision. |
| |
| """ |
| import argparse |
| import json |
| import os.path |
| |
| |
| def main(): |
| parser = argparse.ArgumentParser(description=__doc__) |
| |
| parser.add_argument( |
| 'usage_json', |
| nargs='+', |
| help="usage.json files generated from gather_usage.py" |
| ) |
| |
| args = parser.parse_args() |
| |
| blocks = set() |
| bases = set() |
| targets = {} |
| |
| for filename in args.usage_json: |
| with open(filename) as f: |
| _, x = os.path.split(filename) |
| base, _ = os.path.splitext(x) |
| |
| assert base not in bases, base |
| bases.add(base) |
| |
| j = json.load(f) |
| |
| for target, usage in j.items(): |
| if target not in targets: |
| targets[target] = {} |
| for block in usage['usage']: |
| targets[target][block] = {} |
| |
| for block in usage['usage']: |
| blocks.add(block) |
| targets[target][block][base] = usage['usage'][block] |
| |
| for v in targets.values(): |
| for block in blocks: |
| if block not in v: |
| v[block] = {} |
| |
| row1 = [''] |
| row2 = [''] |
| for block in sorted(blocks): |
| row1.append(block) |
| for _ in range(len(bases) - 1): |
| row1.append('') |
| |
| for base in sorted(bases): |
| row2.append(base) |
| |
| print(','.join(row1)) |
| print(','.join(row2)) |
| |
| for target in sorted(targets): |
| row = [target] |
| |
| for block in sorted(blocks): |
| counts = targets[target][block] |
| |
| for base in sorted(bases): |
| if base in counts: |
| row.append(str(counts[base])) |
| else: |
| row.append('0') |
| |
| print(','.join(row)) |
| |
| |
| if __name__ == "__main__": |
| main() |