logparse / parsers / postfix.pyon commit rename parsers, better journald integration (e1f7605)
   1"""
   2Get message statistics from postfix/sendmail logs
   3"""
   4
   5import re
   6
   7from logparse.formatting import *
   8from logparse.util import readlog
   9from logparse import config
  10from logparse.load_parsers import Parser
  11
  12class Postfix(Parser):
  13
  14    def __init__(self):
  15        super().__init__()
  16        self.name = "postfix"
  17        self.info = "Get message statistics from postfix/sendmail logs"
  18
  19    def parse_log(self):
  20        section = Section("postfix")
  21        logger.debug("Starting postfix section")
  22        logger.debug("Searching through postfix logs")
  23        messages = re.findall('.*from\=<(.*)>, size\=(\d*),.*\n.*to=<(.*)>', 
  24                readlog(config.prefs.get("logs", "postfix")))
  25        r = []
  26        s = []
  27        size = 0
  28        logger.debug("Analysing message size")
  29        for message in messages:
  30            r.append(message[2])
  31            s.append(message[0])
  32            size += int(message[1])
  33        # size = sum([int(x) for x in messages])
  34        size = parsesize(size)
  35        n = str(len(messages))
  36
  37        logger.debug("Analysing message recipients")
  38        if (len(r) > 0):
  39            rec_data = Data()
  40            s = list(set(r))    # unique recipients
  41            if (len(s) > 1):
  42                rec_data.items = r
  43                rec_data.orderbyfreq()
  44                rec_data.truncl(config.prefs.getint("logparse", "maxlist"))
  45                rec_data.subtitle = n + " messages sent to"
  46            else:
  47                rec_data.subtitle = n + " messages sent to " + r[0]
  48            section.append_data(rec_data)
  49        else:
  50            section.append_data(Data(subtitle=n + " messages sent"))
  51        logger.info("Found {0} messages sent to {1} recipients".format(n, str(len(r))))
  52        section.append_data(Data(subtitle="Total of " + size))
  53        logger.info("Finished postfix section")
  54        return section