#!/usr/bin/env python3
# Copyright 2022 The Chromium Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
"""Get test health information for a Git repository.

Example Usage:

tools/android/test_health/get_test_health.py \
  --output-file ~/test_data.jsonl \
  --git-dir ~/git/chromium/src \
  --test-dir chrome/browser/android
"""

import argparse
import logging
import pathlib
import time

import test_health_exporter
import test_health_extractor


def main():
    parser = argparse.ArgumentParser(
        description='Gather Java test health information for a Git repository'
        ' and export it as newline-delimited JSON.'
    )
    parser.add_argument(
        '-o',
        '--output-file',
        type=pathlib.Path,
        required=True,
        help='output file path for extracted test health data',
    )
    parser.add_argument(
        '--git-dir',
        type=pathlib.Path,
        required=False,
        help='root directory of the Git repository to read'
        ' (defaults to the Chromium repo)',
    )
    parser.add_argument(
        '--test-dir',
        type=pathlib.Path,
        required=False,
        help='subdirectory containing the tests of interest;'
        ' defaults to the root of the Git repo',
    )
    parser.add_argument(
        '-v',
        '--verbose',
        action='store_true',
        help='Used to display detailed logging.',
    )
    args = parser.parse_args()

    if args.verbose:
        level = logging.DEBUG
    else:
        level = logging.INFO
    logging.basicConfig(
        level=level, format='%(levelname).1s %(relativeCreated)6d %(message)s'
    )

    logging.info('Extracting test health data from Git repo.')
    start_time = time.time()
    test_health_list = test_health_extractor.get_repo_test_health(
        args.git_dir, test_dir=args.test_dir
    )
    extraction_time = time.time() - start_time
    logging.debug(f'--- Extraction took {extraction_time:.2f} seconds ---')

    logging.info('Exporting test health data to file: ' + str(args.output_file))
    export_start_time = time.time()
    test_health_exporter.to_json_file(test_health_list, args.output_file)
    export_time = time.time() - export_start_time
    logging.debug(f'--- Export took {export_time:.2f} seconds ---')

    total_time = time.time() - start_time
    logging.debug(f'--- Took {total_time:.2f} seconds ---')


if __name__ == '__main__':
    main()
