#!/usr/bin/env python import sys import mailbox import email import datetime try: mbox_filename = sys.argv[1] except: # to create combined.mbox: # - download files from ftp://lists.gnu.org/bug-lilypond/ # - cat 2011-04 2011-05 > combined.mbox mbox_filename = "combined.mbox" # TODO: only count replies from Bug Squad members as official # TODO: add summary at top of page? initial_emails = [] for message in mailbox.mbox(mbox_filename): # ignore automatic emails from googlecode. if message['from'].startswith('address@hidden'): continue # ignore replies to previous emails if message['references'] or message['subject'].startswith("Re:"): continue # everything else should get a response initial_emails.append(message) less_24_hours = [] less_48_hours = [] late_answer = [] never_answer = [] for question in initial_emails: # look for a response replied = False for message in mailbox.mbox(mbox_filename): if message['references']: if message['references'].find(question['message-id']) >= 0: # ick, sorry question_date = datetime.datetime(*( email.utils.parsedate(question['date'])[:-2])) answer_date = datetime.datetime(*( email.utils.parsedate(message['date'])[:-2])) delta = answer_date - question_date if delta < datetime.timedelta(hours=24): less_24_hours.append( (question, message) ) elif delta < datetime.timedelta(hours=48): less_48_hours.append( (question, message) ) else: late_answer.append( (question, message) ) replied = True break if not replied: never_answer.append( (question) ) def write_table(html_file, message, emails, color): html_file.write("

%s

\n" % message) html_file.write("") html_file.write("") if len(emails[0]) == 2: for email, answer in emails: html.write("" % ( email['date'], email['subject'], email['from'], color, answer['from'] )) else: for email in emails: html.write("" % ( email['date'], email['subject'], email['from'], color, "NOBODY" )) html.write("
Initial email Answer
%s %s %s %s
%s %s %s %s
") html = open('maybe-missing-emails.html', 'w') html.write("\n") write_table(html, "Less than 24 hours", less_24_hours, "green") write_table(html, "Less than 48 hours", less_48_hours, "yellow") write_table(html, "Late replies", late_answer, "red") write_table(html, "Never replied", never_answer, "black") html.write("") html.close()