Path: blob/master/examples/plugin/Scripts/aggregate_android_plugin.py
907 views
import csv1import os2import sys3from collections import OrderedDict4from functools import reduce5import pdb678def list_subdir(a_dir):9"""List immediate subdirectories of a_dir"""10# https://stackoverflow.com/a/80020111return [name for name in os.listdir(a_dir)12if os.path.isdir(os.path.join(a_dir, name))]131415def aggregate_android_final(logs_dir):16def add_row(accum, new):17row = {k: v + float(new[k]) for k, v in list(accum.items()) if k not in ['Component', 'count']}18count = accum['count'] + 119return dict(row, **{'count': count})2021runs = []22for run_file in [f for f in os.listdir(logs_dir) if os.path.isfile(os.path.join(logs_dir, f))]:23with open(os.path.join(logs_dir, run_file), 'r') as run:24reader = csv.DictReader(run)25init = dict({fn: 0 for fn in reader.fieldnames if fn != 'datetime'}, **{'count': 0})26run_total = reduce(add_row, reader, init)27runs.append({k: v / run_total['count'] for k, v in list(run_total.items()) if k != 'count'})28runs_total = reduce(lambda x, y: {k: v + y[k] for k, v in list(x.items())}, runs)29return OrderedDict(30sorted(list({'android_' + k: v / len(runs) for k, v in list(runs_total.items())}.items()), key=lambda x: x[0]))313233def aggregate(data_dir):34rows = []35for device in list_subdir(data_dir):36row = OrderedDict({'device': device})37device_dir = os.path.join(data_dir, device)38for subject in list_subdir(device_dir):39row.update({'subject': subject})40subject_dir = os.path.join(device_dir, subject)41if os.path.isdir(os.path.join(subject_dir, 'AndroidPlugin')):42row.update(aggregate_android_final(os.path.join(subject_dir, 'AndroidPlugin')))43rows.append(row.copy())44else:45for browser in list_subdir(subject_dir):46row.update({'browser': browser})47browser_dir = os.path.join(subject_dir, browser)48if os.path.isdir(os.path.join(browser_dir, 'AndroidPlugin')):49row.update(aggregate_android_final(os.path.join(browser_dir, 'AndroidPlugin')))50rows.append(row.copy())51return rows525354def write_to_file(filename, rows):55with open(filename, 'w') as f:56writer = csv.DictWriter(f, list(rows[0].keys()))57writer.writeheader()58writer.writerows(rows)596061# noinspection PyUnusedLocal62def main(dummy, data_dir, result_file):63print(('Output file: {}'.format(result_file)))64rows = aggregate(data_dir)65write_to_file(result_file, rows)666768if __name__ == '__main__':69if len(sys.argv) == 3:70# noinspection PyArgumentList71main(None, sys.argv[1], sys.argv[2])727374