78 lines
2.8 KiB
Python
Executable File
78 lines
2.8 KiB
Python
Executable File
#!/usr/bin/env python2
|
|
# Copyright 2016 The Chromium OS Authors. All rights reserved.
|
|
# Use of this source code is governed by a BSD-style license that can be
|
|
# found in the LICENSE file.
|
|
|
|
"""Generate a report on a given suite run."""
|
|
|
|
from __future__ import print_function
|
|
|
|
import common
|
|
import argparse
|
|
import logging
|
|
import sys
|
|
|
|
from autotest_lib.server.cros.dynamic_suite import frontend_wrappers
|
|
from autotest_lib.server.lib import suite_report
|
|
from chromite.lib import ts_mon_config
|
|
|
|
def GetParser():
|
|
"""Creates the argparse parser."""
|
|
parser = argparse.ArgumentParser(description=__doc__)
|
|
parser.add_argument('job_ids', type=int, nargs='+',
|
|
help='Suite job ids to dump')
|
|
# As a provision suite may exit before its all provision jobs finish, the
|
|
# provision suite report may not contain all the provision jobs. This hack
|
|
# helps to dump report for all provision jobs under the given provision
|
|
# suite (provision-job-id). See more details in crbug.com/794346
|
|
parser.add_argument('--provision-job-id', type=int,
|
|
help='Provision suite job id to dump report.')
|
|
parser.add_argument('--output', '-o', type=str, action='store',
|
|
help='Path to write JSON file to')
|
|
parser.add_argument('--afe', type=str, action='store',
|
|
help='AFE server to connect to')
|
|
return parser
|
|
|
|
|
|
def main(argv):
|
|
"""Standard main() for command line processing.
|
|
|
|
@param argv Command line arguments (normally sys.argv).
|
|
"""
|
|
|
|
parser = GetParser()
|
|
options = parser.parse_args(argv[1:])
|
|
|
|
with ts_mon_config.SetupTsMonGlobalState('dump_suite_report'):
|
|
|
|
afe = frontend_wrappers.RetryingAFE(timeout_min=5, delay_sec=10,
|
|
server=options.afe)
|
|
tko = frontend_wrappers.RetryingTKO(timeout_min=5, delay_sec=10)
|
|
|
|
job_ids = set(options.job_ids)
|
|
if options.provision_job_id:
|
|
job_ids.add(options.provision_job_id)
|
|
|
|
# Look up and generate entries for all jobs.
|
|
entries = []
|
|
for suite_job_id in job_ids:
|
|
reset_finish_time = (suite_job_id == options.provision_job_id)
|
|
|
|
logging.debug('Suite job %s:' % suite_job_id)
|
|
suite_entries = suite_report.generate_suite_report(
|
|
suite_job_id, afe=afe, tko=tko,
|
|
reset_finish_time=reset_finish_time)
|
|
logging.debug('... generated %d entries' % len(suite_entries))
|
|
entries.extend(suite_entries)
|
|
|
|
# Write all entries as JSON.
|
|
if options.output:
|
|
with open(options.output, 'w') as f:
|
|
suite_report.dump_entries_as_json(entries, f)
|
|
else:
|
|
suite_report.dump_entries_as_json(entries, sys.stdout)
|
|
|
|
|
|
if __name__ == '__main__':
|
|
main(sys.argv)
|