#!/usr/bin/env python

import os
import sys
import datetime
import time
import re
import mailbox
import email.utils

def parseOne(m):
    ts = time.mktime(email.utils.parsedate(m.get('Date')))
    date = datetime.date.fromtimestamp(ts)
    last_month = date.replace(day=1) - datetime.timedelta(1)

    body = m.get_payload()

    buckets = {1:0, 10:0, 100: 0, 1000: 0}

    for (line, n, who) in re.findall(r'(^\s*(\d+)\s([a-z_-]+)$)', body, re.S|re.M):
        n = int(n)
        for i in (1,10,100,1000):
            if n >= i:
                buckets[i] += 1

    return (last_month, buckets[1], buckets[10], buckets[100], buckets[1000])

def main(args):
    mbox = mailbox.mbox(args[0])
    logs = []
    for (key, m) in mbox.iteritems():
        logs.append(parseOne(m))

    print "date n n10 n100 n1000"
    for (date, n, n10, n100, n1000) in sorted(logs, key=lambda x:x[0]):
        print "%s %s %s %s %s" % (date, n, n10, n100, n1000)

if __name__ == '__main__':
    main(sys.argv[1:])
