#!/usr/bin/env python
# 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 sys

from autotest_lib.server import frontend
from autotest_lib.server.lib import suite_report
from chromite.lib import commandline
from chromite.lib import cros_logging as logging

def GetParser():
    """Creates the argparse parser."""
    parser = commandline.ArgumentParser(description=__doc__)
    parser.add_argument('job_ids', type=int, nargs='+',
                        help='Suite job ids to dump')
    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:])

    afe = None
    if options.afe:
        afe = frontend.AFE(server=options.afe)

    # Look up and generate entries for all jobs.
    entries = []
    for suite_job_id in options.job_ids:
        logging.debug('Suite job %s:' % suite_job_id)
        suite_entries = suite_report.generate_suite_report(suite_job_id,
                                                           afe=afe)
        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)
