def collate_stats()

in server/app/plugins/mailstats.py [0:0]


def collate_stats(*stats):
    """Collates (sums up) stats from all hosts into one unified, global stat"""
    pending_by_recipient = {}
    pending_by_sender = {}
    pending_count = {}
    cutoff = int(time.time() - 86400)  # Only grab stats if from less than 24h ago
    for stat in stats:
        for entry in stat:
            ts = entry["ts"]
            if ts < cutoff:
                continue
            ts = str(ts)  # convert to string for dict to work
            if ts not in pending_by_recipient:
                pending_by_recipient[ts] = entry["pending_by_recipient"].copy()
            else:
                p_r = pending_by_recipient.get(ts)
                p_r.update({k: v+p_r.get(k, 0) for k, v in entry["pending_by_recipient"].items()})
            if ts not in pending_by_sender:
                pending_by_sender[ts] = entry["pending_by_sender"].copy()
            else:
                p_s = pending_by_sender[ts]
                p_s.update({k: v+p_s.get(k, 0) for k, v in entry["pending_by_sender"].items()})
            pending_count[ts] = pending_count.get(ts, 0) + entry["pending"]
    return [{
        "ts": int(k),
        "pending": pending_count[k],
        "pending_by_recipient": pending_by_recipient[k],
        "pending_by_sender": pending_by_sender[k]
    } for k in pending_count]