from autotest_lib.client.common_lib.cros.graphite import autotest_stats
from autotest_lib.server import utils
from autotest_lib.server.cros import provision


# 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
    timer = None
    # We set try_lab_servo to True to trigger servo verify and
    # servo update if needed.
    target = hosts.create_target_machine(machine, initialize=False,
                                         auto_monitor=False, try_lab_servo=True)
    try:
        job.record('START', None, 'verify')
        timer = autotest_stats.Timer('verify_time')
        timer.start()

        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)
    finally:
        if timer:
            timer.stop()


job.parallel_simple(verify, machines)

# vim: set syntax=python :
