'Runs checks over all host data.
Args:
host_data: The data collected from a host, mapped to artifact name.
os_name: 0+ OS names.
cpe: 0+ CPE identifiers.
labels: 0+ GRR labels.
exclude_checks: A list of check ids not to run. A check id in this list
will not get run even if included in restrict_checks.
restrict_checks: A list of check ids that may be run, if appropriate.
Yields:
A CheckResult message for each check that was performed.'

@classmethod
def Process(cls, host_data, os_name=None, cpe=None, labels=None, exclude_checks=None, restrict_checks=None):

    artifacts = host_data.keys()
    check_ids = cls.FindChecks(artifacts, os_name, cpe, labels)
    conditions = list(cls.Conditions(artifacts, os_name, cpe, labels))
    for check_id in check_ids:
        if (exclude_checks and (check_id in exclude_checks)):
            continue
        if (restrict_checks and (check_id not in restrict_checks)):
            continue
        try:
            chk = cls.checks[check_id]
            (yield chk.Parse(conditions, host_data))
        except ProcessingError as e:
            logging.warn('Check    ID    %s    raised:    %s', check_id, e)
