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:
        job.record('END GOOD', None, 'verify',
                   '%s verified successfully' % machine)
    finally:
        if timer:
            timer.stop()


job.parallel_simple(verify, machines)

# vim: set syntax=python :
