def get_summary_stats(items, attr):
    """
    Returns a dictionary of aggregated statistics for 'items' filtered by
    "attr'. For example, it will aggregate statistics for a host across all
    the playbook runs it has been a member of, with the following structure:

        data[host.id] = {
            'ok': 4
            'changed': 4
            ...
        }
    """
    data = {}
    for item in items:
        stats = models.Stats.query.filter_by(**{attr: item.id})
        data[item.id] = {
            'ok': sum([int(stat.ok) for stat in stats]),
            'changed': sum([int(stat.changed) for stat in stats]),
            'failed': sum([int(stat.failed) for stat in stats]),
            'skipped': sum([int(stat.skipped) for stat in stats]),
            'unreachable': sum([int(stat.unreachable) for stat in stats])
        }

        # If we're aggregating stats for a playbook, also infer status
        if attr is "playbook_id":
            data[item.id]['status'] = _infer_status(item, data[item.id])

    return data
def get_summary_stats ( items , attr ) : data = { } for item in items : stats = models . Stats . query . filter_by ( ** { attr : item . id } ) data [ item . id ] = { 'ok' : sum ( [ int ( stat . ok ) for stat in stats ] ) , 'changed' : sum ( [ int ( stat . changed ) for stat in stats ] ) , 'failed' : sum ( [ int ( stat . failed ) for stat in stats ] ) , 'skipped' : sum ( [ int ( stat . skipped ) for stat in stats ] ) , 'unreachable' : sum ( [ int ( stat . unreachable ) for stat in stats ] ) } if attr is "playbook_id" : data [ item . id ] [ 'status' ] = _infer_status ( item , data [ item . id ] ) return data
Returns a dictionary of aggregated statistics for 'items' filtered by
    "attr'. For example, it will aggregate statistics for a host across all
    the playbook runs it has been a member of, with the following structure:

        data[host.id] = {
            'ok': 4
            'changed': 4
            ...
        }