16ac915abcdb404a00d927fe6308a47fcf09d9519hkuang# Copyright (c) 2014 The WebM project authors. All Rights Reserved. 26ac915abcdb404a00d927fe6308a47fcf09d9519hkuang# 36ac915abcdb404a00d927fe6308a47fcf09d9519hkuang# Use of this source code is governed by a BSD-style license 46ac915abcdb404a00d927fe6308a47fcf09d9519hkuang# that can be found in the LICENSE file in the root of the source 56ac915abcdb404a00d927fe6308a47fcf09d9519hkuang# tree. An additional intellectual property rights grant can be found 66ac915abcdb404a00d927fe6308a47fcf09d9519hkuang# in the file PATENTS. All contributing project authors may 76ac915abcdb404a00d927fe6308a47fcf09d9519hkuang# be found in the AUTHORS file in the root of the source tree. 86ac915abcdb404a00d927fe6308a47fcf09d9519hkuang 96ac915abcdb404a00d927fe6308a47fcf09d9519hkuang"""Standalone script which parses a gtest log for json. 106ac915abcdb404a00d927fe6308a47fcf09d9519hkuang 116ac915abcdb404a00d927fe6308a47fcf09d9519hkuangJson is returned returns as an array. This script is used by the libvpx 126ac915abcdb404a00d927fe6308a47fcf09d9519hkuangwaterfall to gather json results mixed in with gtest logs. This is 136ac915abcdb404a00d927fe6308a47fcf09d9519hkuangdubious software engineering. 146ac915abcdb404a00d927fe6308a47fcf09d9519hkuang""" 156ac915abcdb404a00d927fe6308a47fcf09d9519hkuang 166ac915abcdb404a00d927fe6308a47fcf09d9519hkuangimport getopt 176ac915abcdb404a00d927fe6308a47fcf09d9519hkuangimport json 186ac915abcdb404a00d927fe6308a47fcf09d9519hkuangimport os 196ac915abcdb404a00d927fe6308a47fcf09d9519hkuangimport re 206ac915abcdb404a00d927fe6308a47fcf09d9519hkuangimport sys 216ac915abcdb404a00d927fe6308a47fcf09d9519hkuang 226ac915abcdb404a00d927fe6308a47fcf09d9519hkuang 236ac915abcdb404a00d927fe6308a47fcf09d9519hkuangdef main(): 246ac915abcdb404a00d927fe6308a47fcf09d9519hkuang if len(sys.argv) != 3: 256ac915abcdb404a00d927fe6308a47fcf09d9519hkuang print "Expects a file to write json to!" 266ac915abcdb404a00d927fe6308a47fcf09d9519hkuang exit(1) 276ac915abcdb404a00d927fe6308a47fcf09d9519hkuang 286ac915abcdb404a00d927fe6308a47fcf09d9519hkuang try: 296ac915abcdb404a00d927fe6308a47fcf09d9519hkuang opts, _ = \ 306ac915abcdb404a00d927fe6308a47fcf09d9519hkuang getopt.getopt(sys.argv[1:], \ 316ac915abcdb404a00d927fe6308a47fcf09d9519hkuang 'o:', ['output-json=']) 326ac915abcdb404a00d927fe6308a47fcf09d9519hkuang except getopt.GetOptError: 336ac915abcdb404a00d927fe6308a47fcf09d9519hkuang print 'scrape_gtest_log.py -o <output_json>' 346ac915abcdb404a00d927fe6308a47fcf09d9519hkuang sys.exit(2) 356ac915abcdb404a00d927fe6308a47fcf09d9519hkuang 366ac915abcdb404a00d927fe6308a47fcf09d9519hkuang output_json = '' 376ac915abcdb404a00d927fe6308a47fcf09d9519hkuang for opt, arg in opts: 386ac915abcdb404a00d927fe6308a47fcf09d9519hkuang if opt in ('-o', '--output-json'): 396ac915abcdb404a00d927fe6308a47fcf09d9519hkuang output_json = os.path.join(arg) 406ac915abcdb404a00d927fe6308a47fcf09d9519hkuang 416ac915abcdb404a00d927fe6308a47fcf09d9519hkuang blob = sys.stdin.read() 426ac915abcdb404a00d927fe6308a47fcf09d9519hkuang json_string = '[' + ','.join('{' + x + '}' for x in 436ac915abcdb404a00d927fe6308a47fcf09d9519hkuang re.findall(r'{([^}]*.?)}', blob)) + ']' 446ac915abcdb404a00d927fe6308a47fcf09d9519hkuang print blob 456ac915abcdb404a00d927fe6308a47fcf09d9519hkuang 466ac915abcdb404a00d927fe6308a47fcf09d9519hkuang output = json.dumps(json.loads(json_string), indent=4, sort_keys=True) 476ac915abcdb404a00d927fe6308a47fcf09d9519hkuang print output 486ac915abcdb404a00d927fe6308a47fcf09d9519hkuang 496ac915abcdb404a00d927fe6308a47fcf09d9519hkuang path = os.path.dirname(output_json) 506ac915abcdb404a00d927fe6308a47fcf09d9519hkuang if path and not os.path.exists(path): 516ac915abcdb404a00d927fe6308a47fcf09d9519hkuang os.makedirs(path) 526ac915abcdb404a00d927fe6308a47fcf09d9519hkuang 536ac915abcdb404a00d927fe6308a47fcf09d9519hkuang outfile = open(output_json, 'w') 546ac915abcdb404a00d927fe6308a47fcf09d9519hkuang outfile.write(output) 556ac915abcdb404a00d927fe6308a47fcf09d9519hkuang 566ac915abcdb404a00d927fe6308a47fcf09d9519hkuangif __name__ == '__main__': 576ac915abcdb404a00d927fe6308a47fcf09d9519hkuang sys.exit(main()) 58