from chromite.lib import metrics

from autotest_lib.server import utils
from autotest_lib.server.cros import provision

DURATION_METRIC = '/chrome/infra/chromeos/autotest/autoserv/verify_duration'


# A string of the form 'label1,label2:value,label3'.
job_labels = locals().get('job_labels') or ','.join(args)
labels_list = [l.strip() for l in job_labels.split(',') if l]


def verify(machine):
    print 'Initializing host %s' % machine
    job.record('START', None, 'verify')
    target = hosts.create_target_machine(machine,
                                         try_lab_servo=True)
    hostname = utils.get_hostname_from_machine(machine)
    try:
        with metrics.SecondsTimer(DURATION_METRIC,
                                  fields={'dut_host_name': hostname}):
            target.verify()
            provision.run_special_task_actions(job, target, labels_list,
                                               provision.Verify)
    except Exception as e:
        logging.exception(e)
        job.record('END FAIL', None, 'verify')
        # See the provision control segment for the explanation of why we're
        # doing this.
        raise Exception('')
    else:
        hostname = utils.get_hostname_from_machine(machine)
        job.record('END GOOD', None, 'verify',
                   '%s verified successfully' % hostname)


job.parallel_simple(verify, machines)

# vim: set syntax=python :
