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]