"""Check the error logs and send any which have information in them.
If any log entries exist, a message is sent to the mailman owner address
and the logs are rotated.
"""
showLines = 100
import sys, os, string, time, errno
import paths
from Mailman import mm_cfg, Utils
import fileinput, socket, time, stat
import signal
signal.signal(signal.SIGCHLD, signal.SIG_DFL)
newLogfiles = []
text = []
text.append('Mailman Log Report')
text.append('Generated: %s' % time.ctime(time.time()))
text.append('Host: %s' % socket.gethostname())
text.append('')
logDate = time.strftime('%Y%m%d-%H%M%S', time.localtime(time.time()))
textSend = 0
for log in ( 'error', 'smtp-failures' ):
fileName = os.path.join(mm_cfg.LOG_DIR, log)
stats = os.stat(fileName)
if stats[stat.ST_SIZE] < 1: continue
fileNameNew = '%s.%s' % ( fileName, logDate )
newLogfiles.append(fileNameNew)
os.rename(fileName, fileNameNew)
open(fileName, 'w')
os.chmod(fileName, stat.S_IMODE(stats[stat.ST_MODE]))
try: os.chown(fileName, stats[stat.ST_UID], stats[stat.ST_GID])
except OSError: pass
textSend = 1
tmp = '# FILE: %s #' % fileNameNew
text.append('#' * len(tmp))
text.append(tmp)
text.append('#' * len(tmp))
text.append('')
linesLeft = showLines for line in fileinput.input(fileNameNew):
if linesLeft == 0:
text.append('[... truncated ...]')
break
linesLeft = linesLeft - 1
line = string.rstrip(line)
text.append(line)
text.append('')
if textSend:
text = string.join(text, '\n') + '\n'
siteowner = Utils.get_site_email()
Utils.SendTextToUser(
'Mailman Log Report -- %s' % time.ctime(time.time()),
text, siteowner, siteowner)
if hasattr(mm_cfg, 'COMPRESS_LOGFILES_WITH') and mm_cfg.COMPRESS_LOGFILES_WITH:
for file in newLogfiles:
os.system(mm_cfg.COMPRESS_LOGFILES_WITH % file)