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