[Mailman-Users] Determine List Bandwidth

Bryan Carbonnell carbonnb at gmail.com
Sat Jan 21 21:55:59 CET 2006

On 19/01/06, Bryan Carbonnell <carbonnb at gmail.com> wrote:
> Is there any facility within Mailman to determine the bandwidth used
> by a specific list?

Since there is no inbuilt way to do this with Mailman, I wrote a
Python script to parse the POST log and take the size of the posts to
a specific list and then multiply that by the number of active
subscribers at the time this script was run.

This gets the "stats" from the day before the script is run.

I also said that I would let everyone know if I found a way to do it,
here is the script.

Keep in mind that I don't know Python (I spent an awful lot of time
googling and read Python Docs :) That  and I haven't actually tried
this on my live server, just a backup of the post log file.

Let me know if you see anything that can be improved.


import os
import re
import datetime
import commands

# Full path to the post log file
FILE = '/full/path/to/post'
# The list of interest
LISTNAME = 'listname'

n = 0
bw = 0
# Get yesterdays date
yesterday = datetime.datetime.today() - datetime.timedelta(days=1)

# check for existence of file
if os.path.exists(FILE):
  # open file if it exists
  input = open(FILE, 'r')
  #Loop through file line by line
  for line in input:
    # Check to see if we are on a record from yesterday
    restr = yesterday.strftime("%b %d ") + "\d\d:\d\d:\d\d" \
        + yesterday.strftime(" %Y")
    if re.findall(r'%s' % restr, line):
        # Check to see if the listname is in the line
        # Check to see if the listname is in the line
        if re.findall(r'%s' % LISTNAME, line):
            ret = re.findall(r'size=\d*', line)
            ret2 = re.findall(r'\d*', ret[0])
            bw = bw + long(ret2[5])
            n = n + 1

  print n, 'posts to %s yesterday' % LISTNAME
  print bw, ' bytes received'

  # Now check and see how many members are subscribed to the listi
  memb = 0
  op = commands.getoutput('/var/mailman/bin/list_members %s' % LISTNAME)
  #print op
  for line in op.splitlines():
      memb = memb + 1
  print memb, " members subscribed"

  # Now get rid of the mebers that are set to nomail
  op = commands.getoutput('/var/mailman/bin/list_members --nomail %s'
  for line in op.splitlines():
      memb = memb - 1

  print memb, " members receiving list mail"

  # Now calculate the bandwidth
  tbw = bw * memb
  print "Approximately ", tbw, " bytes sent"

  print "log file not found"

Bryan Carbonnell - carbonnb at gmail.com
Life's journey is not to arrive at the grave safely in a well
preserved body, but rather to skid in sideways, totally worn out,
shouting "What a great ride!"

More information about the Mailman-Users mailing list