'''
Computes various system performance metrics for each second a run.
'''
#pylint: disable=C0111,C0103,E0401,E0611
from __future__ import print_function, absolute_import

import argparse
import json
import logging
import sys

from scripts.perf.performance_metrics.py_perf_metrics import RunMetrics, get_iter_names


log = logging.getLogger()

def main():
    logging.basicConfig(level=logging.INFO)
    parser = argparse.ArgumentParser(
        description=__doc__,
        formatter_class=argparse.RawTextHelpFormatter)

    parser.add_argument('run',
        help='Run ID of metrics to generate')
    parser.add_argument('--list',
        action='store_const',
        const=True,
        default=False,
        help='List available metrics')
    parser.add_argument('iters', nargs='*',
        help='Name of iters to use')
    parser.add_argument('--out',
        help='Output file to write metrics to. Defaults to STDOUT.')
    args = parser.parse_args()

    if args.list:
        print('\n'.join(get_iter_names()))
        return


    metrics = RunMetrics(args.run, args.iters)
    out = open(args.out, 'w') if args.out else sys.stdout
    for metric in metrics:
        print(json.dumps(metric, sort_keys=True, indent=2), file=out)


if __name__ == '__main__':
    main()
