#!/usr/bin/python
# Takes a list of hostnames (via file) and schedules host repair
# jobs based on the delay specified in order to throttle the jobs
# and not overwhelm the system.

import sys

import common
import time

from autotest_lib.server import frontend
from chromite.lib import commandline

def GetParser():
    """Creates the argparse parser."""
    parser = commandline.ArgumentParser(description=__doc__)
    parser.add_argument('--input', type=str, action='store',
                        help='File with hostnames to repair')
    parser.add_argument('--delay_seconds', type=int, action='store', default=5,
                        help='Delay between scheduling repair jobs')
    return parser


def main(argv):
    parser = GetParser()
    options = parser.parse_args(argv)

    afe = frontend.AFE()

    with open(options.input) as input:
        hostnames = input.readlines()
        remaining = len(hostnames)
        delay = options.delay_seconds
        print "Scheduling %d repairs with %s delay in seconds" \
              % (remaining, delay)
        for hostname in hostnames:
            hostname = hostname.strip()
            afe.repair_hosts([hostname])
            remaining = remaining - 1
            print "%s host repair scheduled with %d remaining" \
                  % (hostname, remaining)
            time.sleep(delay)


if __name__ == '__main__':
    sys.exit(main(sys.argv[1:]))
