| #!/usr/bin/python | |
| import json | |
| import optparse | |
| import os | |
| import sys | |
| def main(argv): | |
| parser = optparse.OptionParser(usage='%prog worker_number [path-to-stats.json]') | |
| _, args = parser.parse_args(argv) | |
| worker_number = int(args.pop(0)) | |
| if args: | |
| if os.path.exists(args[0]): | |
| with open(args[0], 'r') as fp: | |
| trie = json.load(fp) | |
| else: | |
| print >> sys.stderr, "file not found: %s" % args[0] | |
| sys.exit(1) | |
| else: | |
| trie = json.load(sys.stdin) | |
| results = convert_trie_to_flat_paths(trie) | |
| tests_run = [] | |
| for (test, result) in results.iteritems(): | |
| # Each result is a dict containing | |
| # { 'results': [worker #, test # in worker, driver pid, | |
| # test time in msecs, test + compare time in msecs]} | |
| if result['results'][0] == worker_number: | |
| tests_run.append((test, result['results'][1])) | |
| print "\n".join(t[0] for t in sorted(tests_run, key=lambda t: t[1])) | |
| def convert_trie_to_flat_paths(trie, prefix=None): | |
| # Cloned from webkitpy.layout_tests.layout_package.json_results_generator | |
| # so that this code can stand alone. | |
| result = {} | |
| for name, data in trie.iteritems(): | |
| if prefix: | |
| name = prefix + "/" + name | |
| if len(data) and not "results" in data: | |
| result.update(convert_trie_to_flat_paths(data, name)) | |
| else: | |
| result[name] = data | |
| return result | |
| if __name__ == '__main__': | |
| main(sys.argv[1:]) |