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