1*fb1b10abSAndroid Build Coastguard Worker# Copyright (c) 2014 The WebM project authors. All Rights Reserved. 2*fb1b10abSAndroid Build Coastguard Worker# 3*fb1b10abSAndroid Build Coastguard Worker# Use of this source code is governed by a BSD-style license 4*fb1b10abSAndroid Build Coastguard Worker# that can be found in the LICENSE file in the root of the source 5*fb1b10abSAndroid Build Coastguard Worker# tree. An additional intellectual property rights grant can be found 6*fb1b10abSAndroid Build Coastguard Worker# in the file PATENTS. All contributing project authors may 7*fb1b10abSAndroid Build Coastguard Worker# be found in the AUTHORS file in the root of the source tree. 8*fb1b10abSAndroid Build Coastguard Worker 9*fb1b10abSAndroid Build Coastguard Worker"""Standalone script which parses a gtest log for json. 10*fb1b10abSAndroid Build Coastguard Worker 11*fb1b10abSAndroid Build Coastguard WorkerJson is returned returns as an array. This script is used by the libvpx 12*fb1b10abSAndroid Build Coastguard Workerwaterfall to gather json results mixed in with gtest logs. This is 13*fb1b10abSAndroid Build Coastguard Workerdubious software engineering. 14*fb1b10abSAndroid Build Coastguard Worker""" 15*fb1b10abSAndroid Build Coastguard Worker 16*fb1b10abSAndroid Build Coastguard Workerimport getopt 17*fb1b10abSAndroid Build Coastguard Workerimport json 18*fb1b10abSAndroid Build Coastguard Workerimport os 19*fb1b10abSAndroid Build Coastguard Workerimport re 20*fb1b10abSAndroid Build Coastguard Workerimport sys 21*fb1b10abSAndroid Build Coastguard Worker 22*fb1b10abSAndroid Build Coastguard Worker 23*fb1b10abSAndroid Build Coastguard Workerdef main(): 24*fb1b10abSAndroid Build Coastguard Worker if len(sys.argv) != 3: 25*fb1b10abSAndroid Build Coastguard Worker print "Expects a file to write json to!" 26*fb1b10abSAndroid Build Coastguard Worker exit(1) 27*fb1b10abSAndroid Build Coastguard Worker 28*fb1b10abSAndroid Build Coastguard Worker try: 29*fb1b10abSAndroid Build Coastguard Worker opts, _ = \ 30*fb1b10abSAndroid Build Coastguard Worker getopt.getopt(sys.argv[1:], \ 31*fb1b10abSAndroid Build Coastguard Worker 'o:', ['output-json=']) 32*fb1b10abSAndroid Build Coastguard Worker except getopt.GetOptError: 33*fb1b10abSAndroid Build Coastguard Worker print 'scrape_gtest_log.py -o <output_json>' 34*fb1b10abSAndroid Build Coastguard Worker sys.exit(2) 35*fb1b10abSAndroid Build Coastguard Worker 36*fb1b10abSAndroid Build Coastguard Worker output_json = '' 37*fb1b10abSAndroid Build Coastguard Worker for opt, arg in opts: 38*fb1b10abSAndroid Build Coastguard Worker if opt in ('-o', '--output-json'): 39*fb1b10abSAndroid Build Coastguard Worker output_json = os.path.join(arg) 40*fb1b10abSAndroid Build Coastguard Worker 41*fb1b10abSAndroid Build Coastguard Worker blob = sys.stdin.read() 42*fb1b10abSAndroid Build Coastguard Worker json_string = '[' + ','.join('{' + x + '}' for x in 43*fb1b10abSAndroid Build Coastguard Worker re.findall(r'{([^}]*.?)}', blob)) + ']' 44*fb1b10abSAndroid Build Coastguard Worker print blob 45*fb1b10abSAndroid Build Coastguard Worker 46*fb1b10abSAndroid Build Coastguard Worker output = json.dumps(json.loads(json_string), indent=4, sort_keys=True) 47*fb1b10abSAndroid Build Coastguard Worker print output 48*fb1b10abSAndroid Build Coastguard Worker 49*fb1b10abSAndroid Build Coastguard Worker path = os.path.dirname(output_json) 50*fb1b10abSAndroid Build Coastguard Worker if path and not os.path.exists(path): 51*fb1b10abSAndroid Build Coastguard Worker os.makedirs(path) 52*fb1b10abSAndroid Build Coastguard Worker 53*fb1b10abSAndroid Build Coastguard Worker outfile = open(output_json, 'w') 54*fb1b10abSAndroid Build Coastguard Worker outfile.write(output) 55*fb1b10abSAndroid Build Coastguard Worker 56*fb1b10abSAndroid Build Coastguard Workerif __name__ == '__main__': 57*fb1b10abSAndroid Build Coastguard Worker sys.exit(main()) 58