Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(269)

Side by Side Diff: build/android/pylib/results/presentation/test_results_presentation.py

Issue 2777353002: Upload the test results html file to google bucket. (Closed)
Patch Set: Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 #! /usr/bin/env python 1 #! /usr/bin/env python
2 # 2 #
3 # Copyright 2017 The Chromium Authors. All rights reserved. 3 # Copyright 2017 The Chromium Authors. All rights reserved.
4 # Use of this source code is governed by a BSD-style license that can be 4 # Use of this source code is governed by a BSD-style license that can be
5 # found in the LICENSE file. 5 # found in the LICENSE file.
6 6
7 import argparse 7 import argparse
8 import collections 8 import collections
9 import json 9 import json
10 import tempfile
11 import time
10 import os 12 import os
13 import subprocess
11 import sys 14 import sys
12 15
13 CURRENT_DIR = os.path.dirname(os.path.abspath(__file__)) 16 CURRENT_DIR = os.path.dirname(os.path.abspath(__file__))
14 BASE_DIR = os.path.abspath(os.path.join( 17 BASE_DIR = os.path.abspath(os.path.join(
15 CURRENT_DIR, '..', '..', '..', '..', '..')) 18 CURRENT_DIR, '..', '..', '..', '..', '..'))
16 sys.path.append(os.path.join(BASE_DIR, 'third_party')) 19 sys.path.append(os.path.join(BASE_DIR, 'third_party'))
17 import jinja2 # pylint: disable=import-error 20 import jinja2 # pylint: disable=import-error
18 JINJA_ENVIRONMENT = jinja2.Environment( 21 JINJA_ENVIRONMENT = jinja2.Environment(
19 loader=jinja2.FileSystemLoader(os.path.dirname(__file__)), 22 loader=jinja2.FileSystemLoader(os.path.dirname(__file__)),
20 autoescape=True) 23 autoescape=True)
(...skipping 246 matching lines...) Expand 10 before | Expand all | Expand 10 after
267 270
268 if not 'per_iteration_data' in json_object: 271 if not 'per_iteration_data' in json_object:
269 return 'Error: json file missing per_iteration_data.' 272 return 'Error: json file missing per_iteration_data.'
270 273
271 results_dict = collections.defaultdict(list) 274 results_dict = collections.defaultdict(list)
272 for testsuite_run in json_object['per_iteration_data']: 275 for testsuite_run in json_object['per_iteration_data']:
273 for test, test_runs in testsuite_run.iteritems(): 276 for test, test_runs in testsuite_run.iteritems():
274 results_dict[test].extend(test_runs) 277 results_dict[test].extend(test_runs)
275 return results_to_html(results_dict, cs_base_url, master_name) 278 return results_to_html(results_dict, cs_base_url, master_name)
276 279
280 def upload_to_google_bucket(html, args):
281 with tempfile.NamedTemporaryFile(suffix='.html') as temp_file:
282 temp_file.write(html)
283 dest = 'html/%s/%s_%s_%s.html' % (
284 args.test_name if args.test_name else 'test_name',
BigBossZhiling 2017/03/27 22:54:54 I am not sure whether we want to make test_name, (
jbudorick 2017/03/28 02:15:33 I think they should all be mandatory.
285 args.builder_name if args.builder_name else 'builder_name',
286 args.build_number if args.build_number else 'builder_number',
287 time.strftime('%Y_%m_%d_T%H_%M_%S'))
288 gsutil_path = os.path.join(BASE_DIR, 'third_party', 'catapult',
289 'third_party', 'gsutil', 'gsutil.py')
290
291 subprocess.check_call('python %s cp %s gs://%s/%s' % (
292 gsutil_path, temp_file.name, args.bucket, dest), shell=True)
293 return 'https://storage.googleapis.com/%s/%s' % (args.bucket, dest)
277 294
278 def main(): 295 def main():
279 parser = argparse.ArgumentParser() 296 parser = argparse.ArgumentParser()
280 parser.add_argument('--json-file', help='Path of json file.', required=True) 297 parser.add_argument('--json-file', help='Path of json file.', required=True)
281 parser.add_argument('--cs-base-url', help='Base url for code search.', 298 parser.add_argument('--cs-base-url', help='Base url for code search.',
282 default='http://cs.chromium.org') 299 default='http://cs.chromium.org')
283 parser.add_argument('--master-name', help='Master name in urls.') 300 parser.add_argument('--master-name', help='Master name in urls.')
301 parser.add_argument('--bucket', default='chromium-result-details')
302 parser.add_argument('--builder-name', help='Builder name.')
303 parser.add_argument('--build-number', help='Build number.')
304 parser.add_argument('--test-name', help='The name of the test.')
284 305
285 args = parser.parse_args() 306 args = parser.parse_args()
286 if os.path.exists(args.json_file): 307 if os.path.exists(args.json_file):
287 result_html_string = result_details(args.json_file, args.cs_base_url, 308 result_html_string = result_details(args.json_file, args.cs_base_url,
288 args.master_name) 309 args.master_name)
289 print result_html_string.encode('UTF-8') 310 print upload_to_google_bucket(result_html_string.encode('UTF-8'),
311 args)
jbudorick 2017/03/28 02:15:33 This should pass args.test_name, args.builder_name
290 else: 312 else:
291 raise IOError('--json-file %s not found.' % args.json_file) 313 raise IOError('--json-file %s not found.' % args.json_file)
292 314
293 315
294 if __name__ == '__main__': 316 if __name__ == '__main__':
295 sys.exit(main()) 317 sys.exit(main())
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698